Jump to content

Debenu Quick PDF Library - UDF 0.10

   (1 review)

1 Screenshot

About This File

; #INDEX# =======================================================================================================================
; Title .........: UDF for "Debenu Quick PDF Library"
; AutoIt Version : 3.3.10.2++
; Language ......: English
; Description ...: A collection of functions for Debenu Quick PDF Library
; Author(s) .....: mLipok
; Modified ......:
; ===============================================================================================================================

Release note:

Spoiler

    2015/06/15
    v0.7

    QuickPDF.au3
    *    Added: many code descriptions
    *    Added: enums $__eQPDF_ERROR_* for error checking
    *    Added: error checking (each function should return @error @extended and ReturnValues )
    *    Added: New function __QPDF_ObjIsValid()
    *    Added: New function _QPDF_CreateObjectFromStream()
    *    Added: New function _QPDF_Display()
    *    Added: New function _QPDF_Display_PDFFile()
    *    Added: New function _QPDF_FolderExtractText()
    *    Added: New function _QPDF_GetInformation()
    *    Added: New function _QPDF_GetInformationEx_Lite()
    *    Added: New function _QPDF_GetPageMetricsToString()
    *    Added: New function _QPDF_MergeFiles_Lite()
    *    Added: New function _QPDF_Page_2in1()
    *    Added: New function _QPDF_Page_2in1_File()
    *    Added: New function _QPDF_PrintFromStream()
    *    Added: New function _QPDF_ReplaceFonts_in_File()
    *    Added: New function _QPDF_Rotate_Lite()
    *    Added: New function _QPDF_RotateFileLeft_Lite()
    *    Added: New function _QPDF_RotateFileRight_Lite()
    *    Added: New function _QPDF_SaveAndOpen()
    *    Added: New function _QPDF_StringInPDFFile()
    *    Added: New function _QPDF_StringInPDFStrem()
    *    Added: New function _QPDF_TextToHtml()
    *    Added: New function _QPDF_TXT_to_PDF()
    *    Added: New function _QPDF_TXT_to_PDF_Lite()
    *    Added: New function _QPDF_TXTFile_to_PDFFile()
    *    Added: New function _QPDF_UDF_ErrorDescription()
    *    Added: New function _QPDF_Html_Font_BackgroundColor()
    *    Added: New function _Matrix_Create()
    *    Added: New function _Matrix_Move()
    *    Added: New function _Matrix_Rotate()
    *    Added: New function _Matrix_Skew()
    *    Added: New function _Matrix_Zoom()
    *    Added: in _QPDF_A4toA5() Function added $oQP.NormalizePage(0)
    *    Added: in _QPDF_DrawText_Lite() Function added $oQP.NormalizePage(0)
    *    Added: _QPDF_ExtractTextFromFile() return values @Extended = $iTotalPages
    *    Added: in _QPDF_PrintPDFFile addded new parameter >>> $sPrinterName
    *    Added: __QPDF_NewLibraryPath_Commercial

    *    Changed: __QPDF_NewLibraryPath_Commercial() is now Internal Function
    *    Changed: __QPDF_UnlockKey() now have only one parameter
    *    Changed: _QPDF_CreateObject() rewriten to give complet Error Checking
    *    Changed: _QPDF_CreateObjectAndUnlock() rewriten to give complet Error Checking
    *    Changed: _QPDF_SetLicenseKey() rewriten to give complet Error Checking
    *    Changed: _QPDF_ExtractTextFromStream() use _QPDF_ExtractAllText()
    *    Renamed: $__fNotification_QPDF to $__bNotification_QPDF
    *    Removed: parameter $sLicenseKey from __QPDF_UnlockKey() function - is not needed as unlock is only for Commercial and License key is checked befor this function is called

    !!!!!!!!!!!!!!! SCRIPT BREAKING CHANGE !!!!!!!!!!!!!!!
    *    Removed: parameters $sPDF_Password from _QPDF_ExtractAllText() function
    *    Changed: $__eQPDF_ERROR_DebenuLicense >> $__eQPDF_ERROR_INVALIDLICENSEKEY
    *    Changed: _QPDF_ExtractTextFromFile(.. , $iExtractOptions --> default is 7 previously 8
    *    Changed: _QPDF_NewLibraryPath_Commercial($sDLL_FileFullPath) now have only ONE parameter
    *    Changed: _QPDF_RotateFile_Lite($sPDF_FileFullPath[, $iPageRotation = 0]) now have only ONE parameter

 

 

Erratum v0.7:

Spoiler

in examples there is:

; or just copy "c:\Program Files (x86)\Debenu\PDF Viewer SDK\TRIAL_LICENSE_KEY.TXT" to @ScriptDir & '\TRIAL_LICENSE_KEY.TXT'

but it should be:

; or just copy "c:\Program Files (x86)\Debenu\PDF Library\TRIAL_LICENSE_KEY.TXT" to @ScriptDir & '\TRIAL_LICENSE_KEY.TXT'

 

 

Forum link:

 

 


What's New in Version 0.10

Released

 

Quote

    Update History:
    ===================================================
    2014/04/25
    v0.1 First unoficial version - mLipok
    *
    *
    ===================================================
    2014/05/06
    v0.2
    *     Added: Many new function - mLipok
    *     Added: Examples - mLipok
    *
    *
    ===================================================
    2014/05/14
    v0.3
    *
    *    Removed: examples from QuickPDF.au3 - mLipok
    *     Added: separate file with examples QuickPDF_Examples.au3 - mLipok
    *     Added: _QPDF_StartUp() - mLipok
    *     Added: __QPDF_NewLibraryPath_Commercial() - mLipok
    *     ADDED: _QPDF_NewLibraryPath_Lite() - mLipok
    *     Changed: __AddLeadingZeros >> __QPDF_AddLeadingZeros - mLipok
    *     Changed: CleanUp - mLipok
    *    Changed: _QPdf_ >> _QPDF_ - mLipok
    *     Changed: Function Header - significantly supplemented - mLipok
    *     Added: additional comments - mLipok
    *     Added: new set of enum constants - mLipok
    *
    *    !!!!!!!!!!!!!!! SCRIPT BREAKING CHANGE !!!!!!!!!!!!!!!
    *    Changed: Lite Function renaming - mLipok
    *        to change your script you can use:
    *        ClipPut(StringRegExpReplace(ClipGet(),'(?i)(_QPDF)(_Lite)(_.*?)(\(|\R)','$1$3$2$4'))
    *    Changed: all functions which starts with "_QPDF__" now starts with "_QPDF_"  it means one less "_" - mLipok
    *    Changed: _QPDF_FileSplitEachPage added new Parameters $sPDF_Password (as a second not third so $sDestinationDir is moved to third position - mLipok
    *    Changed: __QPDF_CreateObjectAndUnlock($oQP) change to _QPDF_CreateObjectAndUnlock($oQP) its mean is not internal any more - mLipok
    *
    *
    ===================================================
    2014/05/31
    v0.4
    *
    QuickPDF.au3
    *    Changed: in __QPDF_UnlockKey() - Remarks changed - mLipok
    *    Fixed: in _QPDF_StartUp() fixed: 'If Not FileExists($sDLLFile) Then' removed 'Not' - mLipok
    *        because of this process did not work on systems where the library was not registered using regsvr32.exe.
    *    Added: in _QPDF_StartUp() added: return values, but their functionality is not yet implemented and described (be expected to change within a week) - mLipok
    *    Added: new function: _QPDF_PrintPDFFile([$sPDF_FileFullPath = Default[, $sPDF_Password = ''[, $iDuplex = 1 ]]]) - mLipok
    *    Added: new function: _QPDF_MergeFiles($sFirstFileFullPath, $sSecondFileFullPath[, $sOutputFileName = Default]) - mLipok
    *
    QuickPDF_Examples.au3
    *    Added: new example _QPDF_Example_MergeFiles() - mLipok
    *
    *
    ===================================================
    2014/05/31
    v0.5
    *
    QuickPDF.au3
    *    FIXED: in _QPDF_PrintPDFFile now printing all pages :) not only the first one :( - mLipok
    *
    *
    ===================================================
    2014/07/02
    v0.6
    *
    QuickPDF.au3
    *    Added: #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7    and script CleanUp - mLipok
    *    Added: Function: _QPDF_ExtractTextFromStream() - you can use this function when you have data taken from Blob from SQL databese - mLipok
    *    Added: new parameters __QPDF_NewLibraryPath_Commercial($sLibrary_NewFileFullPath, $sNewClassName, $sNewCLSID, $sNewIID) - mLipok
    *    Changed: #Region renaming - for better usage in SciTE Jump - mLipok
    *    Changed: in _QPDF_MergeFiles() -- litle change in $sOutputFileName = Default - add & '_temp.pdf' instead 'temp.pdf' - mLipok
    *    Changed: _QPDF_LastErrorCode -- Return Value containg description (string) and @error contain LastErrorCode - mLipok
    *    Changed: _QPDF_ExtractTextFromFile    default $iExtractOptions = 7 for detail see here : http://www.quickpdf.org/forum/extractfilepagetext-options-0-and-8_topic2929.html - mLipok
    *    Removed: some MsgBox - mLipok
    *   Fixed: _QPDF_StartUp() - error checking for DllOpen - mLipok
    *
    QuickPDF_Examples.au3
    *    Added: using new function __QPDF_NewLibraryPath_Commercial() - mLipok
    *        for this you need DebenuPDFLibraryAX1015.dll
    *        __QPDF_NewLibraryPath_Commercial(@ScriptDir & '\DebenuPDFLibraryAX1015.dll', 'DebenuPDFLibraryAX1015.PDFLibrary', '{5D4196E9-0A7D-48DC-BD2C-7CD3FE771B38}', '{FA7270CF-D774-4A68-8368-2C3179895E0C}')
    *
    QuickPDF_Calltip_Generator.au3
    *    NEW:  use it to generate au3.QuickPDF.calltips.api - mLipok
    *
    *
    ===================================================
    2014/07/02
    v0.6b
    *
    *    Added: new enum: Parameters for DrawTextBox $__eQPDF_DTBOX_VAlign* - mLipok
    *    Changed: enum renamed from $__QPDF_...... to $__eQPDF_...... - mLipok
    *
    *
    ===================================================
    2015/05/xx
    v0.6c intermediate version
    *
    *    No documentation - mLipok
    *       https://www.autoitscript.com/forum/topic/160875-debenu-quick-pdf-library-udf/?page=2#comment-1240768
    *
    *
    ===================================================
    2015/06/15
    v0.7
    *
    QuickPDF.au3
    *    Added: many code descriptions - mLipok
    *    Added: enums $__eQPDF_ERROR_* for error checking - mLipok
    *    Added: error checking (each function should return @error @extended and ReturnValues ) - mLipok
    *    Added: Function: __QPDF_ObjIsValid() - mLipok
    *    Added: Function: _QPDF_CreateObjectFromStream() - mLipok
    *    Added: Function: _QPDF_Display() - mLipok
    *    Added: Function: _QPDF_Display_PDFFile() - mLipok
    *    Added: Function: _QPDF_FolderExtractText() - mLipok
    *    Added: Function: _QPDF_GetInformation() - mLipok
    *    Added: Function: _QPDF_GetInformationEx_Lite() - mLipok
    *    Added: Function: _QPDF_GetPageMetricsToString() - mLipok
    *    Added: Function: _QPDF_MergeFiles_Lite() - mLipok
    *    Added: Function: _QPDF_Page_2in1() - mLipok
    *    Added: Function: _QPDF_Page_2in1_File() - mLipok
    *    Added: Function: _QPDF_PrintFromStream() - mLipok
    *    Added: Function: _QPDF_ReplaceFonts_in_File() - mLipok
    *    Added: Function: _QPDF_Rotate_Lite() - mLipok
    *    Added: Function: _QPDF_RotateFileLeft_Lite() - mLipok
    *    Added: Function: _QPDF_RotateFileRight_Lite() - mLipok
    *    Added: Function: _QPDF_SaveAndOpen() - mLipok
    *    Added: Function: _QPDF_StringInPDFFile() - mLipok
    *    Added: Function: _QPDF_StringInPDFStream() - mLipok
    *    Added: Function: _QPDF_TextToHtml() - mLipok
    *    Added: Function: _QPDF_TXT_to_PDF() - mLipok
    *    Added: Function: _QPDF_TXT_to_PDF_Lite() - mLipok
    *    Added: Function: _QPDF_TXTFile_to_PDFFile() - mLipok
    *    Added: Function: _QPDF_UDF_ErrorDescription() - mLipok
    *    Added: Function: _QPDF_Html_Font_BackgroundColor() - mLipok
    *    Added: Function: _Matrix_Create() - mLipok
    *    Added: Function: _Matrix_Move() - mLipok
    *    Added: Function: _Matrix_Rotate() - mLipok
    *    Added: Function: _Matrix_Skew() - mLipok
    *    Added: Function: _Matrix_Zoom() - mLipok
    *    Added: in _QPDF_A4toA5() Function added $oQP.NormalizePage(0) - mLipok
    *    Added: in _QPDF_DrawText_Lite() Function added $oQP.NormalizePage(0) - mLipok
    *    Added: _QPDF_ExtractTextFromFile() return values @Extended = $iTotalPages - mLipok
    *    Added: in _QPDF_PrintPDFFile addded new parameter >>> $sPrinterName - mLipok
    *    Added: __QPDF_NewLibraryPath_Commercial - mLipok
    *    Changed: __QPDF_NewLibraryPath_Commercial() is now Internal Function - mLipok
    *    Changed: __QPDF_UnlockKey() now have only one parameter - mLipok
    *    Changed: _QPDF_CreateObject() rewriten to give complet Error Checking - mLipok
    *    Changed: _QPDF_CreateObjectAndUnlock() rewriten to give complet Error Checking - mLipok
    *    Changed: _QPDF_SetLicenseKey() rewriten to give complete Error Checking - mLipok
    *    Changed: _QPDF_ExtractTextFromStream() use _QPDF_ExtractAllText() - mLipok
    *    Renamed: $__fNotification_QPDF to $__bNotification_QPDF - mLipok
    *    Removed: parameter $sLicenseKey from __QPDF_UnlockKey() function - is not needed as unlock is only for Commercial and License key is checked befor this function is called - mLipok
    *
    *    !!!!!!!!!!!!!!! SCRIPT BREAKING CHANGE !!!!!!!!!!!!!!!
    *    Removed: parameters $sPDF_Password from _QPDF_ExtractAllText() function - as is not needed - mLipok
    *    Changed: $__eQPDF_ERROR_DebenuLicense >> $__eQPDF_ERROR_INVALIDLICENSEKEY - mLipok
    *    Changed: _QPDF_ExtractTextFromFile(.. , $iExtractOptions --> default is 7 previously 8 - mLipok
    *    Changed: _QPDF_NewLibraryPath_Commercial($sDLL_FileFullPath) now have only ONE parameter - mLipok
    *    Changed: _QPDF_RotateFile_Lite($sPDF_FileFullPath[, $iPageRotation = 0]) now have only ONE parameter - mLipok
    *
    *
    ===================================================
    2015/08/xx
    v0.8 alpha-1
    *
    QuickPDF.au3
    *    Added: Function:  _QPDF_Arrow() - mLipok
    *    Added: ENUMS: $QPDF_EXT_ - mLipok
    *    Added: ENUMS: $QPDF_RET_DEFAULT = 0, $QPDF_RET_FAILURE = -1 - mLipok
    *
    *    !!!!!!!!!!!!!!! SCRIPT BREAKING CHANGE !!!!!!!!!!!!!!!
    *    Changed: ENUMS:  $__EQPDF_RETURN_ >> $QPDF_RET_ - mLipok
    *    Changed: ENUMS:  $__eQPDF_ERROR_ >> $QPDF_ERR_ - mLipok
    *    Changed: ENUMS:  $QPDF_ERR_ALL_IS_OK >> $QPDF_ERR_OK - mLipok
    *    Renamed: Function: __QPDF_ObjIsValid >> __QPDF_IsValidObject - mLipok
    *    Changed: ENUMS:  $QPDF_RET_  changed concept - ERRORS are < 0 - mLipok
    *            but if you want to check I function return with Succesc you must chceck
    *    Removed: ENUM: $QPDF_RET_OBJCREATE_ERROR - mLipok
    *    Removed: ENUM: $QPDF_RET_INVALID_COMMERCIAL_LICENSE_KEY - mLipok
    *
    *
    ===================================================
    2015/11/06
    v0.8 alpha-2
    *
    *    Added: support for QPDFLibrary 12.11 - now is default - mLipok
    *
    *
    ===================================================
    2015/11/17
    v0.8 alpha-3
    *
    *    New: Function: _QPDF_PageEnumerator - mLipok
    *    New: Function: _QPDF_Example_ExtractImages - mLipok
    *    Renamed: Enum: $QPDF_ERR_ISLITEINSTEADCOMMERCIAL >> $QPDF_ERR_ISLITE - mLipok
    *    Renamed: Enum: $QPDF_ERR_ISCOMMERCIALINSTEADLITE >> $QPDF_ERR_ISCOMMERCIAL - mLipok
    *    Renamed: Enum: $QPDF_ERR_ISNOTBEBENUOBJECT >> $QPDF_ERR_ISNOTBEBENU - mLipok
    *    Added: support for   DebenuPDFLibraryCPAX1211.dll  - mLipok
    *       http://labs.debenu.com/2015/11/09/debenu-quick-pdf-library-12-11-downloads/
    *       http://www.debenu.com/downloads/installers/debenu_quick_pdf_library_win.zip
    *    Changed: Function: _QPDF_Page_2in1_File - on succes return $sSAVE_FileFullPath - mLipok
    *
    *
    ===================================================
    2016/06/13
    v0.8
    *
    *     Added: support for DebenuPDFLibraryAX1212.dll - Now this is default setting - mLipok
    *    Added: #Au3Stripper_Ignore_Funcs=_QPDF_Shutdown - mLipok
    *    Changed: Refactored (If Then Else EndIf + Return) in many funciton - mLipok

    2017/01/29
    v0.9
    *    Added: support for QPDFLibrary 13.11 - now is default - mLipok
    *    Changed: Function: __QPDF_UnlockKey - no longer shows MsgBox - user shuld check for @error  - mLipok
    *    Changed: magic number in ObjName($oQP, $OBJ_STRING)  - mLipok
    *    Refactored: Function: __QPDF_IsValidObject - mLipok
    *    Refactored: Function:  - mLipok
    *            _QPDF_AddLinkToWeb_Lite
    *            _QPDF_AddStandardFont_Lite
    *            _QPDF_DrawText_Lite
    *            _QPDF_GetInformation_Lite
    *            _QPDF_LoadFromFile_Lite
    *            _QPDF_NewPage_Lite
    *            _QPDF_PageCount_Lite
    *            _QPDF_RotatePage_Lite
    *            _QPDF_SaveToFile_Lite
    *            _QPDF_SelectPage_Lite
    *            _QPDF_SetBaseURL_Lite
    *            _QPDF_SetInformation_Lite
    *            _QPDF_SetMeasurementUnits_Lite
    *            _QPDF_SetPageBox_Lite
    *            _QPDF_SetPageDimensions_Lite
    *            _QPDF_SetPageLayout_Lite
    *            _QPDF_SetPageMode_Lite
    *            _QPDF_SetPageSize_Lite
    *            _QPDF_SetTextAlign_Lite
    *            _QPDF_SetTextColor_Lite
    *            _QPDF_SetTextSize_Lite
    *            _QPDF_SetTextUnderline_Lite
    *            _QPDF_GetInformation
    *            _QPDF_GetPageMetricsToString
    *                DESCRIPTION:  Refactored: validation for (ByRef $oQP ... using
    *                    If __QPDF_IsUnlocked($oQP) Then
    *                        instead
    *                    If _QPDF_CreateObjectAndUnlock($oQP) = $QPDF_RET_VALID_COMMERCIAL Or _QPDF_CreateObjectAndUnlock($oQP) = $QPDF_RET_VALID_LITE Then
    *
    *
    *    Changed: Function: _QPDF_CreateObjectFromStream - fixed IsBinary checking - mLipok
    *    Changed: Function: _QPDF_CreateObjectFromStream - stream is pased as ByRef - mLipok
    *    Changed: Function: _QPDF_ExtractTextFromStream - fixed IsBinary checking - mLipok
    *    Changed: Function: _QPDF_ExtractTextFromStream - stream is pased as ByRef - mLipok
    *    Changed: Function: _QPDF_PrintFromStream - stream is pased as ByRef - mLipok
    *    Renamed: ENUMS: $QPDF_ERR_OK >> $QPDF_ERR_SUCCESS - mLipok
    *    Renamed: $__hDll_QPDF  >>  $__g_hDll_QPDF - mLipok
    *    Renamed: $__ErrorHandler_QPDF  >>  $__g_ErrorHandler_QPDF - mLipok
    *    Renamed: $__bNotification_QPDF  >>  $__g_bNotification_QPDF - mLipok
    *    Refactored: Function: _QPDF_StartUp() - mLipok
    *    Added: Enums: $QPDF_CSVTEXTCOL_* - mLipok
    *    Added: Function: _QPDF_CSVTEXT_GetMaxBoundaries() - mLipok
    *    Added: Function: __QPDF_IsStream - mLipok
    *    Refactored: Function: _QPDF_ExtractTextFromStream - mLipok
    *    Refactored: Function: _QPDF_PrintFromStream - mLipok
    *    Refactored: Function: _QPDF_CreateObjectFromStream - mLipok
    *    Added: Featrure: _QPDF_Display() If $iSelectPage = -1 Then $iSelectPage = $oQP.PageCount() - mLipok
    *    Added: Function: _QPDF_GetImagePageCount() - mLipok
    *    Added: Function: _QPDF_SetDefaultCoordinates() - mLipok
    *             !!!! FINALLY !!!!
    *             Now you should be able to use other system not only metric
    *             That means each function can be used with:
    *                 $__eQPDF_MUNITS_Default , $__eQPDF_MUNITS_Milimeters, $__eQPDF_MUNITS_Inches
    *    Added: Enums: $QPDF_ERR_FILEEXIST - mLipok
    *    Added: Enums: $QPDF_ERR_FILENOTEXIST - mLipok
    *    Added: Enums: $QPDF_EXT_PARAM1 - mLipok
    *    Added: Enums: $QPDF_EXT_PARAM2 - mLipok

    2019/10/11
    v0.10

    QuickPDF.au3
    *    Added: support for DebenuPDFLibraryAX1411.dll - mLipok
    *    Added: support for DebenuPDFLibraryAX1511.dll - mLipok
    *    Added: support for DebenuPDFLibraryAX1611.dll - mLipok
    *    Added: support for DebenuPDFLibraryAX1612.dll - mLipok
    *    Added: support for DebenuPDFLibraryAX1613.dll - mLipok
    *    Added: support for DebenuPDFLibraryAX1711.dll - mLipok
    *    Added: Function: _QPDF_EmbedFileToPDFFile() - mLipok
    *    Added: Function: _QP_MeasurementUnitsConverter() - mLipok
    *    Added: Function: _QPDF_GetOptionalContentGroupInformation() - mLipok
    *    Added: Function: _QPDF_Page_2in1_Stream() - mLipok
    *   Added: Function: _QPDF_GetOptionalContentGroupIDByName - mLipok
    *   Added: Function: _QPDF_DeleteOptionalContentGroupByName - mLipok
    *   Added: Function: _QPDF_BarCode() - mLipok
    *   Added: Function: _QPDF_Print - mLipok
    *    Added: Function: _QPDF_Compress() - mLipok
    *    Added: Function: _QPDF_CompressFile() - mLipok
    *    Added: Function: _QPDF_SaveToFile() - mLipok
    *    Added: Function: _QPDF_LastErrorDescription() - mLipok
    *    Added: Function: _QPDF_LoadFromStream() - mLipok
    *    Added: Function: _QPDF_Page_4in1() - mLipok
    *    Added: Function: _QPDF_TXTString_to_PDFFile() - mLipok
    *    Added: Function: _QPDF_CreateObjectFromFile() - mLipok
    *    Added: Function: _QPDF_LastError_Set() - mLipok
    *    Added: Function: _QPDF_LastError_ReSet() - mLipok
    *    Added: Function: _QPDF_LastError_GetCode() - mLipok
    *    Added: Function: _QPDF_LastError_GetDescription() - mLipok
    *    Added: Function: _QPDF_RotateLeft_Lite - mLipok
    *    Added: Function: _QPDF_RotateRight_Lite - mLipok
    *   Added: ENUMS: $QPDF_OCGINFO_* - mLipok
    *    Added: Enums: $QPDF_ERR_DIRECTORY - mLipok
    *   Added: ENUMS: $QPDF_ERR_NOMATCH - mLipok
    *   Added: ENUMS: $QPDF_ERR_SAVEFILE - mLipok
    *    Added: ENUMS: $QPDF_ERR_INVALIDDATATYPE - mLipok
    *    Added: ENUMS: $QPDF_ERR_INVALIDVALUE - mLipok
    *    Added: ENUMS: $QPDF_ERR_FILEISUSED - mLipok
    *    Added: ENUMS: $QPDF_ERR_LOADFILE - mLipok
    *    Added: ENUMS: $QPDF_ERR_ONEPAGEONLY - mLipok
    *    Added: ENUMS: $QPDF_EXT_PARAM3 - mLipok
    *    Added: ENUMS: $QPDF_EXT_PARAM4 - mLipok
    *    Added: ENUMS: $QPDF_EXT_PARAM5 - mLipok
    *    Added: ENUMS: $QPDF_EXT_PARAM6 - mLipok
    *    Added: Parameter in Function: _QPDF_SaveToFile() parameter $bAllowOverwrite - mLipok
    *    Added: Parameter in Function: _QPDF_RotateFileLeft_Lite($sPDF_FileFullPath) - parameter $sPDF_Password - mLipok
    *    Added: Parameter in Function: _QPDF_RotateFileRight_Lite($sPDF_FileFullPath) - parameter $sPDF_Password - mLipok
    *    Added: Parameter in Function: _QPDF_Print() - $iCopies = True - mLipok
    *    Added: Parameter in Function: _QPDF_Page_2in1() - $bTurnRight = True - mLipok
    *    Added: Parameter in Function: _QPDF_PageEnumerator() - $itextSize - mLipok
    *    Changed: Function: _QPDF_FolderExtractText() - support for $QPDF_ERR_DIRECTORY - mLipok
    *    Changed: Function: _QPDF_LastErrorCode() - return value is Integer ErrorCode - mLipok
    *    Changed: Function: _QPDF_LastErrorCode() - using static variable - mLipok
    *    Changed: Function: _QPDF_LastErrorCode() - are transparent for @error and @extended - mLipok
    *    Changed: Function: _QPDF_LastErrorCode() - are transparent for @error and @extended - mLipok
    *    Changed: Function: _QPDF_NewLibraryPath_Commercial() now check for DLL File Exist - mLipok
    *    Changed: Function: _QPDF_CSVTEXT_GetMaxBoundaries() - parameter is Object insted Text - mLipok
    *    Renamed: Function: _QPDF_LastErrorCode() >> _QPDF_LastError_SetCode() - mLipok
    *    Renamed: Function: _QPDF_LastErrorDescription() >> _QPDF_LastError_SetDescription() - mLipok
    *    Removed: MsgBox from _QPDF_NewLibraryPath_Commercial() - mLipok
    *    Fixed: Function: _QPDF_Page_2in1() - SetMeasurementUnits was not set when $bAddSplitter = False - mLipok
    *    Changed: Function: _QPDF_Display() default value: $iWidth = 600 - mLipok
    *   Added: @error handling - _QPDF_FolderExtractText - mLipok
    *   Fixed: __QPDF_IsUnlocked - usage __QPDF_IsValidObject($oQP) - mLipok
    *   Fixed: __QPDF_UnlockKey - usage __QPDF_IsValidObject($oQP) - mLipok
    *   Fixed: _QPDF_FileGetPageCount - Function Header - mLipok
    *   Added: _QPDF_LastErrorCode - is using __QPDF_IsValidObject($oQP) - mLipok
    *   Changed: _QPDF_CreateObjectFromStream - $QPDF_RET_FAILURE - mLipok
    *   Changed: _QPDF_ExtractAllText - $QPDF_RET_FAILURE - mLipok
    *   Changed: _QPDF_Arrow - $QPDF_RET_FAILURE - mLipok
    *   Changed: _QPDF_PrintPDFFile - QPDF_ERR_FILENOTEXIST instead MsgBox- mLipok
    *   Changed: _QPDF_Rotate_Lite - better paramter validation - mLipok
    *   Changed: _QPDF_SelectFont_Lite - better paramter validation - mLipok
    *   Changed: _QPDF_CSVTEXT_GetMaxBoundaries - better paramter validation - mLipok
    *   Changed: _QPDF_Display - better paramter validation - mLipok
    *   Changed: _QPDF_Page_2in1 - better paramter validation - mLipok
    *   Changed: _QPDF_PageEnumerator - better paramter validation - mLipok
    *   Changed: _QPDF_SaveAndOpen - better paramter validation - mLipok
    *   Changed: _QPDF_SetDefaultCoordinates - better paramter validation - mLipok
    *   Changed: _QPDF_StringInPDFFile - better paramter validation - mLipok
    *   Changed: _QPDF_StringInPDFStream - better paramter validation - mLipok
    *   Changed: _QPDF_TXT_to_PDF - better paramter validation - mLipok
    *   Changed: _QPDF_EmbedFileToPDFFile - better paramter validation - mLipok
    *   Changed: _QPDF_GetOptionalContentGroupInformation - better paramter validation - mLipok
    *   Changed: _QPDF_GetOptionalContentGroupInformation - refactored - mLipok
    *   Changed: _QPDF_FolderExtractText - $QPDF_ERR_DIRECTORY - mLipok
    *   Changed: _QPDF_MergeFiles_Lite - better paramter validation - mLipok
    *   Changed: _QPDF_MergeFiles_Lite - $QPDF_ERR_DIRECTORY - mLipok
    *   Changed: _QPDF_MergeFiles_Lite - using $QPDF_ERR_SAVEFILE - mLipok
    *   Changed: _QPDF_ReplaceFonts_in_File - better paramter validation - mLipok
    *   Changed: _QPDF_ReplaceFonts_in_File - $QPDF_ERR_DIRECTORY - mLipok
    *   Removed: MsgBox() in function _QPDF_ReplaceFonts_in_File - mLipok
    *   Removed: MsgBox() in function _QPDF_TXTFile_to_PDFFile - mLipok
    *    Changed:  $iDuplex = Default - it's mean do not change defalut windows driver settings - mLipok
    *    Added: support for @error reporting $QPDF_ERR_SAVEFILE in all $oQP.SaveToFile - mLipok
    *    Renamed: $__sLicenseKey_QPDF >> $__g_sLicenseKey_QPDF - mLipok
    *    Renamed: $__sDebenuPDFLibraryAX_FileFullPath >> $__g_sDebenuPDFLibraryAX_FileFullPath - mLipok
    *    Renamed: $__sClassName_Commercial_QPDF >> $__g_sClassName_Commercial_QPDF - mLipok
    *    Renamed: $__sIID_Commercial >> $__g_sIID_Commercial_QPDF - mLipok
    *    Renamed: $__sCLSID_Commercial >> $__g_sCLSID_Commercial_QPDF - mLipok
    *    Renamed: ENUM: $QPDF_ERR_ISSTILLLOCKED >> $QPDF_ERR_ISLOCKED - mLipok
    *   Removed: MsgBox() in function _QPDF_StartUp - mLipok
    *   Removed: MsgBox() in function _QPDF_EmbedFileToPDFFile - mLipok
    *   Removed: MsgBox() in function _QPDF_Page_2in1_File - mLipok
    *    Changed: Function: _QPDF_MergeFiles() - on $QPDF_ERR_GENERAL return _QPDF_LastError_GetCode() in Extended - mLipok
    *    Changed: Function: _QPDF_LoadFromFile() - uses _QPDF_LastError_Set($oQP) - mLipok
    *    Changed: Function: _QPDF_UDF_ErrorDescription() - sumplemented - mLipok
    *    Changed: Function: _QPDF_LoadFromFile() - if @error = $QPDF_ERR_LOADFILE then  @extended = _QPDF_LastError_GetCode() - mLipok
    *    Changed: Function: _QPDF_SaveToFile() - uses _QPDF_LastError_Set($oQP) - mLipok
    *    Changed: Function: _QPDF_SaveToFile() - if @error = $QPDF_ERR_SAVEFILE then  @extended = _QPDF_LastError_GetCode() - mLipok
    *    Changed: Function: all faunction is using _QPDF_SaveToFile() instead $oQP.SaveToFile - mLipok
    *    Changed: Function: _QPDF_CreateObjectFromStream() - if @error = $QPDF_ERR_STREAMCANNOTBELOADED then  @extended = _QPDF_LastError_GetCode() - mLipok
    *    Changed: Function: _QPDF_LastError_SetCode() - ConsoleWrite behavior - mLipok
    *   Refactored: Function: _QPDF_RotateFileLeft_Lite - is using _QPDF_RotateLeft_Lite() - mLipok
    *   Refactored: Function: _QPDF_RotateFileRight_Lite - is using _QPDF_RotateRight_Lite() - mLipok
    *    Refactored: Function: _QPDF_FolderExtractText() - mLipok
    *    Refactored: Function: _QPDF_ExtractTextFromStream() - mLipok
    *    Refactored: Function: _QPDF_SetLicenseKey() - mLipok
    *    Refactored: Function: __QPDF_NewLibraryPath_Commercial() - mLipok
    *    Refactored: Function: _QPDF_Print() - mLipok
    *    Refactored: Function: _QPDF_PrintPDFFile() - mLipok
    *    Refactored: Function: _QPDF_PrintFromStream() - mLipok
    *   Refactored: Function: _QPDF_CreateObjectAndUnlock - mLipok
    *    Refactored: Function: _QPDF_MergeFiles - mLipok
    *   Refactored: _QPDF_MergeFiles_Lite - mLipok
    *   Refactored: _QPDF_ReplaceFonts_in_File - mLipok
    *    Changed: Function: _QPDF_Print() - Duplex is taken action only if PageCount > 1 - mLipok
    *    Changed: Function: _QPDF_PrintPDFFile() - Duplex is taken action only if PageCount > 1 - mLipok
    *    Changed: Function: _QPDF_PrintFromStream() - Duplex is taken action only if PageCount > 1 - mLipok
    *    Changed: Function: __QPDF_IsUnlocked() return $QPDF_ERR_ISLITE if Lite is used - mLipok
    *    Changed: Function: _QP_MeasurementUnitsConverter() better parameters checking - mLipok
    *    Fixed: Function: _QPDF_SaveToFile() parameters checking - mLipok
    *    Fixed: Function: _QPDF_SaveToFile() better support for $sPDF_Password - mLipok
    *    Fixed: Function: _QPDF_ReplaceFonts_in_File()  better support for $sPDF_Password - mLipok
    *    Fixed: Function: _QPDF_A4toA5() better support for $sPDF_Password - mLipok
    *    Changed: Function: all functions using _QPDF_SaveToFile() - checked for $bAllowOverwrite usage - mLipok
    *    Changed: Function: all functions using _QPDF_LoadFromFile() - checked for $sPDF_Password usage - mLipok
    *    Changed: Function: all function specyfic - using $QPDF_ERR_LOADFILE - mLipok
    *    Changed: Function: better error reporting in any function using  _QPDF_SaveToFile() - mLipok
    *    Fixed: Funciton: _QPDF_Page_2in1_File() fix for: If $bReplaceOrginalFile=True then overwrite - mLipok


    !!!!!!!!!!!!!!! SCRIPT BREAKING CHANGE !!!!!!!!!!!!!!!
    *    Removed: Function: _QPDF_LoadFromFile_Lite() - please use _QPDF_LoadFromFile() - mLipok
    *    Removed: Function: _QPDF_SaveToFile_Lite() - please use _QPDF_SaveToFile() - mLipok
    *    Changed: Function: _QPDF_CreateObjectFromStream() - $oQP is not passed as ByRef anymore, but returned as result - mLipok
    *    Changed: Function: _QPDF_SaveToFile() - after adding $bAllowOverwrite - parameters order was changed and same way $QPDF_ERR_PAR... may be differ - mLipok
    !!!!!!!!!!!!!!! SCRIPT BREAKING CHANGE !!!!!!!!!!!!!!!

    !!!!!!!!!!!!!!! REMARK !!!!!!!!!!!!!!!
    * temporarily all Print function contain ; setting B/W printing
    * you can easily remove this feature manualy by your self
    !!!!!!!!!!!!!!! REMARK !!!!!!!!!!!!!!!
 

 

 

 

 




User Feedback

You may only provide a review once you have downloaded the file.


Skysnake

  

Check back soon

Share this review


Link to review
  • Similar Content

    • By mLipok
      Today, in the end as well, worked out using the Acrobat Reader ActiveX COM Object "AcroPDF.PDF.1"
      #include-once #include <Constants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <Misc.au3> #include <MenuConstants.au3> #include <WinAPI.au3> ;~ Thanks to BrewManNH ;~ http://www.autoitscript.com/forum/topic/134878-guiregistermsg-replacement-for-guictrlsetonevent-and-guigetmsg/ ;~ Thanks to mikell ;~ http://www.autoitscript.com/forum/topic/161985-how-to-close-gui-with-guiregistermsg/ ; Install a custom error handler Global $oMyError = ObjEvent("AutoIt.Error", "_ComErrFunc") Global $__hExampleGUI Global $__idOPEN Global $_fExit Global $__hACROBAT_GUI = '' Global $__idACROBAT_GUI_CTRL_AX = '' Global $__oACROBAT_READER = '' #include <GUIConstantsEx.au3> ;~ GUIRegisterMsg($WM_ERASEBKGND, "_WM_EXTRACTOR") ;~ GUIRegisterMsg($WM_PAINT, "_WM_EXTRACTOR") ;~ GUIRegisterMsg($WM_ACTIVATE, "_WM_EXTRACTOR") ;~ GUIRegisterMsg($WM_CAPTURECHANGED, "_WM_EXTRACTOR") ;~ GUIRegisterMsg($WM_DEVICECHANGE, "_WM_EXTRACTOR") GUIRegisterMsg($WM_EXITSIZEMOVE, "_WM_EXTRACTOR") GUIRegisterMsg($WM_COMMAND, "_WM_EXTRACTOR") GUIRegisterMsg($WM_SYSCOMMAND, "_WM_EXTRACTOR") GUIRegisterMsg($WM_HSCROLL, "_WM_EXTRACTOR") _ExampleProgram_Gui() While 1 Sleep(10) If $_fExit Then _ACROBAT_GUI_DELETE() DeleteGui() Exit EndIf WEnd Func DeleteGui() GUIDelete($__hExampleGUI) EndFunc ;==>DeleteGui Func _ExampleProgram_Gui() ; Create a GUI with various controls. $__hExampleGUI = GUICreate("Example") $__idOPEN = GUICtrlCreateButton("&Open", 310, 370, 85, 25) ; Display the GUI. GUISetState(@SW_SHOW, $__hExampleGUI) EndFunc ;==>_ExampleProgram_Gui #Region ACROBAT FUNCTION Func _AcrobatInit() $__oACROBAT_READER = ObjCreate("AcroPDF.PDF.1"); Return $__oACROBAT_READER.GetVersions EndFunc ;==>_AcrobatInit Func _Acrobat_Events(ByRef $aMSG) If $aMSG[1] = $__hACROBAT_GUI Then Switch $aMSG[0] Case $GUI_EVENT_CLOSE _ACROBAT_GUI_DELETE() EndSwitch EndIf EndFunc ;==>_Acrobat_Events Func _ACROBAT_Destroy() $__oACROBAT_READER = "" ;~ MsgBox(1,'test','destroyed') EndFunc ;==>_ACROBAT_Destroy Func _AcrobatShow($sFile, $sTitle = "PDF ", $iLeft = 50, $iTop = 0, $iWidth = 1000, $iHeight = 700) If FileExists($sFile) Then _AcrobatInit() ; Set option $__oACROBAT_READER.src = $sFile $__oACROBAT_READER.SetLayoutMode(4) $__oACROBAT_READER.SetPageMode(1) $__oACROBAT_READER.SetShowToolbar(0) $__oACROBAT_READER.SetView(1) ; Create GUI $__hACROBAT_GUI = GUICreate($sTitle, $iWidth, $iHeight, $iLeft, $iTop, BitOR($GUI_SS_DEFAULT_GUI, $WS_SIZEBOX, $WS_MAXIMIZEBOX)) $__idACROBAT_GUI_CTRL_AX = GUICtrlCreateObj($__oACROBAT_READER, 5, 5, $iWidth - 20, $iHeight - 10) GUICtrlSetStyle($__idACROBAT_GUI_CTRL_AX, $WS_VISIBLE) GUISetState() EndIf EndFunc ;==>_AcrobatShow Func _ACROBAT_Refresh() If IsObj($__oACROBAT_READER) Then Local $hPreviouslyGui = GUISwitch($__hACROBAT_GUI) GUISetState(@SW_LOCK) Local $iGUI_PDFWidth = WinGetPos($__hACROBAT_GUI)[2] - 20 Local $iGUI_PDFHeight = WinGetPos($__hACROBAT_GUI)[3] - 40 Local $sFile = $__oACROBAT_READER.src ; this below line do not works with Acro Reader ; Local $iCurrentPage = $__oACROBAT_READER.GetNumber Local $iCurrentPage = 0 _ACROBAT_Destroy() GUICtrlDelete($__idACROBAT_GUI_CTRL_AX) _AcrobatInit() $__idACROBAT_GUI_CTRL_AX = GUICtrlCreateObj($__oACROBAT_READER, 5, 5, $iGUI_PDFWidth, $iGUI_PDFHeight) $__oACROBAT_READER.src = $sFile ;~ $__oACROBAT_READER.SetCurrentPage($iCurrentPage) GUISetState(@SW_UNLOCK) GUISwitch($hPreviouslyGui) EndIf EndFunc ;==>_ACROBAT_Refresh Func _ACROBAT_GUI_DELETE() _ACROBAT_Destroy() if IsHWnd($__hACROBAT_GUI) then GUIDelete($__hACROBAT_GUI) EndFunc ;==>_ACROBAT_GUI_DELETE #EndRegion ACROBAT FUNCTION #Region MSG and ERROR HANDLER Func _WM_EXTRACTOR($hWnd, $iMsg, $wParam, $lParam) ;~ ConsoleWrite('! $hWnd = ' & $hWnd & ' $iMsg = ' & $iMsg & '('&HEX($iMsg)&')'& ' $wParam = ' & $wParam & ' $lParam = ' & $lParam & @CRLF) If $hWnd = ControlGetHandle($__hACROBAT_GUI, '', $__idACROBAT_GUI_CTRL_AX) Then ConsoleWrite('! -------------- $hWnd = ' & $hWnd & ' $iMsg = ' & $iMsg & '(' & Hex($iMsg) & ')' & ' $wParam = ' & $wParam & ' $lParam = ' & $lParam & @CRLF) EndIf If $hWnd = $__hACROBAT_GUI Then Switch $iMsg Case $WM_COMMAND #cs Case $WM_ACTIVATE Local $test = BitAND($wParam, 0x00000004) if $test <> 0 then MsgBox(1,'$WM_ACTIVATE','test') _ACROBAT_Refresh() EndIf Case $WM_ERASEBKGND WinGetHandle("[ACTIVE]") if $__hACROBAT_GUI <> _WinAPI_GetWindow ( $__hACROBAT_GUI, $GW_HWNDPREV ) then ConsoleWrite('! Case $WM_ERASEBKGND' & @CRLF) _ACROBAT_Refresh() _WinAPI_RedrawWindow($__hACROBAT_GUI,0,0,$RDW_NOERASE) EndIf Case $WM_PAINT _WinAPI_RedrawWindow($__hACROBAT_GUI,0,0,$RDW_NOERASE) Case $WM_CAPTURECHANGED _ACROBAT_Refresh() Case $WM_DEVICECHANGE _ACROBAT_Refresh() #ce Case $WM_EXITSIZEMOVE _ACROBAT_Refresh() Case $WM_SYSCOMMAND ;~ Local $test = BitAND($wParam, 0xFFF0) Local $test = BitAND($wParam, 0x0000FFFF) Switch $test Case $SC_CLOSE _ACROBAT_GUI_DELETE() Case $SC_CONTEXTHELP Case $SC_DEFAULT Case $SC_HOTKEY Case $SC_HSCROLL Case $SC_KEYMENU Case $SC_MAXIMIZE _ACROBAT_Refresh() Case $SC_MINIMIZE Case $SC_MONITORPOWER Case $SC_MOUSEMENU Case $SC_MOVE ;~ _ACROBAT_Refresh() Case $SC_NEXTWINDOW ;~ _ACROBAT_Refresh() Case $SC_PREVWINDOW ;~ _ACROBAT_Refresh() Case $SC_RESTORE _ACROBAT_Refresh() Case $SC_SCREENSAVE Case $SC_SIZE Case $SC_TASKLIST Case $SC_VSCROLL EndSwitch EndSwitch EndIf If $hWnd = $__hExampleGUI Then Switch $iMsg Case $WM_COMMAND Local $nID = BitAND($wParam, 0x0000FFFF) Local $hCtrl = $lParam Switch $nID Case $__idOPEN if not IsObj($__oACROBAT_READER) then _AcrobatShow(FileOpenDialog("Choose PDF", "C:\Temp", "PDF Files(*.pdf)", 3)) ; put your own start folder here) EndIf EndSwitch Case $WM_SYSCOMMAND Local $test = BitAND($wParam, 0xFFF0) Switch $test Case $SC_CLOSE $_fExit = True Case $SC_CONTEXTHELP Case $SC_DEFAULT Case $SC_HOTKEY Case $SC_HSCROLL Case $SC_KEYMENU Case $SC_MAXIMIZE Case $SC_MINIMIZE Case $SC_MONITORPOWER Case $SC_MOUSEMENU Case $SC_MOVE Case $SC_NEXTWINDOW Case $SC_PREVWINDOW Case $SC_RESTORE Case $SC_SCREENSAVE Case $SC_SIZE Case $SC_TASKLIST Case $SC_VSCROLL EndSwitch EndSwitch EndIf Return $GUI_RUNDEFMSG EndFunc ;==>_WM_EXTRACTOR Func _ComErrFunc() Local $HexNumber = Hex($oMyError.number, 8) MsgBox(0, "AutoItCOM Test", _ "We intercepted a COM Error !" & @CRLF & @CRLF & _ "err.description is: " & @TAB & $oMyError.description & @CRLF & _ "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _ "err.number is: " & @TAB & $HexNumber & @CRLF & _ "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _ "err.source is: " & @TAB & $oMyError.source & @CRLF & _ "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oMyError.helpcontext _ ) SetError(1) EndFunc ;==>_ComErrFunc #EndRegion MSG and ERROR HANDLER Any comments are welcome.
      Cheers
      mLipok
    • By matwachich
      Hi guys!
      A pretty simple UDF to convert HTML to PDF using wkHTMLtoPDF.
      It uses the C API of the tool (DLL), so no external process, no ActiveX or COM sh*t.
      See the example, and the documentation of wkHTMLtoPDF.
      Cheers
      https://github.com/matwachich/wkhtmltopdf-au3
    • By stafe
      Hello
      I am trying to get chrome to save it's current webpage to a pdf using autoit.  I wold like to save the file into a folder on the desktop called "ChromeFiles" .  However when I use the send command chrome only occasionally responds.
      Thank you
      Simon
       
    • By Mannyfresh31
      First of all IDK if it's OK to post this topic here and if not I'm asking to move it to the right place.
      Anyway I ask for help in the PDF UDF main thread but nobody has answer me yet and I really need help on this.
      See the problem started when I upgraded Autoit to its new version you can see the thread in the following link 
       
    • By Skysnake
      I need help.
      I have a project that outputs reports to PDF using @mLipok's lovely QuickPDF.  The PDF is created with no problem and I am sure the problem is not there.
      However, I then have to open the PDF so the user can see it.
      I use (a) short file name and (b) object properties
      $oQP.SetPageLayout(2) $oQP.SetPageMode(3) ... $sFilename ; as created by UDF Local $sShortname = FileGetShortname( sFilename , 1 ) Run( @ComSpec & " /c start /max " & sShortname, "", @SW_HIDE ) ; force default PDF reader to open PDF maximized Then the RUN should open it with the default application.
      I have tested extensively on 32 bit Win7 and 64 bit Win10.  Works.
      However, 64 bit Win8 and another Win7 laptop gives a problem.
      The problem is this: when (typically) Adobe Reader is ALREADY open, the PDF opens almost instantaneously.  If the Reader is not open, it seems to stall.  Never opens.
      The host on which the report will be opened is unknown to me and the PDF reader can not be hard coded.
      Right now, my only brutal, very un-stylish solution is to force the Reader open prior to the RUN command.
      Any ideas or advice on what causes this or how it could be remedied would be greatly appreciated.
      Anything, please.
      -Skysnake
×
×
  • Create New...