Jump to content

Create PDF from your application


taietel
 Share

Recommended Posts

I am trying to get the mixed example to work in this UDF.  In particular, I want to get images inserted into the PDF.  After pulling down the 105 version and updating to 3.3.14.5, the mixed example works except the _insertimage function.  I tried to follow a link to get 6 files from somewhere but that led me to the forum post indicating I should update.  Does anyone have this UDF working with the _insertimage function?

Link to comment
Share on other sites

On 4/2/2019 at 4:09 PM, Reaper HGN said:

I am trying to get the mixed example to work in this UDF.  In particular, I want to get images inserted into the PDF.  After pulling down the 105 version and updating to 3.3.14.5, the mixed example works except the _insertimage function.  I tried to follow a link to get 6 files from somewhere but that led me to the forum post indicating I should update.  Does anyone have this UDF working with the _insertimage function?

I narrowed the sample code down to the smallest that would create a PDF with a diagonal line.  None of the "_insertimage" statements work though.   Am I missing something?  

#include "..\MPDF_UDF.au3"

;set the properties for the pdf
_SetUnit($PDF_UNIT_CM)
_SetPaperSize("A4")
_SetZoomMode($PDF_ZOOM_CUSTOM,90)
_SetOrientation($PDF_ORIENTATION_PORTRAIT)
_SetLayoutMode($PDF_LAYOUT_CONTINOUS)
_OpenAfter(True);open after generation


;initialize the pdf
_InitPDF(@ScriptDir & "\pdf_graphic_test.pdf")

;=== load resources used in pdf ===
;images:
_LoadResImage("taietel2", @ScriptDir & "\Images\gif.gif")
_LoadResImage("taietel3", @ScriptDir & "\Images\jpg.jpg")
_LoadResImage("taietel4", @ScriptDir & "\Images\ico.ico")
_LoadResImage("taietel5", @ScriptDir & "\Images\tif.tif")


_BeginPage()
    _InsertImage("taietel2", 2, 7, 5, 7)
    _InsertImage("taietel5", 2, 10.5, 7, 5)
    _InsertImage("taietel3", 2, 10.5, 7, 5)
    _InsertImage("taietel4", 2, 10.5,1,1)
    _DrawLine(2, 2, 12, 6, $PDF_STYLE_STROKED, 10, 0.1, 0x996600, 0, 0)
_EndPage()

_ClosePDFFile()

 

Link to comment
Share on other sites

 @Reaper HGN  here all it works well.
I used this udf downloaded from this post: ( https://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/?do=findComment&comment=1158973 )
save this example script and the MPDF_UDF.au3 udf both in the same folder, (and of course make sure that the "images" folder is also present in the same folder as the script and contains the images)
since that udf version still uses the _Iif () function which is no longer present in the new AutoIt versions, you have to create an alternative one either in the script or in the udf itself (I inserted it in the example script)
hope this will help you

; get udf from the following post:
; https://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/?do=findComment&comment=1158973
#include "MPDF_UDF.au3"

;set the properties for the pdf
_SetUnit($PDF_UNIT_CM)
_SetPaperSize("A4")
_SetZoomMode($PDF_ZOOM_CUSTOM, 90)
_SetOrientation($PDF_ORIENTATION_PORTRAIT)
_SetLayoutMode($PDF_LAYOUT_CONTINOUS)
_OpenAfter(True);open after generation

;initialize the pdf
_InitPDF(@ScriptDir & "\pdf_graphic_test.pdf")

;=== load resources used in pdf ===
;images:
_LoadResImage("taietel2", @ScriptDir & "\Images\gif.gif")
_LoadResImage("taietel3", @ScriptDir & "\Images\jpg.jpg")
_LoadResImage("taietel4", @ScriptDir & "\Images\ico.ico")
_LoadResImage("taietel5", @ScriptDir & "\Images\tif.tif")

_BeginPage()
_InsertImage("taietel2", 3, 3, 2, 2)
_InsertImage("taietel5", 5, 5.5, 2, 2)
_InsertImage("taietel3", 7, 8, 2, 2)
_InsertImage("taietel4", 9, 10.5, 2, 2)
_DrawLine(2, 2, 12, 6, $PDF_STYLE_STROKED, 10, 0.1, 0x996600, 0, 0)
_EndPage()

_ClosePDFFile()

Func _Iif($fTest, $vTrueVal, $vFalseVal)
    If $fTest Then
        Return $vTrueVal
    Else
        Return $vFalseVal
    EndIf
EndFunc   ;==>_Iif

 

 

image.jpeg.9f1a974c98e9f77d824b358729b089b0.jpeg Chimp

small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Link to comment
Share on other sites

I am looking through the UDF to see if I can figure out how to set the background color of the PDF.  By default, its white.  I was hoping I could change it to black.  Anyone have an idea of how to do that?  Am I missing a simple variable somewhere?

Thanks

 

Link to comment
Share on other sites

.... I don't know if there is a parameter to set the background color of the whole paper, however you could use the _Draw_Rectangle () function which allows you to set a background color, and set a rectangle as large as the whole page within the two _StartObject () and _EndObject () 'tags' using the parameter $PDF_OBJECT_ALLPAGES. In this way the colored rectangle is repeated on all the pages as a background. For example for an A4 paper you could use something like this:

....
; ----- draw this on all pages ------------------------------------------------
; this "object" will be automatically inserted on each new page
;
_StartObject("Background", $PDF_OBJECT_ALLPAGES)
    _Draw_Rectangle(0, 0, 595.276, 841.890, $PDF_STYLE_STROKED, 0, 0x000000, 0)
_EndObject()
; -----------------------------------------------------------------------------
_BeginPage(); begin new page (above object is inserted automatically)
;
....


P.S. At following links there are two examples of using this UDF that may interest you as an example.

https://www.autoitscript.com/forum/topic/187723-create-a-pdf-with-own-style/?do=findComment&comment=1348757

https://www.autoitscript.com/forum/topic/166444-perpetual-calendar-generated-in-pdf-format

 

 

image.jpeg.9f1a974c98e9f77d824b358729b089b0.jpeg Chimp

small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Link to comment
Share on other sites

  • 1 month later...
  • 2 weeks later...
  • 4 months later...
57 minutes ago, Neocortex said:

Hello!
Is it possible to improve the image quality? It's converting my 240MB PNGs to 14MB, and the quality drop is visible

By replacing this line

                ;_GDIPlus_ImageSaveToFile($hClone, $newImg)

With this

    $iJPGQual = 99
    $sCLSID = _GDIPlus_EncodersGetCLSID("JPG")
    $tParams = _GDIPlus_ParamInit(1)
    $tData = DllStructCreate("int Quality")
    DllStructSetData($tData, "Quality", $iJPGQual)
    $pData = DllStructGetPtr($tData)
    _GDIPlus_ParamAdd($tParams, $GDIP_EPGQUALITY, 1, $GDIP_EPTLONG, $pData)
    $pParams = DllStructGetPtr($tParams)
    _GDIPlus_ImageSaveToFileEx($hClone, $newImg, $sCLSID, $pParams)

The JPG quality can be changed,

also the generated PDF-s are smaller than expected, I think because its built with 72 dpi, the paper size have to be increased accordingly for print jobs

Link to comment
Share on other sites

Hello,

 

i found a bug in this UDF:

Func _LoadFontTT($sAlias, $BaseFont, $sOptions = $PDF_FONT_NORMAL)
    Local $sTemp = ""
    $_Font = $_Font + 1
    $BaseFont = StringReplace($BaseFont, " ", "")
    Switch $BaseFont
        Case "TimesNewRoman"
            __FontTimes($sOptions)
        Case "CourierNew"
            __FontCourier($sOptions)
        Case "Symbol"
            __FontSymbol($sOptions)
        Case "Calibri"
            __FontCalibri($sOptions)
        Case "Garamond"
            __FontGaramond($sOptions)
        Case Else
            __FontArial($sOptions)
    EndSwitch
    Local $i = __InitObj()
    __ToBuffer("<< /Type/Font/Subtype/TrueType/Name/" & $sAlias & "/BaseFont/" & $BaseFont & $sOptions & "/FirstChar " & $FirstChar & "/LastChar " & $LastChar & "/FontDescriptor " & $i + 1 & " 0 R/Encoding/WinAnsiEncoding/Widths [")
;~  For $j = $FirstChar To $LastChar
;~      If $Widths[$j - $FirstChar] <> 0 Then
;~          $sTemp &= __ToStr($Widths[$j - $FirstChar]) & " "
;~          If Mod($j - $FirstChar + 1, 16) = 0 Or $j = $LastChar Then
;~              __ToBuffer($sTemp)
;~              $sTemp = ""
;~          EndIf
;~      EndIf
;~  Next
    For $j = $FirstChar To $LastChar
        If $Widths[$j] <> 0 Then
            $sTemp &= __ToStr($Widths[$j]) & " "
            If Mod($j + 1, 16) = 0 Or $j = $LastChar Then
                __ToBuffer($sTemp)
                $sTemp = ""
            EndIf
        EndIf
    Next
    __ToBuffer("] >>")
    __EndObj()
    $_sFONT = $_sFONT & "/" & $sAlias & " " & $i & " 0 R " & @CRLF
    $_sFONTNAME = $_sFONTNAME & "<" & $sAlias & ">" & StringRight("0000" & $_Font, 4) & ";"
    ;$i =
    __InitObj()
    __ToBuffer("<< /Type/FontDescriptor/FontName/" & $BaseFont & $Param & ">>")
    __EndObj()
EndFunc   ;==>_LoadFontTT

I Changed the For Next Loop.

It did not add all the Encodings to the PDF file:

StringSplit("278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, " & _
            "556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, " & _
            "556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, " & _
            "556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, " & _
            "260, 334, 584, 750, 556, 750, 222, 556, 333, 1000, 556, 556, 333, 1000, 667, 333, 1000, 750, 611, 750, 750, 222, 222, 333, " & _
            "333, 350, 556, 1000, 333, 1000, 500, 333, 944, 750, 500, 667, 278, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, " & _
            "333, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, " & _
            "1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, " & _
            "611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, " & _
            "611, 556, 556, 556, 556, 500, 556, 500", ", ", 3)

It cut off the last 32 cause the loop was wrong. This had side effects on created PDFs with German Umlaute like üäö. Now the encoding is fine and the PDF looks great 🙂

Link to comment
Share on other sites

@Rikanono

Thanks for sharing.

Unfortunatelly your fix doesn't solve problem with Czech national characters which are still cripled, so this UDF is still not usable for Czech users (me) 😞

Here is my used/fixed UDF and example for testing Czech national characters (code page 1250): ěščřžýáíé

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_AU3Check_Stop_OnWarning=y
#AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include-once
#include <GDIPlus.au3>
#include <Misc.au3>
#include <File.au3>
; #INDEX# =======================================================================================================================
; Title .........: MIPDF
; AutoIt Version : 3.3.6.1
; Description ...: Generate pdf using just AutoIt functions.
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Version .......: 1.0.3
; Last Rev. .....: August 10, 2011
; ===============================================================================================================================

; #CHANGES# =====================================================================================================================
; 1.0.3     Rewrote _LoadResImage function - optimize for speed (GDI+ stuff)
;           Thanks to xavierh for finding a missing space in the _LoadFontTT function (even it looks insignificant, that solved
;           an issue with text justification when using Adobe Reader)
; -------------------------------------------------------------------------------------------------------------------------------
; 1.0.2     Fixed a bug (a big one) related with objects. Foxit Reader worked well, but Adobe Reader gave some errors. Now both
;           work fine.
;           Added individual page rotation
;           Dennis Sandstrom (aka StuffByDennis) added two more functions (_Draw_Path and _Draw_Polygon)
; -------------------------------------------------------------------------------------------------------------------------------
; 1.0.1     Added more page formats
;           Added two more fonts (Calibri and Garamond)
;           Changed $PDF_PAGE_A4/~ to "a4","letter" etc (it's not case-sensitive)
;           Fixed Txt2PDF function from the example.
;           Added another function for table.
; -------------------------------------------------------------------------------------------------------------------------------
; 1.0.0     Fixed the name af the saved pdf
; ===============================================================================================================================

; #CURRENT# =====================================================================================================================
; _BeginPage
; _ClosePDFFile
; _DrawArc
; _DrawCircle
; _DrawCurve
; _DrawLine
; _DrawText
; _Draw_Path
; _Draw_Polygon
; _Draw_Rectangle
; _EndObject
; _EndPage
; _GetMargin
; _GetPageHeight
; _GetPageWidth
; _GetTextLength
; _GetUnit
; _InitPDF
; _InsertDCube
; _InsertDPie
; _InsertImage
; _InsertRenderedText
; _LineTo
; _LoadFontStandard
; _LoadFontTT
; _LoadResImage
; _MoveTo
; _OpenAfter
; _Pages
; _Paragraph
; _Path
; _Rectangle
; _SetCharSpacing
; _SetColourFill
; _SetColourStroke
; _SetDash
; _SetKeywords
; _SetLayoutMode
; _SetLineCap
; _SetLineJoin
; _SetLineWidth
; _SetMargin
; _SetMiterLimit
; _SetOrientation
; _SetPageHeight
; _SetPageWidth
; _SetPaperSize
; _SetSubject
; _SetTextHorizontalScaling
; _SetTextRenderingMode
; _SetTextRiseMode
; _SetTitle
; _SetUnit
; _SetWordSpacing
; _SetZoomMode
; _StartObject
; ===============================================================================================================================
#region CONSTANTS
Global $PDF_VERSION = "%PDF-1.5" & @CRLF & "%" & ChrW(199) & ChrW(200) & ChrW(201) & ChrW(202)
Global $PDF_AUTHOR = "Mihai Iancu"
Global $PDF_CREATOR = "MIPDF"
Global $PDF_COPYRIGHT = "© 1973-" & @YEAR & " Mihai Iancu"
Global $PDF_TITLE = ""
Global $PDF_SUBJECT = ""
Global $PDF_KEYWORDS = ""
Global $PDF_NAME = ""

Global Const $PDF_STYLE_NONE = 0x0
Global Const $PDF_STYLE_STROKED = 0x1
Global Const $PDF_STYLE_CLOSED = 0x2
Global Const $PDF_STYLE_FILLED = 0x4

Global Const $PDF_FONT_NORMAL = ""
Global Const $PDF_FONT_BOLD = ",Bold"
Global Const $PDF_FONT_ITALIC = ",Italic"
Global Const $PDF_FONT_BOLDITALIC = ",BoldItalic"

Global $PDF_FONT_STD_HELVETICA = "Helvetica"
Global $PDF_FONT_STD_COURIER = "Courier"
Global $PDF_FONT_STD_SYMBOL = "Symbol"
Global $PDF_FONT_STD_ZAPFDINGBATS = "ZapfDingbats"
Global $PDF_FONT_STD_ARIAL = "Helvetica";looks the same
Global $PDF_FONT_STD_TIMES = "Times Roman"

Global $PDF_FONT_COURIER = $PDF_FONT_STD_COURIER & " New"
Global $PDF_FONT_ARIAL = $PDF_FONT_STD_ARIAL
Global $PDF_FONT_TIMES = "Times New Roman"
Global $PDF_FONT_SYMBOL = $PDF_FONT_STD_SYMBOL
Global $PDF_FONT_CALIBRI = "Calibri"
Global $PDF_FONT_GARAMOND = "Garamond"

Global Const $PDF_ALIGN_LEFT = 1
Global Const $PDF_ALIGN_RIGHT = 2
Global Const $PDF_ALIGN_CENTER = 3

Global Const $PDF_UNIT_PT = 1
Global Const $PDF_UNIT_INCH = 2
Global Const $PDF_UNIT_MM = 4
Global Const $PDF_UNIT_CM = 8

Global Const $PDF_ZOOM_FULLPAGE = 0
Global Const $PDF_ZOOM_FULLWIDTH = 1
Global Const $PDF_ZOOM_REAL = 2
Global Const $PDF_ZOOM_DEFAULT = 4
Global Const $PDF_ZOOM_CUSTOM = 8

Global Const $PDF_LAYOUT_SINGLE = 0
Global Const $PDF_LAYOUT_CONTINOUS = 1
Global Const $PDF_LAYOUT_TWO = 2
Global Const $PDF_LAYOUT_DEFAULT = 4

Global Const $PDF_ORIENTATION_PORTRAIT = 0
Global Const $PDF_ORIENTATION_LANDSCAPE = 1

Global $PDF_OBJECT_NAME = ""
Global $PDF_OBJECT_OPTIONS = ""
Global Const $PDF_OBJECT_NONE = 0
Global Const $PDF_OBJECT_FIRSTPAGE = 0x1
Global Const $PDF_OBJECT_EVENPAGES = 0x2
Global Const $PDF_OBJECT_ODDPAGES = 0x4
Global Const $PDF_OBJECT_NOTFIRSTPAGE = 0x8
Global Const $PDF_OBJECT_ALLPAGES = BitAND($PDF_OBJECT_EVENPAGES, $PDF_OBJECT_ODDPAGES, $PDF_OBJECT_FIRSTPAGE)

Global $BaseFont
Global $FirstChar
Global $LastChar
Global $Param
Global $MissingWidth
Global $Widths[256]
Global $__SetUnit
Global $_PaperSize = "A4"
Global $_Orientation = $PDF_ORIENTATION_PORTRAIT
Global $__SetMargin = 0
Global $_Pages = 0
Global $_CharSpacing
Global $_WordSpacing
Global $_TextScaling
Global $_PageWidth
Global $_PageHeight
Global $_FileName
Global $_Offset = 0
Global $_Font = ""
Global $_ZoomMode
Global $_LayoutMode
Global $_sPage=" "
Global $_sFONT
Global $_sFONTNAME
Global $_Image=""
Global $_sObject
Global $_iResource
Global $_iPages
Global $_iObject = 0
Global $_iMaxObject
Global $_iTmpOffset
Global $_iImageW
Global $_iImageH
Global $_Buffer = ""
Global $_bOpen = False

Global $aXREF[1000]
Global $aOBJECTS[2] = [$PDF_OBJECT_NAME, $PDF_OBJECT_OPTIONS]
#endregion CONSTANTS
#region FUNCTIONS
; #FUNCTION# ====================================================================================================================
; Name ..........: _BeginPage
; Description ...: Begin a new page
; Syntax ........: _BeginPage( [ $iRotate ] )
; Parameters ....: $iRotate             - [optional]  multiple of 90 (default = 0).
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......: July 05, 2011
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _BeginPage($iRotate=0)
    Local $intPage
    If BitAND($iRotate<>0, Mod($iRotate,90)<>0, $iRotate<>"") Then
        MsgBox(48, "Error", "When seting rotation of the page, it has to be multiple of 90 or 0!"&@CRLF&"Try again.",3)
        Exit
    EndIf
    $_Pages += 1
    $intPage = __InitObj()
    __ToBuffer("<</Type /Page /Parent 3 0 R /Contents " & $intPage + 1 & " 0 R /Rotate "&$iRotate&">>")
    __EndObj()
    $_sPage &= $intPage & " 0 R "
    __InitObj($intPage + 1)
    __ToBuffer("<< /Length " & $intPage + 2 & " 0 R >>" & @CRLF & "stream")
    $_iTmpOffset = $_Offset
    __InsertObjectOnPage()
    $_CharSpacing = 0
    $_WordSpacing = 0
    $_TextScaling = 100
    Return $_Pages
EndFunc   ;==>_BeginPage

; #FUNCTION# ====================================================================================================================
; Name ..........: _ClosePDFFile
; Description ...: Write the buffer to the pdf
; Syntax ........: _ClosePDFFile(  )
; Parameters ....:
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......: _InitPDF()
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _ClosePDFFile()
    $_iResource = __InitObj(4)
    __ToBuffer("<<" & _
            _Iif($_sFONT <> "", "/Font<<" & $_sFONT & ">>", "") & _
            "/ProcSet [/PDF/Text" & _Iif($_Image <> "", "/ImageB/ImageC/ImageI", "") & "]" & _
            _Iif(($_Image <> "") Or ($_sObject <> ""), "/XObject <<" & $_Image & $_sObject & ">>", "") & ">>")
    __EndObj()
    $_iPages = __InitObj(3)
    __ToBuffer("<</Type /Pages /Count " & $_Pages & " /MediaBox [0 0 " & __ToStr($_PageWidth,1) & " " & __ToStr($_PageHeight,1) & "] " & _
            "/CropBox [" & __ToStr($__SetMargin) & " " & __ToStr($__SetMargin) & " " & __ToStr($_PageWidth - $__SetMargin,1) & " " & __ToStr($_PageHeight - $__SetMargin,1) & "] " & _
            _Iif($_Orientation = $PDF_ORIENTATION_LANDSCAPE, "/Rotate -90", "") & "/Kids [" & $_sPage & "] " & "/Resources " & $_iResource & " 0 R>>")
    __EndObj()
    __ToBuffer("xref")
    __ToBuffer("0 " & $_iMaxObject+1)
    __ToBuffer("0000000000 65535 f")
    For $i = 1 To $_iMaxObject
        __ToBuffer($aXREF[$i])
    Next
    __ToBuffer("trailer" & @CRLF & _
            "<< /Size " & $_iMaxObject + 1 & "/Info 1 0 R" & "/Root 2 0 R" & ">>")
    __ToBuffer("startxref" & @CRLF & StringLen("startxref" & @CRLF & $_Buffer & "%%EOF" & @CRLF) + 6)
    $_FileName = FileOpen($PDF_NAME,18)
    FileWrite($_FileName, $_Buffer & "%%EOF" & @CRLF)
    FileClose($_FileName)

    $_PaperSize = "A4"
    $_Orientation = $PDF_ORIENTATION_PORTRAIT
    $__SetMargin = 0
    $_Pages = 0
    $_Offset = 0
    $_Font = ""
    $_sPage = ""
    $_Image = ""
    $_iObject = 0
    $_Buffer = ""

    $_sFONT = ""
    $_sObject = ""
    $_iResource = ""

    If $_bOpen Then ShellExecute($PDF_NAME)
;~  $_bOpen = False
EndFunc   ;==>_ClosePDFFile

; #FUNCTION# ====================================================================================================================
; Name ..........: _Draw_Path
; Description ...: Draws a N segmented line, each line segment is expressed as N repeating sub segments.
;                   Each sub segment has its own "PEN DOWN" length, color and cap type followed by a "PEN UP" length
; Syntax ........: _Draw_Path( ByRef Const $iXY, ByRef Const $iDU )
; Parameters ....: $iXY is a 2 dimensional array where:
;                       $iXY[0][0] contains the number of points in the path
;                       $iXY[0][1] contains the coordinate type 0 = absolute to 0,0 of page, 1=relative to previous coordinate
;                       $iXY[N][0] X or distance from left of page or previous point
;                       $iXY[N][1] Y or distance from bottom of page or previous point
;                : $iDU is a 1 or 2 dimensional array where:
;                       for a solid line $iDU[0]= Line width
;                                        $iDU[1]= Line cap type
;                                        $iDU[2]= Line color
;                       for a "DASHED" line $iDU[0][0]= number of sub segments before repeating
;                                           $iDU[N][0]= Number of "PEN DOWN" units for the Nth sub segment
;                                           $iDU[N][1]= Line width for the Nth sub segment
;                                           $iDU[N][2]= Line cap type for the Nth sub segment
;                                           $iDU[N][3]= Line color for the Nth sub segment
;                                           $iDU[N][4]= Number of "PEN UP" units for the Nth sub segment
; Return values .: None
; Author(s) .....: StuffByDennis
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func _Draw_Path(ByRef Const $iXY, ByRef Const $iDU)
    Local $i, $j, $X, $Y, $X0, $X1, $Y0, $Y1, $ODX, $ODY, $DX, $DY, $Theta, $SIN, $COS
    _SetDash(0)
    $X0 = 0
    $Y0 = 0
    If UBound($iDU, 0) = 1 Then
        _SetLineCap($iDU[1])
        _SetLineWidth($iDU[0])
        _SetColourStroke($iDU[2])
        For $i = 1 To $iXY[0][0] - 1
            If $iXY[0][1] = 0 Then
                $X0 = $iXY[$i][0]
                $Y0 = $iXY[$i][1]
                $X1 = $iXY[$i + 1][0]
                $Y1 = $iXY[$i + 1][1]
            Else
                $X0 += $iXY[$i][0]
                $Y0 += $iXY[$i][1]
                $X1 = $X0 + $iXY[$i + 1][0]
                $Y1 = $Y0 + $iXY[$i + 1][1]
            EndIf
            _MoveTo($X0, $Y0)
            _LineTo($X1, $Y1, $PDF_STYLE_STROKED)
        Next
    Else
        For $i = 1 To $iXY[0][0] - 1
            If $iXY[0][1] = 0 Then
                $X0 = $iXY[$i][0]
                $Y0 = $iXY[$i][1]
                $X1 = $iXY[$i + 1][0]
                $Y1 = $iXY[$i + 1][1]
            Else
                $X0 += $iXY[$i][0]
                $Y0 += $iXY[$i][1]
                $X1 = $X0 + $iXY[$i + 1][0]
                $Y1 = $Y0 + $iXY[$i + 1][1]
            EndIf

            $ODX = $X1 - $X0
            $ODY = $Y1 - $Y0
            $X = $X0
            $Y = $Y0
            If $ODX <> 0 And $ODY <> 0 Then
                $Theta = ATan($ODY / $ODX)
                $SIN = -Sin($Theta)
                $COS = -Cos($Theta)
            EndIf
            $j = 1
            Select
                Case $ODY = 0 ; Horizontal
                    Select
                        Case $ODX < 0;Due-West
                            While $X > $X1
                                _SetLineCap($iDU[$j][2])
                                _SetLineWidth($iDU[$j][1])
                                _SetColourStroke($iDU[$j][3])
                                _MoveTo($X, $Y0)
                                $X -= $iDU[$j][0]
                                If $X < $X1 Then $X = $X1
                                _LineTo($X, $Y1, $PDF_STYLE_STROKED)
                                $X -= $iDU[$j][4]
                                $j += 1
                                If $j > $iDU[0][0] Then $j = 1
                            WEnd
                        Case Else ;Due-East
                            While $X < $X1
                                _SetLineCap($iDU[$j][2])
                                _SetLineWidth($iDU[$j][1])
                                _SetColourStroke($iDU[$j][3])
                                _MoveTo($X, $Y0)
                                $X += $iDU[$j][0]
                                If $X > $X1 Then $X = $X1
                                _LineTo($X, $Y1, $PDF_STYLE_STROKED)
                                $X += $iDU[$j][4]
                                $j += 1
                                If $j > $iDU[0][0] Then $j = 1
                            WEnd
                    EndSelect
                Case $ODY > 0 ; North
                    Select
                        Case $ODX = 0 ;Due North
                            While $Y < $Y1
                                _SetLineCap($iDU[$j][2])
                                _SetLineWidth($iDU[$j][1])
                                _SetColourStroke($iDU[$j][3])
                                _MoveTo($X, $Y)
                                $Y += $iDU[$j][0]
                                If $Y > $Y1 Then $Y = $Y1
                                _LineTo($X, $Y, $PDF_STYLE_STROKED)
                                $Y += $iDU[$j][4]
                                $j += 1
                                If $j > $iDU[0][0] Then $j = 1
                            WEnd
                        Case $ODX < 0;North-West
                            While $Y < $Y1 And $X > $X1
                                _SetLineCap($iDU[$j][2])
                                _SetLineWidth($iDU[$j][1])
                                _SetColourStroke($iDU[$j][3])
                                _MoveTo($X, $Y)
                                $DX = -$iDU[$j][0] * $COS
                                If $X - $DX < $X1 Then $X = $X1 + $DX
                                $DY = $iDU[$j][0] * $SIN
                                If $Y + $DY > $Y1 Then $Y = $Y1 - $DY
                                _LineTo($X - $DX, $Y + $DY, $PDF_STYLE_STROKED)
                                $X = $X - $DX + $iDU[$j][4] * $COS
                                $Y = $Y + $DY + $iDU[$j][4] * $SIN
                                $j += 1
                                If $j > $iDU[0][0] Then $j = 1
                            WEnd
                        Case Else;North-East
                            While $Y < $Y1 And $X < $X1
                                _SetLineCap($iDU[$j][2])
                                _SetLineWidth($iDU[$j][1])
                                _SetColourStroke($iDU[$j][3])
                                _MoveTo($X, $Y)
                                $DX = -$iDU[$j][0] * $COS
                                If $X + $DX > $X1 Then $X = $X1 - $DX
                                $DY = -$iDU[$j][0] * $SIN
                                If $Y + $DY > $Y1 Then $Y = $Y1 - $DY
                                _LineTo($X + $DX, $Y + $DY, $PDF_STYLE_STROKED)
                                $X += $DX - $iDU[$j][4] * $COS
                                $Y += $DY - $iDU[$j][4] * $SIN
                                $j += 1
                                If $j > $iDU[0][0] Then $j = 1
                            WEnd
                    EndSelect
                Case Else ; South
                    Select
                        Case $ODX = 0;Due South
                            While $Y > $Y1
                                _SetLineCap($iDU[$j][2])
                                _SetLineWidth($iDU[$j][1])
                                _SetColourStroke($iDU[$j][3])
                                _MoveTo($X, $Y)
                                $Y -= $iDU[$j][0]
                                If $Y < $Y1 Then $Y = $Y1
                                _LineTo($X, $Y, $PDF_STYLE_STROKED)
                                $Y -= $iDU[$j][4]
                                $j += 1
                                If $j > $iDU[0][0] Then $j = 1
                            WEnd
                        Case $ODX > 0;South-East
                            While $Y > $Y1 And $X < $X1
                                _SetLineCap($iDU[$j][2])
                                _SetLineWidth($iDU[$j][1])
                                _SetColourStroke($iDU[$j][3])
                                _MoveTo($X, $Y)
                                $DX = -$iDU[$j][0] * $COS
                                If $X + $DX > $X1 Then $X = $X1 - $DX
                                $DY = $iDU[$j][0] * $SIN
                                If $Y - $DY < $Y1 Then $Y = $Y1 + $DY
                                _LineTo($X + $DX, $Y - $DY, $PDF_STYLE_STROKED)
                                $X = $X + $DX - $iDU[$j][4] * $COS
                                $Y = $Y - $DY - $iDU[$j][4] * $SIN
                                $j += 1
                                If $j > $iDU[0][0] Then $j = 1
                            WEnd
                        Case Else ; South-West
                            While $Y > $Y1 And $X > $X1
                                _SetLineCap($iDU[$j][2])
                                _SetLineWidth($iDU[$j][1])
                                _SetColourStroke($iDU[$j][3])
                                _MoveTo($X, $Y)
                                $DX = -$iDU[$j][0] * $COS
                                If $X - $DX < $X1 Then $X = $X1 + $DX
                                $DY = -$iDU[$j][0] * $SIN
                                If $Y - $DY < $Y1 Then $Y = $Y1 + $DY
                                _LineTo($X - $DX, $Y - $DY, $PDF_STYLE_STROKED)
                                $X = $X - $DX + $iDU[$j][4] * $COS
                                $Y = $Y - $DY + $iDU[$j][4] * $SIN
                                $j += 1
                                If $j > $iDU[0][0] Then $j = 1
                            WEnd
                    EndSelect
            EndSelect
        Next
    EndIf
    _SetLineCap(0)
    _SetLineWidth(0)
    _SetColourStroke(0)
EndFunc   ;==>_Draw_Path
; #FUNCTION# ====================================================================================================================
; Name ..........: _Draw_Polygon
; Description ...: Draws a N sided filled polygon
;                  The perimiter is drawn by the _Draw_Path function.
; Syntax ........: _Draw_Polygon( ByRef Const $iXY, $iFC, ByRef Const $iDU )
; Parameters ....: $iXY (See _Draw_Path for description)
;                : $iFC polygon fill color
;                : $iDU (See _Draw_Path for description)
; Return values .: None
; Author(s) .....: StuffByDennis
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func _Draw_Polygon(ByRef Const $iXY, $fillColor, $iDU)
    Local $i, $X0, $Y0
    _SetLineWidth(0)
    _SetColourFill($fillColor)
    __ToBuffer("n")
    $X0 = $iXY[1][0]
    $Y0 = $iXY[1][1]
    _MoveTo($X0, $Y0)
    For $i = 2 To $iXY[0][0]
        If $iXY[0][1] = 0 Then
            $X0 = $iXY[$i][0]
            $Y0 = $iXY[$i][1]
        Else
            $X0 += $iXY[$i][0]
            $Y0 += $iXY[$i][1]
        EndIf
        _LineTo($X0, $Y0, $PDF_STYLE_NONE)
    Next
    _Path($PDF_STYLE_STROKED)
    _SetLineWidth(0)
    If $iDU[1][0] = 0 Then Return
    _Draw_Path($iXY, $iDU)
EndFunc   ;==>_Draw_Polygon

; #FUNCTION# ====================================================================================================================
; Name ..........: _Draw_Rectangle
; Description ...: Draw _Rectangle
; Syntax ........: _Draw_Rectangle( $iX , $iY , $iW , $iH [, $sStyle [, $iRadius [, $lFillColour [,
;                  $iBorderWidth ]]]] )
; Parameters ....: $iX                  -  integer value.
;                  $iY                  -  integer value.
;                  $iW                  -  integer value.
;                  $iH                  -  integer value.
;                  $sStyle              - [optional]  string value.
;                  $iRadius                - [optional]  integer value.
;                  $iFillColour         - [optional]  RGB value.
;                  $iBorderWidth        - [optional]  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _Draw_Rectangle($iX, $iY, $iW, $iH, $sStyle = $PDF_STYLE_STROKED, $iRadius = 0, $iFillColour = 0, $iBorderWidth = 0.05)
    _SetLineWidth($iBorderWidth)
    _SetColourFill($iFillColour)
    _Rectangle($iX, $iY, $iW, $iH, $sStyle, $iRadius)
    _SetColourFill(0)
    _SetLineWidth(0)
EndFunc   ;==>_Draw_Rectangle

; #FUNCTION# ====================================================================================================================
; Name ..........: _DrawCircle
; Description ...: Draw circle
; Syntax ........: _DrawCircle( $x , $y , $iRadius [, $sStyle = $PDF_STYLE_STROKED ] )
; Parameters ....: $x                   -  unknown value.
;                  $y                   -  unknown value.
;                  $iRadius                 -  unknown value.
;                  $sStyle              - [optional]  string value.
;                  $PDF_STYLE_STROKED   -  unknown value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _DrawCircle($x, $y, $iRadius, $sStyle = $PDF_STYLE_STROKED)
    _MoveTo($x, $y - $iRadius)
    __Curve($x + 0.55 * $iRadius, $y - $iRadius, $x + $iRadius, $y - 0.55 * $iRadius, $x + $iRadius, $y, $PDF_STYLE_NONE)
    __Curve($x + $iRadius, $y + 0.55 * $iRadius, $x + 0.55 * $iRadius, $y + $iRadius, $x, $y + $iRadius, $PDF_STYLE_NONE)
    __Curve($x - 0.55 * $iRadius, $y + $iRadius, $x - $iRadius, $y + 0.55 * $iRadius, $x - $iRadius, $y, $PDF_STYLE_NONE)
    __Curve($x - $iRadius, $y - 0.55 * $iRadius, $x - 0.55 * $iRadius, $y - $iRadius, $x, $y - $iRadius, $PDF_STYLE_NONE)
    _Path($sStyle)
EndFunc   ;==>_DrawCircle

; #FUNCTION# ====================================================================================================================
; Name ..........: _DrawCurve
; Description ...: Draw a curved line
; Syntax ........: _DrawCurve( $iX , $iY , $iX1 , $iY1 , $iX2 , $iY2 , $iX3 , $iY3 [, $lStyle , $PDF_STYLE_STROKED [, $iDash1 [,
;                  $iDash2 ]]] )
; Parameters ....: $iX1                 -  X value of the first point.
;                  $iY1                 -  Y value of the first point.
;                  $iX2                 -  X value of the second point.
;                  $iY2                 -  Y value of the second point.
;                  $iX3                 -  X value of the third point.
;                  $iY3                 -  Y value of the third point.
;                  $iX4                 -  X value of the fourth point.
;                  $iY4                 -  Y value of the fourth point.
;                  $lStyle              - [optional]  style of the line (default = STROKED)
;                  $iDash1              - [optional]  integer value.
;                  $iDash2              - [optional]  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _DrawCurve($iX1, $iY1, $iX2, $iY2, $iX3, $iY3, $iX4, $iY4, $lStyle = $PDF_STYLE_STROKED, $iDash1 = 0, $iDash2 = 0)
    If $iDash1 = 0 And $iDash2 = 0 Then
        _SetDash(0)
    Else
        _SetDash($iDash1, $iDash2)
    EndIf
    _MoveTo($iX1, $iY1)
    __Curve($iX2, $iY2, $iX3, $iY3, $iX4, $iY4, $lStyle)
    _SetDash(0)
EndFunc   ;==>_DrawCurve

; #FUNCTION# ====================================================================================================================
; Name ..........: _DrawLine
; Description ...: Draw a line
; Syntax ........: _DrawLine( $iXStart , $iYStart , $iXEnd , $iYEnd [, $sStyle , $PDF_STYLE_STROKED [, $iLineCap [,
;                  $iLineWidth [, $lColourStroke [, $iDash1 [, $iDash2 ]]]]]] )
; Parameters ....: $iXStart             -  integer value.
;                  $iYStart             -  integer value.
;                  $iXEnd               -  integer value.
;                  $iYEnd               -  integer value.
;                  $sStyle              - [optional]  string value (default = STROKED).
;                  $iLineCap            - [optional]  integer value.
;                  $iLineWidth          - [optional]  integer value.
;                  $lColourStroke       - [optional]  unknown value.
;                  $iDash1              - [optional]  integer value.
;                  $iDash2              - [optional]  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _DrawLine($iXStart, $iYStart, $iXEnd, $iYEnd, $sStyle = $PDF_STYLE_STROKED, $iLineCap = 1, $iLineWidth = 0.05, $lColourStroke = 0x000000, $iDash1 = 0, $iDash2 = 0)
    If $iDash1 = 0 And $iDash2 = 0 Then
        _SetDash(0)
    Else
        _SetDash($iDash1, $iDash2)
    EndIf
    _SetLineCap($iLineCap)
    _SetLineWidth($iLineWidth)
    _SetColourStroke($lColourStroke)
    _MoveTo($iXStart, $iYStart)
    _LineTo($iXEnd, $iYEnd, $sStyle)
    _SetLineCap(0)
    _SetLineWidth(0)
    _SetColourStroke(0)
    _SetDash(0)
EndFunc   ;==>_DrawLine

; #FUNCTION# ====================================================================================================================
; Name ..........: _DrawText
; Description ...: Write text
; Syntax ........: _DrawText( $iX , $iY , $sText , $sFontAlias , $iFontSize [, $iAlign , $PDF_ALIGN_LEFT [, $iRotate ]] )
; Parameters ....: $iX                  -  integer value.
;                  $iY                  -  integer value.
;                  $sText               -  string value.
;                  $sFontAlias          -  string value.
;                  $iFontSize           -  integer value.
;                  $iAlign              - [optional]  integer value.
;                  $PDF_ALIGN_LEFT      -  unknown value.
;                  $iRotate             - [optional]  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _DrawText($iX, $iY, $sText, $sFontAlias, $iFontSize, $iAlign = $PDF_ALIGN_LEFT, $iRotate = 0)
    Local $PI
    Local $sTeta
    Local $cTeta
    Local $C
    Local $l
    Switch $iAlign
        Case $PDF_ALIGN_LEFT
        Case $PDF_ALIGN_RIGHT
            $l = _GetTextLength($sText, $sFontAlias, $iFontSize)
            $iX -= $l
        Case $PDF_ALIGN_CENTER
            $l = _GetTextLength($sText, $sFontAlias, $iFontSize)
            $iX -= $l / 2
    EndSwitch
    __ToBuffer("BT")
    __ToBuffer("/" & $sFontAlias & " " & __ToStr($iFontSize) & " Tf")
    If $iRotate <> 0 Then
        $PI = 3.141592
        $C = $PI / 180
        $sTeta = Sin($C * $iRotate)
        $cTeta = Cos($C * $iRotate)
        __ToBuffer(__ToStr($cTeta) & " " & __ToStr($sTeta) & " " & __ToStr(-$sTeta) & " " & __ToStr($cTeta) & " " & __ToStr(__ToSpace($iX)) & " " & __ToStr(__ToSpace($iY)) & " Tm")
    Else
        __ToBuffer(__ToStr(__ToSpace($iX)) & " " & __ToStr(__ToSpace($iY)) & " Td")
    EndIf
    __ToBuffer("(" & __ToPdfStr($sText) & ") Tj")
    __ToBuffer("ET")
EndFunc   ;==>_DrawText

; #FUNCTION# ====================================================================================================================
; Name ..........: _EndObject
; Description ...: End editing the current object
; Syntax ........: _EndObject(  )
; Parameters ....:
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......: _StartObject()
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _EndObject()
    $_iTmpOffset = $_Offset - $_iTmpOffset
    __ToBuffer("endstream")
    __EndObj()
    __InitObj()
    __ToBuffer($_iTmpOffset)
    __EndObj()
EndFunc   ;==>_EndObject

; #FUNCTION# ====================================================================================================================
; Name ..........: _EndPage
; Description ...: End the currend page
; Syntax ........: _EndPage(  )
; Parameters ....:
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......: _BeginPage()
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _EndPage()
    $_iTmpOffset = $_Offset - $_iTmpOffset
    __ToBuffer("endstream")
    __EndObj()
    ; Scrie dimensiunea
    __InitObj()
    __ToBuffer($_iTmpOffset)
    __EndObj()
EndFunc   ;==>_EndPage

; #FUNCTION# ====================================================================================================================
; Name ..........: _GetMargin
; Description ...: Get the working area's margin
; Syntax ........: _GetMargin(  )
; Parameters ....:
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _GetMargin()
    Return $__SetMargin
EndFunc   ;==>_GetMargin

; #FUNCTION# ====================================================================================================================
; Name ..........: _GetPageHeight
; Description ...: Get the height of the page
; Syntax ........: _GetPageHeight(  )
; Parameters ....:
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _GetPageHeight()
    Return $_PageHeight
EndFunc   ;==>_GetPageHeight

; #FUNCTION# ====================================================================================================================
; Name ..........: _GetPageWidth
; Description ...: Get the width of the page
; Syntax ........: _GetPageWidth(  )
; Parameters ....:
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _GetPageWidth()
    Return $_PageWidth
EndFunc   ;==>_GetPageWidth

; #FUNCTION# ====================================================================================================================
; Name ..........: _GetTextLength
; Description ...: Get the length of a string
; Syntax ........: _GetTextLength( $sText , $sFontAlias , $iFontSize  )
; Parameters ....: $sText               -  string value.
;                  $sFontAlias          -  string value.
;                  $iFontSize           -  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _GetTextLength($sText, $sFontAlias, $iFontSize)
    Local $k = StringInStr($_sFONTNAME, "<" & $sFontAlias & ">")
    Local $C
    Local $l = StringLen($sText)
    Local $j = 0
    If $k > 0 Then
        $k += StringLen($sFontAlias) + 2
        For $i = 1 To $l
            $C = Asc(StringMid($sText, $i, 1))
            $k += _Iif(($C >= $FirstChar) And ($C <= $LastChar), $Widths[$C], $MissingWidth)
            If $C = 32 Then $j += 1
        Next
    EndIf
    Return __ToUser((($k * $iFontSize / 1000) + ($j * $_WordSpacing) + ($l * $_CharSpacing)) * ($_TextScaling / 100))
EndFunc   ;==>_GetTextLength

; #FUNCTION# ====================================================================================================================
; Name ..........: _GetUnit
; Description ...: Get the unit used
; Syntax ........: _GetUnit(  )
; Parameters ....:
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _GetUnit()
    Local $lRet
    Switch $__SetUnit
        Case $PDF_UNIT_PT
            $lRet = 1
        Case $PDF_UNIT_INCH
            $lRet = 72
        Case $PDF_UNIT_CM
            $lRet = 72 / 2.54
        Case $PDF_UNIT_MM
            $lRet = 72 / 25.4
    EndSwitch
    Return $lRet
EndFunc   ;==>_GetUnit

; #FUNCTION# ====================================================================================================================
; Name ..........: _InitPDF
; Description ...: Initialize the pdf
; Syntax ........: _InitPDF( [$sFileName] )
; Parameters ....: $sFileName           - [optional]  string value.
;                  $PDF_NAME            -  unknown value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _InitPDF($sFileName = "")
    __ToBuffer($PDF_VERSION)
    $_iMaxObject = 0
    __InitObj(1)
    __ToBuffer("<</Title(" & __ToPdfStr($PDF_TITLE) & ")/Author(" & __ToPdfStr($PDF_AUTHOR) & ")/Creator(" & __ToPdfStr($PDF_CREATOR) & ")/Producer(" & __ToPdfStr($PDF_COPYRIGHT) & ") /Keywords(" & __ToPdfStr($PDF_KEYWORDS) & ")/Subject(" & __ToPdfStr($PDF_SUBJECT) & ")/CreationDate(D:" & @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & "+02'00')/ModDate()>>")
    __EndObj()
    __InitObj(2)
    __ToBuffer("<</Type/Catalog/Pages 3 0 R")
    Switch $_LayoutMode
        Case $PDF_LAYOUT_SINGLE
            __ToBuffer("/PageLayout /SinglePage")
        Case $PDF_LAYOUT_CONTINOUS
            __ToBuffer("/PageLayout /OneColumn")
        Case $PDF_LAYOUT_TWO
            __ToBuffer("/PageLayout /TwoColumnLeft")
    EndSwitch
    Switch $_ZoomMode
        Case $PDF_ZOOM_FULLPAGE
            __ToBuffer("/OpenAction [1 0 R /Fit]")
        Case $PDF_ZOOM_FULLWIDTH
            __ToBuffer("/OpenAction [1 0 R null /FitH]")
        Case $PDF_ZOOM_REAL
            __ToBuffer("/OpenAction [1 0 R /XYZ null " & $_PageHeight & " 1]")
        Case Int($_ZoomMode)
            __ToBuffer("/OpenAction [1 0 R /XYZ null " & $_PageHeight & " " & StringReplace(StringFormat($_ZoomMode, "###0." & 2), ",", ".") / 100 & "]")
    EndSwitch
    __ToBuffer("/PageMode/UseNone/Lang (en) >>")
    __EndObj()
    $_iMaxObject = 4;4;VERIFICA AICIIIIIIIIIIIIIIIIIIIII
    $PDF_NAME = $sFileName
EndFunc   ;==>_InitPDF

; #FUNCTION# ====================================================================================================================
; Name ..........: _Insert3DCube
; Description ...: Insert a 3D shape
; Syntax ........: _Insert3DCube( $iX , $iY , $iW , $iH [, $iEndColour [, $fDepth [, $iRadius [, $iBorderWidth ]]]] )
; Parameters ....: $iX                  -  integer value.
;                  $iY                  -  integer value.
;                  $iW                  -  integer value.
;                  $iH                  -  integer value.
;                  $iEndColour          - [optional]  integer value.
;                  $fDepth              - [optional]  boolean value.
;                  $iRadius                - [optional]  integer value.
;                  $iBorderWidth        - [optional]  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _Insert3DCube($iX, $iY, $iW, $iH, $iEndColour = 0x0000ff, $fDepth = 0.5, $iRadius = 0.1, $iBorderWidth = 0.02)
    Local $Ri, $Rf, $Rs, $Gi, $Gf, $Gs, $Bi, $Bf, $Bs, $m = $fDepth
    Local $lFillColour = 0x000000
    $Bi = Mod($lFillColour, 256)
    $Gi = BitAND($lFillColour / 256, 255)
    $Ri = BitAND($lFillColour / 65536, 255)
    $Bf = Mod($iEndColour, 256)
    $Gf = BitAND($iEndColour / 256, 255)
    $Rf = BitAND($iEndColour / 65536, 255)
    $Bs = Abs($Ri - $Rf) / $m
    $Gs = Abs($Gi - $Gf) / $m
    $Rs = Abs($Bi - $Bf) / $m
    If $Rf < $Ri Then $Rs = -$Rs
    If $Gf < $Gi Then $Gs = -$Gs
    If $Bf < $Bi Then $Bs = -$Bs
    For $i = 0 To $fDepth Step 0.02
        $Rf = $Ri + $Rs * $i
        $Gf = $Gi + $Gs * $i
        $Bf = $Bi + $Bs * $i
        Local $lFillColour2 = Dec(Hex($Bf, 2) & Hex($Gf, 2) & Hex($Rf, 2))
        _SetColourStroke($lFillColour2)
        _SetColourFill($lFillColour2)
        _SetLineWidth($iBorderWidth)
        _Rectangle($iX + $fDepth - $i, $iY + $fDepth - $i, $iW, $iH, $PDF_STYLE_FILLED, $iRadius)
        _SetColourFill(0)
        _SetColourStroke(0)
        _SetLineWidth(0)
    Next
EndFunc   ;==>_Insert3DCube

; #FUNCTION# ====================================================================================================================
; Name ..........: _Insert3DPie
; Description ...: Draw a pie
; Syntax ........: _Insert3DPie( $iX , $iY [, $iRadius [, $iStartAngle [, $iEndAngle [, $iEndColour [, $fDepth [, $iRatio [,
;                  $bPie [, $iRotate [, $iQuality [, $sStyle , $PDF_STYLE_FILLED [, $iBorderWidth ]]]]]]]]]]] )
; Parameters ....: $iX                  -  integer value.
;                  $iY                  -  integer value.
;                  $iRadius                - [optional]  integer value.
;                  $iStartAngle         - [optional]  integer value.
;                  $iEndAngle           - [optional]  integer value.
;                  $iEndColour          - [optional]  integer value.
;                  $fDepth              - [optional]  boolean value.
;                  $iRatio              - [optional]  integer value.
;                  $bPie                - [optional]  binary value.
;                  $iRotate             - [optional]  integer value.
;                  $iQuality            - [optional]  integer value.
;                  $sStyle              - [optional]  string value.
;                  $iBorderWidth        - [optional]  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _Insert3DPie($iX, $iY, $iRadius = 2.5, $iStartAngle = 0, $iEndAngle = 360, $iEndColour = 0x888888, $fDepth = 0.2, $iRatio = 1, $bPie = True, $iRotate = 0, $iQuality = 1, $sStyle = $PDF_STYLE_FILLED, $iBorderWidth = 0.02)
    Local $Ri, $Rf, $Rs, $Gi, $Gf, $Gs, $Bi, $Bf, $Bs, $m = $fDepth
    Local $lFillColour = 0x000000
    $Bi = Mod($lFillColour, 256)
    $Gi = BitAND($lFillColour / 256, 255)
    $Ri = BitAND($lFillColour / 65536, 255)
    $Bf = Mod($iEndColour, 256)
    $Gf = BitAND($iEndColour / 256, 255)
    $Rf = BitAND($iEndColour / 65536, 255)
    $Bs = Abs($Ri - $Rf) / $m
    $Gs = Abs($Gi - $Gf) / $m
    $Rs = Abs($Bi - $Bf) / $m
    If $Rf < $Ri Then $Rs = -$Rs
    If $Gf < $Gi Then $Gs = -$Gs
    If $Bf < $Bi Then $Bs = -$Bs
    _SetLineWidth($iBorderWidth)
    Local $lFillColour2
    For $i = 0 To $fDepth Step 0.02
        $Rf = $Ri + $Rs * $i
        $Gf = $Gi + $Gs * $i
        $Bf = $Bi + $Bs * $i
        $lFillColour2 = Dec(Hex($Bf, 2) & Hex($Gf, 2) & Hex($Rf, 2))
        _SetColourStroke($lFillColour2)
        _SetColourFill($lFillColour2)
        _SetLineWidth($iBorderWidth)
        _DrawArc($iX - $i, $iY - $i, $iRadius, $iStartAngle, $iEndAngle, $iRatio, $bPie, $iRotate, $iQuality, $sStyle)
    Next
    _SetColourStroke(0)
    _SetColourFill(0)
    _SetLineWidth(0)
EndFunc   ;==>_Insert3DPie

; #FUNCTION# ====================================================================================================================
; Name ..........: _InsertImage
; Description ...: Insert a image in the pdf
; Syntax ........: _InsertImage( $sAlias , $iX , $iY [, $iW [, $iH ]] )
; Parameters ....: $sAlias              -  string value.
;                  $iX                  -  integer value.
;                  $iY                  -  integer value.
;                  $iW                  - [optional]  integer value.
;                  $iH                  - [optional]  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _InsertImage($sAlias, $iX, $iY, $iW = 0, $iH = 0)
    If $iW = 0 And $iH = 0 Then
        $iW = $_iImageW/_GetUnit()
        $iH = $_iImageH/_GetUnit()
    EndIf
    __ToBuffer("q" & @CRLF & __ToStr(__ToSpace($iW)) & " " & " 0 0 " & __ToStr(__ToSpace($iH)) & " " & __ToStr(__ToSpace($iX)) & " " & __ToStr(__ToSpace($iY)) & " cm" & _
    @CRLF & "/" & $sAlias & " Do" & @CRLF & "Q")
EndFunc   ;==>_InsertImage

; #FUNCTION# ====================================================================================================================
; Name ..........: _InsertRenderedText
; Description ...: Insert rendered text
; Syntax ........: _InsertRenderedText( $iX , $iY , $sText , $sAlias [, $_FontSize [, $iScale [, $sAlign = $PDF_ALIGN_LEFT [,
;                  $iFillColour [, $iOutlineColour ]]]]] )
; Parameters ....: $iX                  -  integer value.
;                  $iY                  -  integer value.
;                  $sText               -  string value.
;                  $sAlias              -  string value.
;                  $_FontSize           - [optional]  unknown value.
;                  $iScale              - [optional]  integer value.
;                  $sAlign              - [optional]  string value.
;                  $iFillColour         - [optional]  RGB value.
;                  $iOutlineColour      - [optional]  RGB value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _InsertRenderedText($iX, $iY, $sText, $sAlias, $_FontSize = 64, $iScale = 100, $sAlign = $PDF_ALIGN_LEFT, $iFillColour = 0x996600, $iOutlineColour = 0x111111)
    _SetColourFill($iFillColour)
    _SetColourStroke($iOutlineColour)
    _SetTextRenderingMode(2)
    _SetTextHorizontalScaling($iScale)
    _DrawText($iX, $iY, $sText, $sAlias, $_FontSize, $sAlign)
    _SetTextRenderingMode(0)
    _SetTextHorizontalScaling(100)
    _SetColourFill(0)
    _SetColourStroke(0)
EndFunc   ;==>_InsertRenderedText

; #FUNCTION# ====================================================================================================================
; Name ..........: _LineTo
; Description ...: Append straight line segment to path
; Syntax ........: _LineTo( $iX , $iY [, $sStyle = $PDF_STYLE_STROKED ] )
; Parameters ....: $iX                   -  integer value.
;                  $iY                   -  integer value.
;                  $sStyle              - [optional]  string value.
;                  |$PDF_STYLE_STROKED
;                  $PDF_STYLE_FILLED
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _LineTo($iX, $iY, $sStyle = $PDF_STYLE_STROKED)
    __ToBuffer(__ToStr(__ToSpace($iX)) & " " & __ToStr(__ToSpace($iY)) & " l")
    _Path($sStyle)
EndFunc   ;==>_LineTo

; #FUNCTION# ====================================================================================================================
; Name ..........: _LoadFontStandard
; Description ...: Load standard font (Type 1)
;                   Courier                 Helvetica                   Times-Roman         Symbol
;                   Courier-Bold            Helvetica-Bold              Times-Bold          ZapfDingbats
;                   Courier-Oblique         Helvetica-Oblique           Times-Italic
;                   Courier-BoldOblique     Helvetica-BoldOblique       Times-BoldItalic
; Syntax ........: _LoadFontStandard( $sAlias , $BaseFont [, $sOptions ] )
; Parameters ....: $sAlias            -  an alias for the font, to use in the script.
;                  $BaseFont            -  one of the following
;                   |$PDF_FONT_STD_HELVETICA
;                   |$PDF_FONT_STD_COURIER
;                   |$PDF_FONT_STD_SYMBOL
;                   |$PDF_FONT_STD_ZAPFDINGBATS
;                   |$PDF_FONT_STD_ARIAL
;                   |$PDF_FONT_STD_TIMES
;                  $sOptions            - [optional]  style value.
;                   |$PDF_FONT_NORMAL = 0
;                   |$PDF_FONT_BOLD = 1
;                   |$PDF_FONT_ITALIC = 2
;                   |$PDF_FONT_BOLDITALIC = 4
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _LoadFontStandard($sAlias, $BaseFont, $sOptions = $PDF_FONT_NORMAL)
    Local $sTemp
    $BaseFont = StringReplace($BaseFont, " ", "")
    Switch $sOptions
        Case $PDF_FONT_BOLD
            $sTemp = ",Bold"
        Case $PDF_FONT_BOLDITALIC
            $sTemp = ",BoldItalic"
        Case $PDF_FONT_ITALIC
            $sTemp = ",Italic"
    EndSwitch
    Local $i = __InitObj()
    __ToBuffer("<< /Type/Font/Subtype/Type1/Name/" & $sAlias & "/BaseFont/" & $BaseFont & $sTemp & "/Encoding/WinAnsiEncoding >>")
    __EndObj()
    $_sFONT = $_sFONT & "/" & $sAlias & " " & $i & " 0 R " & @CRLF
EndFunc   ;==>_LoadFontStandard

; #FUNCTION# ====================================================================================================================
; Name ..........: _LoadFontTT
; Description ...: Load one of the True Type Fonts included
; Syntax ........: _LoadFontTT( $sAlias , $BaseFont [, $sOptions] )
; Parameters ....: $sAlias            -  string value.
;                  $BaseFont            -  one of the following:
;                   |$PDF_FONT_COURIER
;                   |$PDF_FONT_ARIAL
;                   |$PDF_FONT_TIMES
;                   |$PDF_FONT_SYMBOL
;                  $sOptions            - [optional]  font style (normal, bold, bold-italic).
;                   |$PDF_FONT_NORMAL = 0
;                   |$PDF_FONT_BOLD = 1
;                   |$PDF_FONT_ITALIC = 2
;                   |$PDF_FONT_BOLDITALIC = 4
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _LoadFontTT($sAlias, $BaseFont, $sOptions = $PDF_FONT_NORMAL)
    Local $sTemp = ""
    $_Font = $_Font + 1
    $BaseFont = StringReplace($BaseFont, " ", "")
    Switch $BaseFont
        Case "TimesNewRoman"
            __FontTimes($sOptions)
        Case "CourierNew"
            __FontCourier($sOptions)
        Case "Symbol"
            __FontSymbol($sOptions)
        Case "Calibri"
            __FontCalibri($sOptions)
        Case "Garamond"
            __FontGaramond($sOptions)
        Case Else
            __FontArial($sOptions)
    EndSwitch
    Local $i = __InitObj()
    __ToBuffer("<< /Type/Font/Subtype/TrueType/Name/" & $sAlias & "/BaseFont/" & $BaseFont & $sOptions & "/FirstChar " & $FirstChar & "/LastChar " & $LastChar & "/FontDescriptor " & $i + 1 & " 0 R/Encoding/WinAnsiEncoding/Widths [")
;~  For $j = $FirstChar To $LastChar
;~      If $Widths[$j - $FirstChar] <> 0 Then
;~          $sTemp &= __ToStr($Widths[$j - $FirstChar]) & " "
;~          If Mod($j - $FirstChar + 1, 16) = 0 Or $j = $LastChar Then
;~              __ToBuffer($sTemp)
;~              $sTemp = ""
;~          EndIf
;~      EndIf
;~  Next
    For $j = $FirstChar To $LastChar
        If $Widths[$j] <> 0 Then
            $sTemp &= __ToStr($Widths[$j]) & " "
            If Mod($j + 1, 16) = 0 Or $j = $LastChar Then
                __ToBuffer($sTemp)
                $sTemp = ""
            EndIf
        EndIf
    Next
    __ToBuffer("] >>")
    __EndObj()
    $_sFONT = $_sFONT & "/" & $sAlias & " " & $i & " 0 R " & @CRLF
    $_sFONTNAME = $_sFONTNAME & "<" & $sAlias & ">" & StringRight("0000" & $_Font, 4) & ";"
    ;$i =
    __InitObj()
    __ToBuffer("<< /Type/FontDescriptor/FontName/" & $BaseFont & $Param & ">>")
    __EndObj()
EndFunc   ;==>_LoadFontTT

; #FUNCTION# ====================================================================================================================
; Name ..........: _LoadResImage
; Description ...: Load a image in the pdf (if you use it multiple times it decreases the size of the pdf)
; Syntax ........: _LoadResImage( $sImgAlias , $sImage  )
; Parameters ....: $sImgAlias           -  an alias to identify the image in the pdf (e.g. "Cheese").
;                  $sImage              -  image path.
; Return values .: Success      - True
;                  Failure      - False
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......: Image types accepted: BMP, GIF, TIF, TIFF, PNG, JPG, JPEG (those are tested)
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _LoadResImage($sImgAlias, $sImage)
    Local $iW, $iH, $ImgBuf, $hImage, $hImageExt, $newImg, $hClone, $hGraphics, $iObj
    If $sImgAlias = "" Then __Error("You don't have an alias for the image", @ScriptLineNumber)
    If $sImage = ""  Then
        __Error("You don't have any images to insert or the path is invalid",@ScriptLineNumber)
    Else
        $hImageExt = StringUpper(StringRight($sImage, 3))
        $newImg = _TempFile(@ScriptDir, "~", ".jpg")
        Switch $hImageExt
            Case "BMP", "GIF", "TIF", "TIFF", "PNG", "JPG", "JPEG", "ICO"
                _GDIPlus_Startup()
                $hImage = _GDIPlus_ImageLoadFromFile($sImage)
                $iW = _GDIPlus_ImageGetWidth($hImage)
                $iH = _GDIPlus_ImageGetHeight($hImage)
                $hClone = _GDIPlus_BitmapCloneArea($hImage, 0, 0, $iW, $iH, $GDIP_PXF24RGB)
                $hGraphics = _GDIPlus_ImageGetGraphicsContext($hClone)
                _GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)
                _GDIPlus_GraphicsClear($hGraphics, 0xFFFFFFFF)
                _GDIPlus_GraphicsDrawImage($hGraphics, $hImage, 0, 0)
                _GDIPlus_ImageSaveToFile($hClone, $newImg)
                $ImgBuf = __ToBinary($newImg)
                $_iImageW = $iW
                $_iImageH = $iH
                $iObj = __InitObj()
                __ToBuffer("<</Type /XObject /Subtype /Image /Name /" & $sImgAlias & " /Width " & $_iImageW & " /Height " & $_iImageH & " /Filter /DCTDecode /ColorSpace /DeviceRGB /BitsPerComponent 8" & " /Length " & $iObj + 1 & " 0 R" & ">>")
                __ToBuffer("stream" & @CRLF & $ImgBuf & @CRLF & "endstream")
                __EndObj()
                $_Image &= "/" & $sImgAlias & " " & $iObj & " 0 R " & @CRLF
                __InitObj()
                __ToBuffer(StringLen($ImgBuf))
                __EndObj()
                _GDIPlus_ImageDispose($hImage)
                _GDIPlus_GraphicsDispose($hGraphics)
                _GDIPlus_BitmapDispose($hClone)
                _GDIPlus_Shutdown()
                FileDelete($newImg)
            Case Else
                __Error("The image is invalid",@ScriptLineNumber)
                Exit
        EndSwitch
    EndIf
    Return $_Image
EndFunc   ;==>_LoadResImage

; #FUNCTION# ====================================================================================================================
; Name ..........: _OpenAfter
; Description ...: Choose to open or not the pdf after generating
; Syntax ........: _OpenAfter( [ $bO ] )
; Parameters ....: $bO                  - [optional]  True/False.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _OpenAfter($bO = True)
    $_bOpen = $bO
EndFunc   ;==>_OpenAfter

; #FUNCTION# ====================================================================================================================
; Name ..........: _Paragraph
; Description ...: Insert paragraph on page
; Syntax ........: _Paragraph( $sText , $iX , $iY [, $iWidth [, $sFontAlias [, $iFontSize [, $iRotate ]]]] )
; Parameters ....: $sText               -  text string.
;                  $iX                  -  left value.
;                  $iY                  -  top value.
;                  $iWidth              - [optional]  width.
;                  $sFontAlias          - [optional]  font alias.
;                  $iFontSize           - [optional]  font size.
;                  $iRotate             - [optional]  angle.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _Paragraph($sText, $iX, $iY, $iWidth = 0, $sFontAlias = "", $iFontSize = 12, $iRotate = 0)
    _SetColourFill(0)
    _SetColourStroke(0)
    _SetTextRenderingMode(0)
    Local $iUnit = Round(_GetUnit())
    Local $iPagina = Round(_GetPageWidth() / $iUnit)

    If $iWidth = 0 Then $iWidth = Round($iPagina - 1.75 * $iX, 2)

    Local $lScale = 100
    Local $sRand = ""
    Local $r = 0

    Local $iCuvinte = StringSplit($sText, " ", 3)

    For $i = 0 To UBound($iCuvinte) - 1
        $sRand &= $iCuvinte[$i] & " "
        Local $ssr = Round(_GetTextLength($sRand, $sFontAlias, $iFontSize) * $iUnit)
        Switch $ssr
            Case 1 To Round($iWidth * $iUnit, 2)
                If $i = UBound($iCuvinte) - 1 Then
                    _DrawText($iX, $iY - Round($r * (($iFontSize * 1.2) / $iUnit), 2), $sRand, $sFontAlias, $iFontSize, $PDF_ALIGN_LEFT, $iRotate)
                EndIf
                ContinueLoop
            Case Else
                $lScale = Round($iWidth * 100 * $iUnit / $ssr, 1)
                _SetTextHorizontalScaling($lScale)
                _DrawText($iX, $iY - Round($r * ($iFontSize * 1.2) / $iUnit, 2), $sRand, $sFontAlias, $iFontSize, $PDF_ALIGN_LEFT, $iRotate)
                _SetTextHorizontalScaling(100)
        EndSwitch
        $sRand = ""
        $r += 1
    Next
EndFunc   ;==>_Paragraph

; #FUNCTION# ====================================================================================================================
; Name ..........: _Rectangle
; Description ...: Draw a _Rectangle
; Syntax ........: _Rectangle( $iX , $iY , $iW , $iH [, $sStyle [, $iRadius ]] )
; Parameters ....: $iX                  -  Left value.
;                  $iY                  -  Top value.
;                  $iW                  -  Width.
;                  $iH                  -  Height.
;                  $sStyle              - [optional]  string value.
;                  |$PDF_STYLE_STROKED
;                  |$PDF_STYLE_FILLED
;                  $iRadius             - [optional]  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _Rectangle($iX, $iY, $iW, $iH, $sStyle = $PDF_STYLE_STROKED, $iRadius = 0)
    Local $iR
    __ToBuffer("n")
    If $iRadius > 0 Then
        If $iRadius > ($iW / 2) Then $iRadius = $iW / 2
        If $iRadius > ($iH / 2) Then $iRadius = $iH / 2
        $iR = 0.55 * $iRadius
        _MoveTo($iX + $iRadius, $iY)
        _LineTo($iX + $iW - $iRadius, $iY, $PDF_STYLE_NONE)
        __Curve(($iX + $iW - $iRadius + $iR), $iY, $iX + $iW, $iY + $iRadius - $iR, $iX + $iW, $iY + $iRadius, $PDF_STYLE_NONE)
        _LineTo($iX + $iW, $iY + $iH - $iRadius, $PDF_STYLE_NONE)
        __Curve($iX + $iW, $iY + $iH - $iRadius + $iR, $iX + $iW - $iRadius + $iR, $iY + $iH, $iX + $iW - $iRadius, $iY + $iH, $PDF_STYLE_NONE)
        _LineTo($iX + $iRadius, $iY + $iH, $PDF_STYLE_NONE)
        __Curve($iX + $iRadius - $iR, $iY + $iH, $iX, $iY + $iH - $iRadius + $iR, $iX, $iY + $iH - $iRadius, $PDF_STYLE_NONE)
        _LineTo($iX, $iY + $iRadius, $PDF_STYLE_NONE)
        __Curve($iX, $iY + $iRadius - $iR, $iX + $iRadius - $iR, $iY, $iX + $iRadius, $iY, $PDF_STYLE_NONE)
    Else
        __ToBuffer(__ToStr(__ToSpace($iX)) & " " & __ToStr(__ToSpace($iY)) & " " & __ToStr(__ToSpace($iW)) & " " & __ToStr(__ToSpace($iH)) & " re")
    EndIf
    _Path($sStyle)
EndFunc   ;==>_Rectangle

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetCharSpacing
; Description ...: Set the space between characters
; Syntax ........: _SetCharSpacing( $iW  )
; Parameters ....: $iW                   -  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetCharSpacing($iW)
    $_CharSpacing = $iW
    __ToBuffer(__ToStr($_CharSpacing) & " Tc")
EndFunc   ;==>_SetCharSpacing

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetColourFill
; Description ...: Set the fill colour
; Syntax ........: _SetColourFill( $rgb  )
; Parameters ....: $rgb                 -  RGB value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetColourFill($rgb)
    Local $r, $G, $B
    If ($rgb <= 0) And ($rgb >= -255) Then
        __ToBuffer(__ToStr(-$rgb / 255) & " g")
    Else
        $B = Mod($rgb, 256)
        $G = Mod(($rgb / 256), 256)
        $r = Mod(($rgb / 65536), 256)
        __ToBuffer(__ToStr($r / 255) & " " & __ToStr($G / 255) & " " & __ToStr($B / 255) & " rg")
    EndIf
EndFunc   ;==>_SetColourFill

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetColourStroke
; Description ...: Set the stroke colour
; Syntax ........: _SetColourStroke( $rgb  )
; Parameters ....: $rgb                 -  RGB value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetColourStroke($rgb)
    Local $r, $G, $B
    If ($rgb <= 0) And ($rgb >= -255) Then
        __ToBuffer(__ToStr(-$rgb / 255) & " G")
    Else
        $B = Mod($rgb, 256)
        $G = Mod(($rgb / 256), 256)
        $r = Mod(($rgb / 65536), 256)
        __ToBuffer(__ToStr($r / 255) & " " & __ToStr($G / 255) & " " & __ToStr($B / 255) & " RG")
    EndIf
EndFunc   ;==>_SetColourStroke

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetDash
; Description ...: The line dash pattern controls the pattern of dashes and gaps used to stroke paths.
; Syntax ........: _SetDash( $dash_on [, $dash_off ] )
; Parameters ....: $dash_on             -  unknown value.
;                  $dash_off            - [optional]  unknown value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetDash($dash_on, $dash_off = 0)
    If ($dash_on = 0) And ($dash_off = 0) Then
        __ToBuffer("[ ] 0 d")
    Else
        __ToBuffer("[" & __ToStr(__ToSpace($dash_on)) & " " & __ToStr(__ToSpace($dash_off)) & "] 0 d")
    EndIf
EndFunc   ;==>_SetDash

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetKeywords
; Description ...: Sets the keywords property of the pdf
; Syntax ........: _SetKeywords( [ $sKeywords ] )
; Parameters ....: $sKeywords           - [optional]  string value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetKeywords($sKeywords = "")
    $PDF_KEYWORDS = $sKeywords
EndFunc   ;==>_SetKeywords

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetLayoutMode
; Description ...: Sets the layout mode when pdf is displayed
; Syntax ........: _SetLayoutMode( $sL  )
; Parameters ....: $sL                  -  string value.
;                   |$PDF_LAYOUT_SINGLE = 0
;                   |$PDF_LAYOUT_CONTINOUS = 1
;                   |$PDF_LAYOUT_TWO = 2
;                   |$PDF_LAYOUT_DEFAULT = 4
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetLayoutMode($sL)
    Switch $sL
        Case $PDF_LAYOUT_SINGLE, $PDF_LAYOUT_CONTINOUS, $PDF_LAYOUT_TWO, $PDF_LAYOUT_DEFAULT
            $_LayoutMode = $sL
        Case Else
            $_LayoutMode = $PDF_LAYOUT_SINGLE
    EndSwitch
EndFunc   ;==>_SetLayoutMode

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetLineCap
; Description ...: The line cap style specifies the shape to be used at the ends of open subpaths (and dashes, if any) when they are stroked.
; Syntax ........: _SetLineCap( $iW  )
; Parameters ....: $iW                   -  integer value.
;                   |0  =   Butt cap.
;                   |1  =   Round cap.
;                   |2  =   Projecting square cap.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetLineCap($iW)
    If ($iW >= 0) And ($iW <= 2) Then __ToBuffer(__ToStr($iW) & " J")
EndFunc   ;==>_SetLineCap

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetLineJoin
; Description ...: The  line join style specifies the shape to be used at the corners of paths that are stroked.
; Syntax ........: _SetLineJoin( $iW  )
; Parameters ....: $iW                   -  integer value.
;                   |0  =   Miter join.
;                   |1  =   Round join.
;                   |2  =   Bevel join.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetLineJoin($iW)
    If ($iW >= 0) And ($iW <= 2) Then __ToBuffer(__ToStr($iW) & " j")
EndFunc   ;==>_SetLineJoin

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetMargin
; Description ...: Set the interior margin of the working area.
; Syntax ........: _SetMargin( $iValue  )
; Parameters ....: $iValue              -  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetMargin($iValue)
    $__SetMargin = __ToSpace($iValue)
EndFunc   ;==>_SetMargin

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetMiterLimit
; Description ...: When two line segments meet at a sharp angle and mitered joins have been specified as the line join style,
;                   it is possible for the miter to extend far beyond the thickness of the line stroking the path.
;                   The miter limit imposes a maximum on the ratio of the miter length to the line width.
; Syntax ........: _SetMiterLimit($iW)
; Parameters ....: $iW                   -  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetMiterLimit($iW)
    If ($iW >= 1) Then __ToBuffer(__ToStr($iW) & " M")
EndFunc   ;==>_SetMiterLimit

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetOrientation
; Description ...: Set the orientation of the pages in pdf
; Syntax ........: _SetOrientation( [ $iOrientation = $PDF_ORIENTATION_PORTRAIT ] )
; Parameters ....: $iOrientation        - [optional]  integer value.
;                  |$PDF_ORIENTATION_PORTRAIT
;                  |$PDF_ORIENTATION_LANDSCAPE
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetOrientation($iOrientation = $PDF_ORIENTATION_PORTRAIT)
    $_Orientation = $iOrientation
EndFunc   ;==>_SetOrientation

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetPageHeight
; Description ...: Set the height of the page
; Syntax ........: _SetPageHeight( $iH  )
; Parameters ....: $iH                  -  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetPageHeight($iH)
    If $_PaperSize <> "CUSTOM" Then $_PaperSize = "CUSTOM"
    $_PageHeight = __ToSpace($iH)
EndFunc   ;==>_SetPageHeight

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetPageWidth
; Description ...: Set the width of the page
; Syntax ........: _SetPageWidth( $iW  )
; Parameters ....: $iW                  -  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetPageWidth($iW)
    If $_PaperSize <> "CUSTOM" Then $_PaperSize = "CUSTOM"
    $_PageWidth = __ToSpace($iW)
EndFunc   ;==>_SetPageWidth

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetPaperSize
; Description ...: Sets the paper size of the pdf
; Syntax ........: _SetPaperSize( $sPage [, $iWidth [, $iHeight ]] )
; Parameters ....: $sPage        -  string value ("A0","LETTER", "CUSTOM" etc)
;                   |if "CUSTOM" set the width and height
;                  $iWidth              - [optional]  integer value.
;                  $iHeight             - [optional]  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetPaperSize($sPage, $iWidth = -1, $iHeight = -1)
    $_PaperSize = StringUpper($sPage)
    Switch $sPage
        Case "A0"
            $_PageWidth = 2383.937
            $_PageHeight = 3370.394
        Case "A1"
            $_PageWidth = 1683.780
            $_PageHeight = 2383.937
        Case "A2"
            $_PageWidth = 1190.551
            $_PageHeight = 1683.780
        Case "A3"
            $_PageWidth = 841.890
            $_PageHeight = 1190.551
        Case "A4"
            $_PageWidth = 595.276
            $_PageHeight = 841.890
        Case "A5"
            $_PageWidth = 419.528
            $_PageHeight = 595.276
        Case "A6"
            $_PageWidth = 297.638
            $_PageHeight = 419.528
        Case "A7"
            $_PageWidth = 209.764
            $_PageHeight = 297.638
        Case "A8"
            $_PageWidth = 147.402
            $_PageHeight = 209.764
        Case "A9"
            $_PageWidth = 104.882
            $_PageHeight = 147.402
        Case "A10"
            $_PageWidth = 73.701
            $_PageHeight = 104.882
        Case "A11"
            $_PageWidth = 51.024
            $_PageHeight = 73.701
        Case "A12"
            $_PageWidth = 36.850
            $_PageHeight = 51.024
        Case "B0"
            $_PageWidth = 2834.646
            $_PageHeight = 4008.189
        Case "B1"
            $_PageWidth = 2004.094
            $_PageHeight = 2834.646
        Case "B2"
            $_PageWidth = 1417.323
            $_PageHeight = 2004.094
        Case "B3"
            $_PageWidth = 1000.630
            $_PageHeight = 1417.323
        Case "B4"
            $_PageWidth = 708.661
            $_PageHeight = 1000.630
        Case "B5"
            $_PageWidth = 498.898
            $_PageHeight = 708.661
        Case "B6"
            $_PageWidth = 354.331
            $_PageHeight = 498.898
        Case "B7"
            $_PageWidth = 249.449
            $_PageHeight = 354.331
        Case "B8"
            $_PageWidth = 175.748
            $_PageHeight = 249.449
        Case "B9"
            $_PageWidth = 124.724
            $_PageHeight = 175.748
        Case "B10"
            $_PageWidth = 87.874
            $_PageHeight = 124.724
        Case "B11"
            $_PageWidth = 62.362
            $_PageHeight = 87.874
        Case "B12"
            $_PageWidth = 42.520
            $_PageHeight = 62.362
        Case "C0"
            $_PageWidth = 2599.370
            $_PageHeight = 3676.535
        Case "C1"
            $_PageWidth = 1836.850
            $_PageHeight = 2599.370
        Case "C2"
            $_PageWidth = 1298.268
            $_PageHeight = 1836.850
        Case "C3"
            $_PageWidth = 918.425
            $_PageHeight = 1298.268
        Case "C4"
            $_PageWidth = 649.134
            $_PageHeight = 918.425
        Case "C5"
            $_PageWidth = 459.213
            $_PageHeight = 649.134
        Case "C6"
            $_PageWidth = 323.150
            $_PageHeight = 459.213
        Case "C7"
            $_PageWidth = 229.606
            $_PageHeight = 323.150
        Case "C8"
            $_PageWidth = 161.575
            $_PageHeight = 229.606
        Case "C9"
            $_PageWidth = 113.386
            $_PageHeight = 161.575
        Case "C10"
            $_PageWidth = 79.370
            $_PageHeight = 113.386
        Case "C11"
            $_PageWidth = 56.693
            $_PageHeight = 79.370
        Case "C12"
            $_PageWidth = 39.685
            $_PageHeight = 56.693
        Case "C76"
            $_PageWidth = 229.606
            $_PageHeight = 459.213
        Case "DL"
            $_PageWidth = 311.811
            $_PageHeight = 623.622
        Case "E0"
            $_PageWidth = 2491.654
            $_PageHeight = 3517.795
        Case "E1"
            $_PageWidth = 1757.480
            $_PageHeight = 2491.654
        Case "E2"
            $_PageWidth = 1247.244
            $_PageHeight = 1757.480
        Case "E3"
            $_PageWidth = 878.740
            $_PageHeight = 1247.244
        Case "E4"
            $_PageWidth = 623.622
            $_PageHeight = 878.740
        Case "E5"
            $_PageWidth = 439.370
            $_PageHeight = 623.622
        Case "E6"
            $_PageWidth = 311.811
            $_PageHeight = 439.370
        Case "E7"
            $_PageWidth = 221.102
            $_PageHeight = 311.811
        Case "E8"
            $_PageWidth = 155.906
            $_PageHeight = 221.102
        Case "E9"
            $_PageWidth = 110.551
            $_PageHeight = 155.906
        Case "E10"
            $_PageWidth = 76.535
            $_PageHeight = 110.551
        Case "E11"
            $_PageWidth = 53.858
            $_PageHeight = 76.535
        Case "E12"
            $_PageWidth = 36.850
            $_PageHeight = 53.858
        Case "G0"
            $_PageWidth = 2715.591
            $_PageHeight = 3838.110
        Case "G1"
            $_PageWidth = 1919.055
            $_PageHeight = 2715.591
        Case "G2"
            $_PageWidth = 1357.795
            $_PageHeight = 1919.055
        Case "G3"
            $_PageWidth = 958.110
            $_PageHeight = 1357.795
        Case "G4"
            $_PageWidth = 677.480
            $_PageHeight = 958.110
        Case "G5"
            $_PageWidth = 479.055
            $_PageHeight = 677.480
        Case "G6"
            $_PageWidth = 337.323
            $_PageHeight = 479.055
        Case "G7"
            $_PageWidth = 238.110
            $_PageHeight = 337.323
        Case "G8"
            $_PageWidth = 167.244
            $_PageHeight = 238.110
        Case "G9"
            $_PageWidth = 119.055
            $_PageHeight = 167.244
        Case "G10"
            $_PageWidth = 82.205
            $_PageHeight = 119.055
        Case "G11"
            $_PageWidth = 59.528
            $_PageHeight = 82.205
        Case "G12"
            $_PageWidth = 39.685
            $_PageHeight = 59.528
        Case "RA0"
            $_PageWidth = 2437.795
            $_PageHeight = 3458.268
        Case "RA1"
            $_PageWidth = 1729.134
            $_PageHeight = 2437.795
        Case "RA2"
            $_PageWidth = 1218.898
            $_PageHeight = 1729.134
        Case "RA3"
            $_PageWidth = 864.567
            $_PageHeight = 1218.898
        Case "RA4"
            $_PageWidth = 609.449
            $_PageHeight = 864.567
        Case "SRA0"
            $_PageWidth = 2551.181
            $_PageHeight = 3628.346
        Case "SRA1"
            $_PageWidth = 1814.173
            $_PageHeight = 2551.181
        Case "SRA2"
            $_PageWidth = 1275.591
            $_PageHeight = 1814.173
        Case "SRA3"
            $_PageWidth = 907.087
            $_PageHeight = 1275.591
        Case "SRA4"
            $_PageWidth = 637.795
            $_PageHeight = 907.087
        Case "4A0"
            $_PageWidth = 4767.874
            $_PageHeight = 6740.787
        Case "2A0"
            $_PageWidth = 3370.394
            $_PageHeight = 4767.874
        Case "A2_EXTRA"
            $_PageWidth = 1261.417
            $_PageHeight = 1754.646
        Case "A3+"
            $_PageWidth = 932.598
            $_PageHeight = 1369.134
        Case "A3_EXTRA"
            $_PageWidth = 912.756
            $_PageHeight = 1261.417
        Case "A3_SUPER"
            $_PageWidth = 864.567
            $_PageHeight = 1440
        Case "SUPER_A3"
            $_PageWidth = 864.567
            $_PageHeight = 1380.472
        Case "A4_EXTRA"
            $_PageWidth = 666.142
            $_PageHeight = 912.756
        Case "A4_SUPER"
            $_PageWidth = 649.134
            $_PageHeight = 912.756
        Case "SUPER_A4"
            $_PageWidth = 643.465
            $_PageHeight = 1009.134
        Case "A4_LONG"
            $_PageWidth = 595.276
            $_PageHeight = 986.457
        Case "F4"
            $_PageWidth = 595.276
            $_PageHeight = 935.433
        Case "SO_B5_EXTRA"
            $_PageWidth = 572.598
            $_PageHeight = 782.362
        Case "A5_EXTRA"
            $_PageWidth = 490.394
            $_PageHeight = 666.142
        Case "ANSI_E"
            $_PageWidth = 2448
            $_PageHeight = 3168
        Case "ANSI_D"
            $_PageWidth = 1584
            $_PageHeight = 2448
        Case "ANSI_C"
            $_PageWidth = 1224
            $_PageHeight = 1584
        Case "ANSI_B"
            $_PageWidth = 792
            $_PageHeight = 1224
        Case "ANSI_A"
            $_PageWidth = 612
            $_PageHeight = 792
        Case "LEDGER"
            $_PageWidth = 1224
            $_PageHeight = 792
        Case "TABLOID"
            $_PageWidth = 792
            $_PageHeight = 1224
        Case "LETTER"
            $_PageWidth = 612
            $_PageHeight = 792
        Case "LEGAL"
            $_PageWidth = 612
            $_PageHeight = 1008
        Case "GLETTER"
            $_PageWidth = 576
            $_PageHeight = 756
        Case "JLEGAL"
            $_PageWidth = 576
            $_PageHeight = 360
        Case "QUADDEMY"
            $_PageWidth = 2520
            $_PageHeight = 3240
        Case "SUPER_B"
            $_PageWidth = 936
            $_PageHeight = 1368
        Case "QUARTO"
            $_PageWidth = 648
            $_PageHeight = 792
        Case "FOLIO"
            $_PageWidth = 612
            $_PageHeight = 936
        Case "EXECUTIVE"
            $_PageWidth = 522
            $_PageHeight = 756
        Case "MEMO"
            $_PageWidth = 396
            $_PageHeight = 612
        Case "FOOLSCAP"
            $_PageWidth = 595.440
            $_PageHeight = 936
        Case "COMPACT"
            $_PageWidth = 306
            $_PageHeight = 486
        Case "ORGANIZERJ"
            $_PageWidth = 198
            $_PageHeight = 360
        Case "P1"
            $_PageWidth = 1587.402
            $_PageHeight = 2437.795
        Case "P2"
            $_PageWidth = 1218.898
            $_PageHeight = 1587.402
        Case "P3"
            $_PageWidth = 793.701
            $_PageHeight = 1218.898
        Case "P4"
            $_PageWidth = 609.449
            $_PageHeight = 793.701
        Case "P5"
            $_PageWidth = 396.850
            $_PageHeight = 609.449
        Case "P6"
            $_PageWidth = 303.307
            $_PageHeight = 396.850
        Case "ARCH_E"
            $_PageWidth = 2592
            $_PageHeight = 3456
        Case "ARCH_E1"
            $_PageWidth = 2160
            $_PageHeight = 3024
        Case "ARCH_D"
            $_PageWidth = 1728
            $_PageHeight = 2592
        Case "ARCH_C"
            $_PageWidth = 1296
            $_PageHeight = 1728
        Case "ARCH_B"
            $_PageWidth = 864
            $_PageHeight = 1296
        Case "ARCH_A"
            $_PageWidth = 648
            $_PageHeight = 864
        Case "ANNENV_A2"
            $_PageWidth = 314.640
            $_PageHeight = 414
        Case "ANNENV_A6"
            $_PageWidth = 342
            $_PageHeight = 468
        Case "ANNENV_A7"
            $_PageWidth = 378
            $_PageHeight = 522
        Case "ANNENV_A8"
            $_PageWidth = 396
            $_PageHeight = 584.640
        Case "ANNENV_A10"
            $_PageWidth = 450
            $_PageHeight = 692.640
        Case "ANNENV_SLIM"
            $_PageWidth = 278.640
            $_PageHeight = 638.640
        Case "COMMENV_N6_1/4"
            $_PageWidth = 252
            $_PageHeight = 432
        Case "COMMENV_N6_3/4"
            $_PageWidth = 260.640
            $_PageHeight = 468
        Case "COMMENV_N8"
            $_PageWidth = 278.640
            $_PageHeight = 540
        Case "COMMENV_N9"
            $_PageWidth = 278.640
            $_PageHeight = 638.640
        Case "COMMENV_N10"
            $_PageWidth = 296.640
            $_PageHeight = 684
        Case "COMMENV_N11"
            $_PageWidth = 324
            $_PageHeight = 746.640
        Case "COMMENV_N12"
            $_PageWidth = 342
            $_PageHeight = 792
        Case "COMMENV_N14"
            $_PageWidth = 360
            $_PageHeight = 828
        Case "CATENV_N1"
            $_PageWidth = 432
            $_PageHeight = 648
        Case "CATENV_N1_3/4"
            $_PageWidth = 468
            $_PageHeight = 684
        Case "CATENV_N2"
            $_PageWidth = 468
            $_PageHeight = 720
        Case "CATENV_N3"
            $_PageWidth = 504
            $_PageHeight = 720
        Case "CATENV_N6"
            $_PageWidth = 540
            $_PageHeight = 756
        Case "CATENV_N7"
            $_PageWidth = 576
            $_PageHeight = 792
        Case "CATENV_N8"
            $_PageWidth = 594
            $_PageHeight = 810
        Case "CATENV_N9_1/2"
            $_PageWidth = 612
            $_PageHeight = 756
        Case "CATENV_N9_3/4"
            $_PageWidth = 630
            $_PageHeight = 810
        Case "CATENV_N10_1/2"
            $_PageWidth = 648
            $_PageHeight = 864
        Case "CATENV_N12_1/2"
            $_PageWidth = 684
            $_PageHeight = 900
        Case "CATENV_N13_1/2"
            $_PageWidth = 720
            $_PageHeight = 936
        Case "CATENV_N14_1/4"
            $_PageWidth = 810
            $_PageHeight = 882
        Case "CATENV_N14_1/2"
            $_PageWidth = 828
            $_PageHeight = 1044
        Case "JIS_B0"
            $_PageWidth = 2919.685
            $_PageHeight = 4127.244
        Case "JIS_B1"
            $_PageWidth = 2063.622
            $_PageHeight = 2919.685
        Case "JIS_B2"
            $_PageWidth = 1459.843
            $_PageHeight = 2063.622
        Case "JIS_B3"
            $_PageWidth = 1031.811
            $_PageHeight = 1459.843
        Case "JIS_B4"
            $_PageWidth = 728.504
            $_PageHeight = 1031.811
        Case "JIS_B5"
            $_PageWidth = 515.906
            $_PageHeight = 728.504
        Case "JIS_B6"
            $_PageWidth = 362.835
            $_PageHeight = 515.906
        Case "JIS_B7"
            $_PageWidth = 257.953
            $_PageHeight = 362.835
        Case "JIS_B8"
            $_PageWidth = 181.417
            $_PageHeight = 257.953
        Case "JIS_B9"
            $_PageWidth = 127.559
            $_PageHeight = 181.417
        Case "JIS_B10"
            $_PageWidth = 90.709
            $_PageHeight = 127.559
        Case "JIS_B11"
            $_PageWidth = 62.362
            $_PageHeight = 90.709
        Case "JIS_B12"
            $_PageWidth = 45.354
            $_PageHeight = 62.362
        Case "PA0"
            $_PageWidth = 2381.102
            $_PageHeight = 3174.803
        Case "PA1"
            $_PageWidth = 1587.402
            $_PageHeight = 2381.102
        Case "PA2"
            $_PageWidth = 1190.551
            $_PageHeight = 1587.402
        Case "PA3"
            $_PageWidth = 793.701
            $_PageHeight = 1190.551
        Case "PA4"
            $_PageWidth = 595.276
            $_PageHeight = 793.701
        Case "PA5"
            $_PageWidth = 396.850
            $_PageHeight = 595.276
        Case "PA6"
            $_PageWidth = 297.638
            $_PageHeight = 396.850
        Case "PA7"
            $_PageWidth = 198.425
            $_PageHeight = 297.638
        Case "PA8"
            $_PageWidth = 147.402
            $_PageHeight = 198.425
        Case "PA9"
            $_PageWidth = 99.213
            $_PageHeight = 147.402
        Case "PA10"
            $_PageWidth = 73.701
            $_PageHeight = 99.213
        Case "PASSPORT_PHOTO"
            $_PageWidth = 99.213
            $_PageHeight = 127.559
        Case "E"
            $_PageWidth = 233.858
            $_PageHeight = 340.157
        Case "3R"
            $_PageWidth = 252.283
            $_PageHeight = 360
        Case "4R"
            $_PageWidth = 289.134
            $_PageHeight = 430.866
        Case "4D"
            $_PageWidth = 340.157
            $_PageHeight = 430.866
        Case "5R"
            $_PageWidth = 360
            $_PageHeight = 504.567
        Case "6R"
            $_PageWidth = 430.866
            $_PageHeight = 575.433
        Case "8R"
            $_PageWidth = 575.433
            $_PageHeight = 720
        Case "S8R"
            $_PageWidth = 575.433
            $_PageHeight = 864.567
        Case "10R"
            $_PageWidth = 720
            $_PageHeight = 864.567
        Case "S10R"
            $_PageWidth = 720
            $_PageHeight = 1080
        Case "11R"
            $_PageWidth = 790.866
            $_PageHeight = 1009.134
        Case "S11R"
            $_PageWidth = 790.866
            $_PageHeight = 1224.567
        Case "12R"
            $_PageWidth = 864.567
            $_PageHeight = 1080
        Case "S12R"
            $_PageWidth = 864.567
            $_PageHeight = 1292.598
        Case "NEWSPAPER_BROADSHEET"
            $_PageWidth = 2125.984
            $_PageHeight = 1700.787
        Case "NEWSPAPER_BERLINER"
            $_PageWidth = 1332.283
            $_PageHeight = 892.913
        Case "NEWSPAPER_COMPACT"
            $_PageWidth = 1218.898
            $_PageHeight = 793.701
        Case "BUSINESS_CARD_ISO7810"
            $_PageWidth = 153.014
            $_PageHeight = 242.646
        Case "BUSINESS_CARD_ISO216"
            $_PageWidth = 147.402
            $_PageHeight = 209.764
        Case "BUSINESS_CARD_ES"
            $_PageWidth = 155.906
            $_PageHeight = 240.945
        Case "BUSINESS_CARD_US"
            $_PageWidth = 144.567
            $_PageHeight = 252.283
        Case "BUSINESS_CARD_JP"
            $_PageWidth = 155.906
            $_PageHeight = 257.953
        Case "BUSINESS_CARD_HK"
            $_PageWidth = 153.071
            $_PageHeight = 255.118
        Case "BUSINESS_CARD_SE"
            $_PageWidth = 155.906
            $_PageHeight = 255.118
        Case "BUSINESS_CARD_IL"
            $_PageWidth = 141.732
            $_PageHeight = 255.118
        Case "4SHEET"
            $_PageWidth = 2880
            $_PageHeight = 4320
        Case "6SHEET"
            $_PageWidth = 3401.575
            $_PageHeight = 5102.362
        Case "12SHEET"
            $_PageWidth = 8640
            $_PageHeight = 4320
        Case "16SHEET"
            $_PageWidth = 5760
            $_PageHeight = 8640
        Case "32SHEET"
            $_PageWidth = 11520
            $_PageHeight = 8640
        Case "48SHEET"
            $_PageWidth = 17280
            $_PageHeight = 8640
        Case "64SHEET"
            $_PageWidth = 23040
            $_PageHeight = 8640
        Case "96SHEET"
            $_PageWidth = 34560
            $_PageHeight = 8640
        Case "EN_EMPEROR"
            $_PageWidth = 3456
            $_PageHeight = 5184
        Case "EN_ANTIQUARIAN"
            $_PageWidth = 2232
            $_PageHeight = 3816
        Case "EN_GRAND_EAGLE"
            $_PageWidth = 2070
            $_PageHeight = 3024
        Case "EN_DOUBLE_ELEPHANT"
            $_PageWidth = 1926
            $_PageHeight = 2880
        Case "EN_ATLAS"
            $_PageWidth = 1872
            $_PageHeight = 2448
        Case "EN_COLOMBIER"
            $_PageWidth = 1692
            $_PageHeight = 2484
        Case "EN_ELEPHANT"
            $_PageWidth = 1656
            $_PageHeight = 2016
        Case "EN_DOUBLE_DEMY"
            $_PageWidth = 1620
            $_PageHeight = 2556
        Case "EN_IMPERIAL"
            $_PageWidth = 1584
            $_PageHeight = 2160
        Case "EN_PRINCESS"
            $_PageWidth = 1548
            $_PageHeight = 2016
        Case "EN_CARTRIDGE"
            $_PageWidth = 1512
            $_PageHeight = 1872
        Case "EN_DOUBLE_LARGE_POST"
            $_PageWidth = 1512
            $_PageHeight = 2376
        Case "EN_ROYAL"
            $_PageWidth = 1440
            $_PageHeight = 1800
        Case "EN_HALF_POST"
            $_PageWidth = 1404
            $_PageHeight = 1692
        Case "EN_SUPER_ROYAL"
            $_PageWidth = 1368
            $_PageHeight = 1944
        Case "EN_DOUBLE_POST"
            $_PageWidth = 1368
            $_PageHeight = 2196
        Case "EN_MEDIUM"
            $_PageWidth = 1260
            $_PageHeight = 1656
        Case "EN_DEMY"
            $_PageWidth = 1260
            $_PageHeight = 1620
        Case "EN_LARGE_POST"
            $_PageWidth = 1188
            $_PageHeight = 1512
        Case "EN_COPY_DRAUGHT"
            $_PageWidth = 1152
            $_PageHeight = 1440
        Case "EN_POST"
            $_PageWidth = 1116
            $_PageHeight = 1386
        Case "EN_CROWN"
            $_PageWidth = 1080
            $_PageHeight = 1440
        Case "EN_PINCHED_POST"
            $_PageWidth = 1062
            $_PageHeight = 1332
        Case "EN_BRIEF"
            $_PageWidth = 972
            $_PageHeight = 1152
        Case "EN_FOOLSCAP"
            $_PageWidth = 972
            $_PageHeight = 1224
        Case "EN_SMALL_FOOLSCAP"
            $_PageWidth = 954
            $_PageHeight = 1188
        Case "EN_POTT"
            $_PageWidth = 900
            $_PageHeight = 1080
        Case "BE_GRAND_AIGLE"
            $_PageWidth = 1984.252
            $_PageHeight = 2948.031
        Case "BE_COLOMBIER"
            $_PageWidth = 1757.480
            $_PageHeight = 2409.449
        Case "BE_DOUBLE_CARRE"
            $_PageWidth = 1757.480
            $_PageHeight = 2607.874
        Case "BE_ELEPHANT"
            $_PageWidth = 1746.142
            $_PageHeight = 2182.677
        Case "BE_PETIT_AIGLE"
            $_PageWidth = 1700.787
            $_PageHeight = 2381.102
        Case "BE_GRAND_JESUS"
            $_PageWidth = 1559.055
            $_PageHeight = 2069.291
        Case "BE_JESUS"
            $_PageWidth = 1530.709
            $_PageHeight = 2069.291
        Case "BE_RAISIN"
            $_PageWidth = 1417.323
            $_PageHeight = 1842.520
        Case "BE_GRAND_MEDIAN"
            $_PageWidth = 1303.937
            $_PageHeight = 1714.961
        Case "BE_DOUBLE_POSTE"
            $_PageWidth = 1233.071
            $_PageHeight = 1601.575
        Case "BE_COQUILLE"
            $_PageWidth = 1218.898
            $_PageHeight = 1587.402
        Case "BE_PETIT_MEDIAN"
            $_PageWidth = 1176.378
            $_PageHeight = 1502.362
        Case "BE_RUCHE"
            $_PageWidth = 1020.472
            $_PageHeight = 1303.937
        Case "BE_PROPATRIA"
            $_PageWidth = 977.953
            $_PageHeight = 1218.898
        Case "BE_LYS"
            $_PageWidth = 898.583
            $_PageHeight = 1125.354
        Case "BE_POT"
            $_PageWidth = 870.236
            $_PageHeight = 1088.504
        Case "BE_ROSETTE"
            $_PageWidth = 765.354
            $_PageHeight = 983.622
        Case "FR_UNIVERS"
            $_PageWidth = 2834.646
            $_PageHeight = 3685.039
        Case "FR_DOUBLE_COLOMBIER"
            $_PageWidth = 2551.181
            $_PageHeight = 3571.654
        Case "FR_GRANDE_MONDE"
            $_PageWidth = 2551.181
            $_PageHeight = 3571.654
        Case "FR_DOUBLE_SOLEIL"
            $_PageWidth = 2267.717
            $_PageHeight = 3401.575
        Case "FR_DOUBLE_JESUS"
            $_PageWidth = 2154.331
            $_PageHeight = 3174.803
        Case "FR_GRAND_AIGLE"
            $_PageWidth = 2125.984
            $_PageHeight = 3004.724
        Case "FR_PETIT_AIGLE"
            $_PageWidth = 1984.252
            $_PageHeight = 2664.567
        Case "FR_DOUBLE_RAISIN"
            $_PageWidth = 1842.520
            $_PageHeight = 2834.646
        Case "FR_JOURNAL"
            $_PageWidth = 1842.520
            $_PageHeight = 2664.567
        Case "FR_COLOMBIER_AFFICHE"
            $_PageWidth = 1785.827
            $_PageHeight = 2551.181
        Case "FR_DOUBLE_CAVALIER"
            $_PageWidth = 1757.480
            $_PageHeight = 2607.874
        Case "FR_CLOCHE"
            $_PageWidth = 1700.787
            $_PageHeight = 2267.717
        Case "FR_SOLEIL"
            $_PageWidth = 1700.787
            $_PageHeight = 2267.717
        Case "FR_DOUBLE_CARRE"
            $_PageWidth = 1587.402
            $_PageHeight = 2551.181
        Case "FR_DOUBLE_COQUILLE"
            $_PageWidth = 1587.402
            $_PageHeight = 2494.488
        Case "FR_JESUS"
            $_PageWidth = 1587.402
            $_PageHeight = 2154.331
        Case "FR_RAISIN"
            $_PageWidth = 1417.323
            $_PageHeight = 1842.520
        Case "FR_CAVALIER"
            $_PageWidth = 1303.937
            $_PageHeight = 1757.480
        Case "FR_DOUBLE_COURONNE"
            $_PageWidth = 1303.937
            $_PageHeight = 2040.945
        Case "FR_CARRE"
            $_PageWidth = 1275.591
            $_PageHeight = 1587.402
        Case "FR_COQUILLE"
            $_PageWidth = 1247.244
            $_PageHeight = 1587.402
        Case "FR_DOUBLE_TELLIERE"
            $_PageWidth = 1247.244
            $_PageHeight = 1927.559
        Case "FR_DOUBLE_CLOCHE"
            $_PageWidth = 1133.858
            $_PageHeight = 1700.787
        Case "FR_DOUBLE_POT"
            $_PageWidth = 1133.858
            $_PageHeight = 1757.480
        Case "FR_ECU"
            $_PageWidth = 1133.858
            $_PageHeight = 1474.016
        Case "FR_COURONNE"
            $_PageWidth = 1020.472
            $_PageHeight = 1303.937
        Case "FR_TELLIERE"
            $_PageWidth = 963.780
            $_PageHeight = 1247.244
        Case "FR_POT"
            $_PageWidth = 878.740
            $_PageHeight = 1133.858
        Case "CUSTOM"
            If $iWidth = -1 Or $iHeight = -1 Then
                $_PageWidth = 595.276
                $_PageHeight = 841.890
            Else
                $_PageWidth = $iWidth
                $_PageHeight = $iHeight
            EndIf
        Case Else
            $_PageWidth = 595.2
            $_PageHeight = 842
    EndSwitch
EndFunc   ;==>_SetPaperSize

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetSubject
; Description ...: Set the subject of the pdf
; Syntax ........: _SetSubject( [ $sSubject ] )
; Parameters ....: $sSubject            - [optional]  string value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......: See the properties of the pdf
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetSubject($sSubject = "")
    $PDF_SUBJECT = $sSubject
EndFunc   ;==>_SetSubject

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetTextHorizontalScaling
; Description ...: The horizontal scaling parameter adjusts the width of glyphs by stretching or
;                   shrinking them in the horizontal direction. Its value is specified as a percentage of
;                   the normal width of the glyphs, with 100 being the normal width. The scaling
;                   always applies to the  x coordinate in text space, independently of the writing mode.
; Syntax ........: _SetTextHorizontalScaling($iW)
; Parameters ....: $iW                   -  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetTextHorizontalScaling($iW)
    $_TextScaling = $iW
    __ToBuffer(__ToStr($_TextScaling) & " Tz")
    Return $_TextScaling
EndFunc   ;==>_SetTextHorizontalScaling

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetTextRenderingMode
; Description ...: The text rendering mode determines whether showing text causes glyph
;                   outlines to be stroked, filled, used as a clipping path, or some combination of
;                   these operations.
; Syntax ........: _SetTextRenderingMode( [ $iW ] )
; Parameters ....: $iW                   - [optional]  integer value.
;                   |0  -   Fill text.
;                   |1  -   Stroke text.
;                   |2  -   Fill, then stroke, text.
;                   |3  -   Neither fill nor stroke text (invisible).
;                   |4  -   Fill text and add to path for clipping (see above).
;                   |5  -   Stroke text and add to path for clipping.
;                   |6  -   Fill, then stroke, text and add to path for clipping.
;                   |7  -   Add text to path for clipping.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetTextRenderingMode($iW = 0)
    If ($iW >= 0) And ($iW <= 7) Then __ToBuffer(__ToStr($iW) & " Tr")
EndFunc   ;==>_SetTextRenderingMode

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetTextRiseMode
; Description ...: Specifies the distance, in unscaled text space units, to move the
;                   baseline up or down from its default location. Positive values of text rise move the
;                   baseline up. Adjustments to the baseline are useful for drawing superscripts or
;                   subscripts. The default location of the baseline can be restored by setting the text
;                   rise to 0. Text rise always applies to the y coordinate in text space, regardless of the writing mode.
; Syntax ........: _SetTextRiseMode($iW)
; Parameters ....: $iW                   -  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetTextRiseMode($iW)
    __ToBuffer(__ToStr($iW) & " Ts")
EndFunc   ;==>_SetTextRiseMode

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetTitle
; Description ...: Set the title property of the pdf
; Syntax ........: _SetTitle( [ $sTitle ] )
; Parameters ....: $sTitle              - [optional]  string value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetTitle($sTitle = "")
    $PDF_TITLE = $sTitle
EndFunc   ;==>_SetTitle

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetUnit
; Description ...: Set the unit used in pdf
; Syntax ........: _SetUnit( [ $sUnit = $PDF_UNIT_CM ] )
; Parameters ....: $sUnit
;                   |$PDF_UNIT_PT or 1
;                   |$PDF_UNIT_INCH or 2
;                   |$PDF_UNIT_MM or 4
;                   |$PDF_UNIT_CM or 8
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetUnit($sUnit = $PDF_UNIT_CM)
    $__SetUnit = $sUnit
EndFunc   ;==>_SetUnit

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetWordSpacing
; Description ...: Set the space between words
; Syntax ........: _SetWordSpacing($iW)
; Parameters ....: $iW                   -  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetWordSpacing($iW)
    $_WordSpacing = $iW
    __ToBuffer(__ToStr($_WordSpacing) & " Tw")
EndFunc   ;==>_SetWordSpacing

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetZoomMode
; Description ...: Set the zoom when the pdf is opened
; Syntax ........: _SetZoomMode( $sZmd [, $iZoom ] )
; Parameters ....: $sZmd                -  zoom mode
;                   |$PDF_ZOOM_FULLPAGE
;                   |$PDF_ZOOM_FULLWIDTH
;                   |$PDF_ZOOM_REAL
;                   |$PDF_ZOOM_DEFAULT
;                   |$PDF_ZOOM_CUSTOM - in that case put the percentage on $iZoom
;                  $iZoom               - [optional]  integer value.
; Return values .: $_ZoomMode
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetZoomMode($sZmd, $iZoom = 100)
    Switch $sZmd
        Case $PDF_ZOOM_FULLPAGE, $PDF_ZOOM_FULLWIDTH, $PDF_ZOOM_REAL, $PDF_ZOOM_DEFAULT
            $_ZoomMode = $sZmd
        Case $PDF_ZOOM_CUSTOM
            $_ZoomMode = $iZoom
        Case Else
            $_ZoomMode = $PDF_ZOOM_FULLPAGE
    EndSwitch
EndFunc   ;==>_SetZoomMode

; #FUNCTION# ====================================================================================================================
; Name ..........: _StartObject
; Description ...: Initialize an object (e.g. image, header, text...) to be inserted on the pdf.
; Syntax ........: _StartObject( $sAlias [, $Opt ] )
; Parameters ....: $sName               -  string value.
;                  $Opt                 - [optional]  .
;                   |$PDF_OBJECT_FIRSTPAGE
;                   |$PDF_OBJECT_ALLPAGES
;                   |$PDF_OBJECT_EVENPAGES
;                   |$PDF_OBJECT_ODDPAGES
;                   |$PDF_OBJECT_NOTFIRSTPAGE
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......: Always close it with _EndObject()
; Related .......: _EndObject()
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _StartObject($sAlias, $Opt = $PDF_OBJECT_NONE)
    Local $i = __InitObj()
    __ToBuffer("<< /Type /XObject /Subtype /Form /FormType 1 /Name /" & $sAlias & " /BBox [" & __ToStr($__SetMargin) & " " & __ToStr($__SetMargin) & " " & __ToStr($_PageWidth - $__SetMargin) & " " & __ToStr($_PageHeight - $__SetMargin) & "] /Matrix [1 0 0 1 0 0] /Length " & $i + 1 & " 0 R >>" & @CRLF & _
            "stream")
    $_iTmpOffset = $_Offset
    $_sObject = $_sObject & "/" & $sAlias & " " & $i & " 0 R " & @CRLF
    $_iObject = $_iObject + 1
    ReDim $aOBJECTS[$_iObject]
    For $_iObject In $aOBJECTS
        $PDF_OBJECT_NAME = $sAlias
        $PDF_OBJECT_OPTIONS = $Opt
    Next
EndFunc   ;==>_StartObject

; #FUNCTION# ====================================================================================================================
; Name ..........: _DrawArc
; Description ...: Draw arc
; Syntax ........: _DrawArc( $iX , $iY , $iRadius [, $iStartAngle [, $iEndAngle [, $iRatio [, $bPie [, $iRotate [, $iQuality [,
;                  $sOptions = $PDF_STYLE_STROKED ]]]]]]] )
; Parameters ....: $iX                  -  integer value.
;                  $iY                  -  integer value.
;                  $iRadius             -  integer value.
;                  $iStartAngle         - [optional]  integer value.
;                  $iEndAngle           - [optional]  integer value.
;                  $iRatio              - [optional]  integer value.
;                  $bPie                - [optional]  bool value.
;                  $iRotate             - [optional]  integer value.
;                  $iQuality            - [optional]  integer value.
;                  $sOptions            - [optional]  string value.
;                  $PDF_STYLE_STROKED   -  unknown value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _DrawArc($iX, $iY, $iRadius, $iStartAngle = 0, $iEndAngle = 360, $iRatio = 1, $bPie = False, $iRotate = 0, $iQuality = 1, $sOptions = $PDF_STYLE_STROKED)
    Local $i
    Local $rad
    Local $PI
    Local $sTeta
    Local $cTeta
    Local $C
    Local $iX1, $iX2
    Local $iY1, $iY2
    __ToBuffer("n")
    _MoveTo($iX, $iY)
    If ($sOptions And $PDF_STYLE_FILLED) <> 0 Then $bPie = True
    $PI = 3.141592
    $C = $PI / 180
    $sTeta = Sin(-$C * $iRotate)
    $cTeta = Cos(-$C * $iRotate)
    For $i = $iStartAngle To $iEndAngle Step $iQuality
        $rad = $C * $i
        $iX2 = $iRadius * Cos($rad)
        $iY2 = ($iRadius * $iRatio) * Sin($rad)
        $iX1 = $iX2 * $cTeta + $iY2 * $sTeta
        $iY1 = -$iX2 * $sTeta + $iY2 * $cTeta
        If ($i = $iStartAngle) And (Not $bPie) Then _MoveTo($iX + $iX1, $iY + $iY1)
        _LineTo($iX + $iX1, $iY + $iY1, $PDF_STYLE_NONE)
    Next
    If $bPie Then _LineTo($iX, $iY, $PDF_STYLE_NONE)
    _Path($sOptions)
EndFunc   ;==>_DrawArc

; ===============================================================================================================================
; ===============================================================================================================================
; ===============================================================================================================================
Func __Curve($iX1, $iY1, $iX2, $iY2, $iX3, $iY3, $sOptions = $PDF_STYLE_STROKED)
    __ToBuffer(__ToStr(__ToSpace($iX1)) & " " & __ToStr(__ToSpace($iY1)) & " " & __ToStr(__ToSpace($iX2)) & " " & __ToStr(__ToSpace($iY2)) & " " & __ToStr(__ToSpace($iX3)) & " " & __ToStr(__ToSpace($iY3)) & " c")
    _Path($sOptions)
EndFunc   ;==>__Curve

; #FUNCTION# ====================================================================================================================
; Name ..........: _MoveTo
; Description ...: Begin new subpath
; Syntax ........: _MoveTo( $x , $y  )
; Parameters ....: $x                   -  unknown value.
;                  $y                   -  unknown value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _MoveTo($x, $y)
    __ToBuffer(__ToStr(__ToSpace($x)) & " " & __ToStr(__ToSpace($y)) & " m")
EndFunc   ;==>_MoveTo

; #FUNCTION# ====================================================================================================================
; Name ..........: _Pages
; Description ...: Return number of pages
; Syntax ........: _Pages(  )
; Parameters ....: None
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _Pages()
    Return $_Pages
EndFunc   ;==>_Pages

; #FUNCTION# ====================================================================================================================
; Name ..........: _Path
; Description ...: Paths define shapes, trajectories, and regions of all sorts. They are used to draw
;                   lines, define the shapes of filled areas, and specify boundaries for clipping other
;                   graphics.
; Syntax ........: _Path( [ $sStyle = $PDF_STYLE_NONE ] )
; Parameters ....: $sStyle              - [optional]  string value.
;                  |See the $PDF_STYLE_~ constants
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _Path($sStyle = $PDF_STYLE_NONE)
    If ($sStyle And ($PDF_STYLE_FILLED Or $PDF_STYLE_STROKED Or $PDF_STYLE_CLOSED)) = ($PDF_STYLE_FILLED Or $PDF_STYLE_STROKED Or $PDF_STYLE_CLOSED) Then
        __ToBuffer("b")
    ElseIf ($sStyle And ($PDF_STYLE_FILLED Or $PDF_STYLE_STROKED)) = ($PDF_STYLE_FILLED Or $PDF_STYLE_STROKED) Then
        __ToBuffer("B")
    ElseIf ($sStyle And $PDF_STYLE_FILLED) = $PDF_STYLE_FILLED Then
        __ToBuffer("f")
    Else
        If ($sStyle And $PDF_STYLE_CLOSED) <> 0 Then __ToBuffer("h")
        If ($sStyle And $PDF_STYLE_STROKED) <> 0 Then __ToBuffer("S")
    EndIf
EndFunc   ;==>_Path

; #FUNCTION# ====================================================================================================================
; Name ..........: _SetLineWidth
; Description ...: Set the line width
; Syntax ........: _SetLineWidth( $iW  )
; Parameters ....: $iW                   -  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........: http://www.autoitscript.com/forum/topic/118827-create-pdf-from-your-application/
; Example .......: No
; ===============================================================================================================================
Func _SetLineWidth($iW)
    __ToBuffer(__ToStr(__ToSpace($iW)) & " w")
EndFunc   ;==>_SetLineWidth
#region FUNCTIONS
#region #INTERNAL_USE_ONLY#
; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __DrawObject
; Description ...:
; Syntax ........: __DrawObject( $sName  )
; Parameters ....: $sName               -  string value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __DrawObject($sName)
    If $sName<>"" Then __ToBuffer("/" & $sName & " Do")
EndFunc   ;==>__DrawObject

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __EndObj
; Description ...:
; Syntax ........: __EndObj(  )
; Parameters ....:
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __EndObj()
    $_Buffer &= "endobj" & @CRLF
EndFunc   ;==>__EndObj

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __Error
; Description ...:
; Syntax ........: __Error( $sErr , $iLne  )
; Parameters ....: $sErr                -  string value.
;                  $iLne                -  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __Error($sErr, $iLne)
    MsgBox(16, "PDF Error", "You have an error on line " & $iLne & "." & @CRLF & "Reason: " & $sErr & @CRLF & "Press OK to exit.")
    Exit
EndFunc   ;==>__Error

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __FontArial
; Description ...:
; Syntax ........: __FontArial( [ $Style , $PDF_FONT_NORMAL ] )
; Parameters ....: $Style               - [optional]  unknown value.
;                  $PDF_FONT_NORMAL     -  unknown value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __FontArial($Style = $PDF_FONT_NORMAL)
    $BaseFont = "Arial"
    $FirstChar = 32
    $LastChar = 255
    $MissingWidth = 272
    Local $aTemp[$LastChar - $FirstChar]; + 1]
    Switch $Style
        Case $PDF_FONT_NORMAL
            $aTemp = StringSplit("278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, " & _
            "556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, " & _
            "556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, " & _
            "556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, " & _
            "260, 334, 584, 750, 556, 750, 222, 556, 333, 1000, 556, 556, 333, 1000, 667, 333, 1000, 750, 611, 750, 750, 222, 222, 333, " & _
            "333, 350, 556, 1000, 333, 1000, 500, 333, 944, 750, 500, 667, 278, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, " & _
            "333, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, " & _
            "1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, " & _
            "611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, " & _
            "611, 556, 556, 556, 556, 500, 556, 500", ", ", 3)
            $Param = "/Flags 32 /FontBBox [-250 -221 1190 1000] " & _
                    "/MissingWidth 272 /StemV 80 " & _
                    "/StemH 80 /ItalicAngle 0 /CapHeight 905 /XHeight 453 " & _
                    "/Ascent 905 /Descent -212 /Leading 150 " & _
                    "/MaxWidth 992 /AvgWidth 441"
        Case $PDF_FONT_BOLD
            $BaseFont = $BaseFont & ",Bold"
            $aTemp = StringSplit("278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, " & _
            "556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, " & _
            "722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, " & _
            "611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 750, " & _
            "556, 750, 278, 556, 500, 1000, 556, 556, 333, 1000, 667, 333, 1000, 750, 611, 750, 750, 278, 278, 500, 500, 350, 556, 1000, 333, " & _
            "1000, 556, 333, 944, 750, 500, 667, 278, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 333, 737, 552, 400, 549, 333, " & _
            "333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, " & _
            "278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, " & _
            "556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556", ", ", 3)
            $Param = "/Flags 16416 /FontBBox [-250 -212 1120 1000] " & _
                    "/MissingWidth 311 /StemV 153 " & _
                    "/StemH 153 /ItalicAngle 0 /CapHeight 905 /XHeight 453 " & _
                    "/Ascent 905 /Descent -212 /Leading 150 " & _
                    "/MaxWidth 933 /AvgWidth 479"
            $MissingWidth = 311
        Case $PDF_FONT_ITALIC
            $BaseFont = $BaseFont & ",Italic"
            $aTemp = StringSplit("278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, " & _
            "556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, " & _
            "722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, " & _
            "556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 750, 556, 750, 222, 556, 333, 1000, 556, 556, 333, 1000, " & _
            "667, 333, 1000, 750, 611, 750, 750, 222, 222, 333, 333, 350, 556, 1000, 333, 1000, 500, 333, 944, 750, 500, 667, 278, 333, 556, 556, 556, 556, " & _
            "260, 556, 333, 737, 370, 556, 584, 333, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, " & _
            "667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, " & _
            "556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, 611, 556, 556, 556, 556, " & _
            "500, 556, 500", ", ", 3)
            $Param = "/Flags 96 /FontBBox [-250 -212 1134 1000] " & _
                    "/MissingWidth 259 /StemV 80 " & _
                    "/StemH 80 /ItalicAngle -11 /CapHeight 905 /XHeight 453 " & _
                    "/Ascent 905 /Descent -212 /Leading 150 " & _
                    "/MaxWidth 945 /AvgWidth 441"
            $MissingWidth = 259
        Case $PDF_FONT_BOLDITALIC
            $BaseFont = $BaseFont & ",BoldItalic"
            $aTemp = StringSplit("278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, " & _
            "556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, " & _
            "667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, " & _
            "556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 750, 556, 750, 278, 556, 500, 1000, 556, 556, 333, 1000, 667, 333, 1000, 750, 611, 750, " & _
            "750, 278, 278, 500, 500, 350, 556, 1000, 333, 1000, 556, 333, 944, 750, 500, 667, 278, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, " & _
            "333, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, " & _
            "667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, " & _
            "556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556", ", ", 3)
            $Param = "/Flags 16480 /FontBBox [-250 -212 1120 1000] " & _
                    "/MissingWidth 311 /StemV 153 " & _
                    "/StemH 153 /ItalicAngle -11 /CapHeight 905 /XHeight 453 " & _
                    "/Ascent 905 /Descent -212 /Leading 150 " & _
                    "/MaxWidth 933 /AvgWidth 479"
            $MissingWidth = 311
    EndSwitch
    For $i = $FirstChar To $LastChar
        $Widths[$i] = $aTemp[$i - $FirstChar]
    Next
    Local $aRetTmp[6] = [$BaseFont, $FirstChar, $LastChar, $Param, $Widths, $MissingWidth]
    Return $aRetTmp
EndFunc   ;==>__FontArial

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __FontCalibri
; Description ...:
; Syntax ........: __FontCalibri( [ $Style , $PDF_FONT_NORMAL ] )
; Parameters ....: $Style               - [optional]  unknown value.
;                  $PDF_FONT_NORMAL     -  unknown value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __FontCalibri($Style = $PDF_FONT_NORMAL)
    $BaseFont = "Calibri"
    $FirstChar = 32
    $LastChar = 255
    $MissingWidth = 333
    Local $aTemp[$LastChar - $FirstChar]; + 1]
    Switch $Style
        Case $PDF_FONT_NORMAL
            $aTemp = StringSplit("226, 326, 401, 498, 507, 715, 682, 221, 303, 303, 498, 498, 250, 306, 252, 386, 507, 507, 507, 507, 507, 507, 507, 507, " & _
            "507, 507, 268, 268, 498, 498, 498, 463, 894, 579, 544, 533, 615, 488, 459, 631, 623, 252, 319, 520, 420, 855, 646, 662, 517, 673, 543, 459, " & _
            "487, 642, 567, 890, 519, 487, 468, 307, 386, 307, 498, 498, 291, 479, 525, 423, 525, 498, 305, 471, 525, 230, 239, 455, 230, 799, 525, 527, " & _
            "525, 525, 349, 391, 335, 525, 452, 715, 433, 453, 395, 314, 460, 314, 498, 507, 507, 507, 250, 305, 418, 690, 498, 498, 395, 1038, 459, 339, " & _
            "867, 507, 507, 507, 507, 250, 250, 418, 418, 498, 498, 905, 450, 705, 391, 339, 850, 507, 507, 487, 226, 326, 498, 507, 498, 507, 498, 498, " & _
            "393, 834, 402, 512, 498, 306, 507, 394, 339, 498, 336, 334, 292, 550, 586, 252, 307, 246, 422, 512, 636, 671, 675, 463, 579, 579, 579, 579, " & _
            "579, 579, 763, 533, 488, 488, 488, 488, 252, 252, 252, 252, 631, 646, 662, 662, 662, 662, 662, 498, 664, 642, 642, 642, 642, 252, 459, 527, " & _
            "479, 479, 479, 479, 479, 479, 773, 423, 498, 498, 498, 498, 230, 230, 230, 230, 471, 525, 527, 527, 527, 527, 527, 498, 529, 525, 525, 525, " & _
            "525, 230, 391, 453", ", ", 3)
            $Param = "/Flags 32/FontBBox[ -503 -307 1240 964] " & _
                    "/MissingWidth 333/StemV 80/StemH 80/ItalicAngle 0/CapHeight 500" & _
                    "/Ascent 964/Descent -307/MaxWidth 1000/AvgWidth 401"
        Case $PDF_FONT_BOLD
            $BaseFont = $BaseFont & ",Bold"
            $aTemp = StringSplit("226, 326, 401, 498, 507, 715, 682, 221, 303, 303, 498, 498, 250, 306, 252, 386, 507, 507, 507, 507, 507, 507, 507, 507, " & _
            "507, 507, 268, 268, 498, 498, 498, 463, 894, 579, 544, 533, 615, 488, 459, 631, 623, 252, 319, 520, 420, 855, 646, 662, 517, 673, 543, 459, " & _
            "487, 642, 567, 890, 519, 487, 468, 307, 386, 307, 498, 498, 291, 479, 525, 423, 525, 498, 305, 471, 525, 230, 239, 455, 230, 799, 525, 527, " & _
            "525, 525, 349, 391, 335, 525, 452, 715, 433, 453, 395, 314, 460, 314, 498, 507, 507, 507, 250, 305, 418, 690, 498, 498, 395, 1038, 459, 339, " & _
            "867, 507, 507, 507, 507, 250, 250, 418, 418, 498, 498, 905, 450, 705, 391, 339, 850, 507, 507, 487, 226, 326, 498, 507, 498, 507, 498, 498, " & _
            "393, 834, 402, 512, 498, 306, 507, 394, 339, 498, 336, 334, 292, 550, 586, 252, 307, 246, 422, 512, 636, 671, 675, 463, 579, 579, 579, 579, " & _
            "579, 579, 763, 533, 488, 488, 488, 488, 252, 252, 252, 252, 631, 646, 662, 662, 662, 662, 662, 498, 664, 642, 642, 642, 642, 252, 459, 527, " & _
            "479, 479, 479, 479, 479, 479, 773, 423, 498, 498, 498, 498, 230, 230, 230, 230, 471, 525, 527, 527, 527, 527, 527, 498, 529, 525, 525, 525, " & _
            "525, 230, 391, 453", ", ", 3)
            $Param = "/Flags 16418/FontBBox[ -503 -307 1240 964] " & _
                    "/MissingWidth 333/StemV 136/StemH 136/ItalicAngle 0/CapHeight 891" & _
                    "/Ascent 964/Descent -307/Leading 149/MaxWidth 1001/AvgWidth 401"
        Case $PDF_FONT_ITALIC
            $BaseFont = $BaseFont & ",Italic"
            $aTemp = StringSplit("226, 326, 401, 498, 507, 715, 682, 221, 303, 303, 498, 498, 250, 306, 252, 386, 507, 507, 507, 507, 507, 507, 507, 507, " & _
            "507, 507, 268, 268, 498, 498, 498, 463, 894, 579, 544, 533, 615, 488, 459, 631, 623, 252, 319, 520, 420, 855, 646, 662, 517, 673, 543, 459, " & _
            "487, 642, 567, 890, 519, 487, 468, 307, 386, 307, 498, 498, 291, 479, 525, 423, 525, 498, 305, 471, 525, 230, 239, 455, 230, 799, 525, 527, " & _
            "525, 525, 349, 391, 335, 525, 452, 715, 433, 453, 395, 314, 460, 314, 498, 507, 507, 507, 250, 305, 418, 690, 498, 498, 395, 1038, 459, 339, " & _
            "867, 507, 507, 507, 507, 250, 250, 418, 418, 498, 498, 905, 450, 705, 391, 339, 850, 507, 507, 487, 226, 326, 498, 507, 498, 507, 498, 498, " & _
            "393, 834, 402, 512, 498, 306, 507, 394, 339, 498, 336, 334, 292, 550, 586, 252, 307, 246, 422, 512, 636, 671, 675, 463, 579, 579, 579, 579, " & _
            "579, 579, 763, 533, 488, 488, 488, 488, 252, 252, 252, 252, 631, 646, 662, 662, 662, 662, 662, 498, 664, 642, 642, 642, 642, 252, 459, 527, " & _
            "479, 479, 479, 479, 479, 479, 773, 423, 498, 498, 498, 498, 230, 230, 230, 230, 471, 525, 527, 527, 527, 527, 527, 498, 529, 525, 525, 525, " & _
            "525, 230, 391, 453", ", ", 3)
            $Param = "/Flags 98 /FontBBox[ -503 -307 1240 964] " & _
                    "/MissingWidth 333/StemV 73/StemH 73/ItalicAngle -11/CapHeight 891" & _
                    "/Ascent 964/Descent -307/Leading 149/MaxWidth 1000/AvgWidth 402"
        Case $PDF_FONT_BOLDITALIC
            $BaseFont = $BaseFont & ",BoldItalic"
            $aTemp = StringSplit("226, 326, 401, 498, 507, 715, 682, 221, 303, 303, 498, 498, 250, 306, 252, 386, 507, 507, 507, 507, 507, 507, 507, 507, " & _
            "507, 507, 268, 268, 498, 498, 498, 463, 894, 579, 544, 533, 615, 488, 459, 631, 623, 252, 319, 520, 420, 855, 646, 662, 517, 673, 543, 459, " & _
            "487, 642, 567, 890, 519, 487, 468, 307, 386, 307, 498, 498, 291, 479, 525, 423, 525, 498, 305, 471, 525, 230, 239, 455, 230, 799, 525, 527, " & _
            "525, 525, 349, 391, 335, 525, 452, 715, 433, 453, 395, 314, 460, 314, 498, 507, 507, 507, 250, 305, 418, 690, 498, 498, 395, 1038, 459, 339, " & _
            "867, 507, 507, 507, 507, 250, 250, 418, 418, 498, 498, 905, 450, 705, 391, 339, 850, 507, 507, 487, 226, 326, 498, 507, 498, 507, 498, 498, " & _
            "393, 834, 402, 512, 498, 306, 507, 394, 339, 498, 336, 334, 292, 550, 586, 252, 307, 246, 422, 512, 636, 671, 675, 463, 579, 579, 579, 579, " & _
            "579, 579, 763, 533, 488, 488, 488, 488, 252, 252, 252, 252, 631, 646, 662, 662, 662, 662, 662, 498, 664, 642, 642, 642, 642, 252, 459, 527, " & _
            "479, 479, 479, 479, 479, 479, 773, 423, 498, 498, 498, 498, 230, 230, 230, 230, 471, 525, 527, 527, 527, 527, 527, 498, 529, 525, 525, 525, " & _
            "525, 230, 391, 453", ", ", 3)
            $Param = "/Flags 16482 /FontBBox[ -503 -307 1240 964] " & _
                    "/MissingWidth 333 /StemV 131/StemH 131 /ItalicAngle -11 /CapHeight 891 " & _
                    "/Ascent 964 /Descent -307/Leading 149/MaxWidth 1000/AvgWidth 412"
    EndSwitch
    For $i = $FirstChar To $LastChar
        $Widths[$i] = $aTemp[$i - $FirstChar]
    Next
    Local $aRetTmp[6] = [$BaseFont, $FirstChar, $LastChar, $Param, $Widths, $MissingWidth]
    Return $aRetTmp
EndFunc   ;==>__FontCalibri

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __FontGaramond
; Description ...:
; Syntax ........: __FontGaramond( [ $Style , $PDF_FONT_NORMAL ] )
; Parameters ....: $Style               - [optional]  unknown value.
;                  $PDF_FONT_NORMAL     -  unknown value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __FontGaramond($sOptions = $PDF_FONT_NORMAL)
    $BaseFont = "Garamond"
    $FirstChar = 32
    $LastChar = 255
    $MissingWidth = 333
    Local $aTemp[$LastChar - $FirstChar]; + 1]
    Switch $sOptions
        Case $PDF_FONT_NORMAL
            $aTemp = StringSplit("250, 219, 406, 667, 448, 823, 729, 177, 292, 292, 427, 667, 219, 313, 219, 500, 469, 469, 469, 469, 469, 469, 469, 469, 469, " & _
            "469, 219, 219, 667, 667, 667, 365, 917, 677, 615, 635, 771, 656, 563, 771, 760, 354, 333, 740, 573, 833, 771, 781, 563, 771, 625, 479, 615, 708, " & _
            "677, 885, 698, 656, 656, 271, 500, 271, 500, 500, 333, 406, 510, 417, 500, 417, 323, 448, 510, 229, 229, 469, 229, 771, 510, 510, 510, 490, 333, " & _
            "365, 292, 490, 469, 667, 458, 417, 427, 479, 500, 479, 667, 750, 469, 750, 219, 615, 448, 1000, 427, 427, 333, 1021, 479, 198, 938, 750, 750, 750, " & _
            "750, 219, 219, 448, 448, 354, 500, 1000, 333, 979, 365, 198, 698, 750, 750, 656, 250, 219, 417, 573, 677, 656, 500, 427, 333, 760, 260, 365, 667, " & _
            "313, 760, 500, 396, 667, 313, 313, 333, 500, 448, 333, 333, 313, 333, 365, 813, 813, 823, 365, 677, 677, 677, 677, 677, 677, 854, 635, 656, 656, " & _
            "656, 656, 354, 354, 354, 354, 771, 771, 781, 781, 781, 781, 781, 667, 781, 708, 708, 708, 708, 354, 479, 500, 406, 406, 406, 406, 406, 406, 583, " & _
            "417, 417, 417, 417, 417, 229, 229, 229, 229, 448, 510, 510, 510, 510, 510, 510, 549, 510, 490, 490, 490, 490, 229, 365, 417", ", ", 3)
            $Param = "/Flags 34/FontBBox[ -139 -307 1063 986]" & _
                    "/MissingWidth 333/StemV 80" & _
                    "/StemH 80/ItalicAngle 0/CapHeight 500" & _
                    "/Ascent 986/Descent -307" & _
                    "/MaxWidth 1000 /AvgWidth 401"
        Case $PDF_FONT_BOLD
            $BaseFont = $BaseFont & ",Bold"
            $aTemp = StringSplit("250, 219, 406, 667, 448, 823, 729, 177, 292, 292, 427, 667, 219, 313, 219, 500, 469, 469, 469, 469, 469, 469, 469, 469, 469, " & _
            "469, 219, 219, 667, 667, 667, 365, 917, 677, 615, 635, 771, 656, 563, 771, 760, 354, 333, 740, 573, 833, 771, 781, 563, 771, 625, 479, 615, 708, " & _
            "677, 885, 698, 656, 656, 271, 500, 271, 500, 500, 333, 406, 510, 417, 500, 417, 323, 448, 510, 229, 229, 469, 229, 771, 510, 510, 510, 490, 333, " & _
            "365, 292, 490, 469, 667, 458, 417, 427, 479, 500, 479, 667, 750, 469, 750, 219, 615, 448, 1000, 427, 427, 333, 1021, 479, 198, 938, 750, 750, 750, " & _
            "750, 219, 219, 448, 448, 354, 500, 1000, 333, 979, 365, 198, 698, 750, 750, 656, 250, 219, 417, 573, 677, 656, 500, 427, 333, 760, 260, 365, 667, " & _
            "313, 760, 500, 396, 667, 313, 313, 333, 500, 448, 333, 333, 313, 333, 365, 813, 813, 823, 365, 677, 677, 677, 677, 677, 677, 854, 635, 656, 656, " & _
            "656, 656, 354, 354, 354, 354, 771, 771, 781, 781, 781, 781, 781, 667, 781, 708, 708, 708, 708, 354, 479, 500, 406, 406, 406, 406, 406, 406, 583, " & _
            "417, 417, 417, 417, 417, 229, 229, 229, 229, 448, 510, 510, 510, 510, 510, 510, 549, 510, 490, 490, 490, 490, 229, 365, 417", ", ", 3)
            $Param = "/Flags 16418 /FontBBox[ -139 -307 1063 986]" & _
                    "/MissingWidth 333 /StemV 136" & _
                    "/StemH 136/ItalicAngle 0/CapHeight 891" & _
                    "/Ascent 986/Descent -307/Leading 149" & _
                    "/MaxWidth 1001 /AvgWidth 401"
        Case $PDF_FONT_ITALIC
            $BaseFont = $BaseFont & ",Italic"
            $aTemp = StringSplit("250, 219, 406, 667, 448, 823, 729, 177, 292, 292, 427, 667, 219, 313, 219, 500, 469, 469, 469, 469, 469, 469, 469, 469, 469, " & _
            "469, 219, 219, 667, 667, 667, 365, 917, 677, 615, 635, 771, 656, 563, 771, 760, 354, 333, 740, 573, 833, 771, 781, 563, 771, 625, 479, 615, 708, " & _
            "677, 885, 698, 656, 656, 271, 500, 271, 500, 500, 333, 406, 510, 417, 500, 417, 323, 448, 510, 229, 229, 469, 229, 771, 510, 510, 510, 490, 333, " & _
            "365, 292, 490, 469, 667, 458, 417, 427, 479, 500, 479, 667, 750, 469, 750, 219, 615, 448, 1000, 427, 427, 333, 1021, 479, 198, 938, 750, 750, 750, " & _
            "750, 219, 219, 448, 448, 354, 500, 1000, 333, 979, 365, 198, 698, 750, 750, 656, 250, 219, 417, 573, 677, 656, 500, 427, 333, 760, 260, 365, 667, " & _
            "313, 760, 500, 396, 667, 313, 313, 333, 500, 448, 333, 333, 313, 333, 365, 813, 813, 823, 365, 677, 677, 677, 677, 677, 677, 854, 635, 656, 656, " & _
            "656, 656, 354, 354, 354, 354, 771, 771, 781, 781, 781, 781, 781, 667, 781, 708, 708, 708, 708, 354, 479, 500, 406, 406, 406, 406, 406, 406, 583, " & _
            "417, 417, 417, 417, 417, 229, 229, 229, 229, 448, 510, 510, 510, 510, 510, 510, 549, 510, 490, 490, 490, 490, 229, 365, 417", ", ", 3)
            $Param = "/Flags 98/FontBBox[ -139 -307 1063 986] " & _
                    "/MissingWidth 333/StemV 73" & _
                    "/StemH 73/ItalicAngle -11/CapHeight 891" & _
                    "/Ascent 986/Descent -307/Leading 149" & _
                    "/MaxWidth 1000/AvgWidth 402"
        Case $PDF_FONT_BOLDITALIC
            $BaseFont = $BaseFont & ",BoldItalic"
            $aTemp = StringSplit("250, 219, 406, 667, 448, 823, 729, 177, 292, 292, 427, 667, 219, 313, 219, 500, 469, 469, 469, 469, 469, 469, 469, 469, 469, " & _
            "469, 219, 219, 667, 667, 667, 365, 917, 677, 615, 635, 771, 656, 563, 771, 760, 354, 333, 740, 573, 833, 771, 781, 563, 771, 625, 479, 615, 708, " & _
            "677, 885, 698, 656, 656, 271, 500, 271, 500, 500, 333, 406, 510, 417, 500, 417, 323, 448, 510, 229, 229, 469, 229, 771, 510, 510, 510, 490, 333, " & _
            "365, 292, 490, 469, 667, 458, 417, 427, 479, 500, 479, 667, 750, 469, 750, 219, 615, 448, 1000, 427, 427, 333, 1021, 479, 198, 938, 750, 750, 750, " & _
            "750, 219, 219, 448, 448, 354, 500, 1000, 333, 979, 365, 198, 698, 750, 750, 656, 250, 219, 417, 573, 677, 656, 500, 427, 333, 760, 260, 365, 667, " & _
            "313, 760, 500, 396, 667, 313, 313, 333, 500, 448, 333, 333, 313, 333, 365, 813, 813, 823, 365, 677, 677, 677, 677, 677, 677, 854, 635, 656, 656, " & _
            "656, 656, 354, 354, 354, 354, 771, 771, 781, 781, 781, 781, 781, 667, 781, 708, 708, 708, 708, 354, 479, 500, 406, 406, 406, 406, 406, 406, 583, " & _
            "417, 417, 417, 417, 417, 229, 229, 229, 229, 448, 510, 510, 510, 510, 510, 510, 549, 510, 490, 490, 490, 490, 229, 365, 417", ", ", 3)
            $Param = "/Flags 16482/FontBBox[ -139 -307 1063 986]" & _
                    "/MissingWidth 333 /StemV 131" & _
                    "/StemH 131/ItalicAngle -11/CapHeight 891" & _
                    "/Ascent 986/Descent -307/Leading 149" & _
                    "/MaxWidth 1000/AvgWidth 412"
    EndSwitch
    For $i = $FirstChar To $LastChar
        $Widths[$i] = $aTemp[$i - $FirstChar]
    Next
    Local $aRetTmp[6] = [$BaseFont, $FirstChar, $LastChar, $Param, $Widths, $MissingWidth]
    Return $aRetTmp
EndFunc   ;==>__FontGaramond

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __FontCourier
; Description ...:
; Syntax ........: __FontCourier( [ $Style , $PDF_FONT_NORMAL ] )
; Parameters ....: $Style               - [optional]  unknown value.
;                  $PDF_FONT_NORMAL     -  unknown value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __FontCourier($Style = $PDF_FONT_NORMAL)
    $BaseFont = "CourierNew"
    $FirstChar = 32
    $LastChar = 255
    $MissingWidth = 600
    Local $aTemp[$LastChar - $FirstChar]; + 1]
    Switch $Style
        Case $PDF_FONT_NORMAL
            $aTemp = StringSplit("600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600", ", ", 3)
            $Param = "/Flags 34 /FontBBox [-250 -300 720 1000] " & _
                    "/MissingWidth 600 /StemV 109 " & _
                    "/StemH 109 /ItalicAngle 0 /CapHeight 833 /XHeight 417 " & _
                    "/Ascent 833 /Descent -300 /Leading 133 " & _
                    "/MaxWidth 600 /AvgWidth 600"
        Case $PDF_FONT_BOLD
            $BaseFont = $BaseFont & ",Bold"
            $aTemp = StringSplit("600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600", ", ", 3)
            $Param = "/Flags 16418 /FontBBox [-250 -300 720 1000] " & _
                    "/MissingWidth 600 /StemV 191 " & _
                    "/StemH 191 /ItalicAngle 0 /CapHeight 833 /XHeight 417 " & _
                    "/Ascent 833 /Descent -300 /Leading 133 " & _
                    "/MaxWidth 600 /AvgWidth 600"
        Case $PDF_FONT_ITALIC
            $BaseFont = $BaseFont & ",Italic"
            $aTemp = StringSplit("600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600", ", ", 3)
            $Param = "/Flags 98 /FontBBox [-250 -300 720 1000] " & _
                    "/MissingWidth 600 /StemV 109 " & _
                    "/StemH 109 /ItalicAngle -11 /CapHeight 833 /XHeight 417 " & _
                    "/Ascent 833 /Descent -300 /Leading 133 " & _
                    "/MaxWidth 600 /AvgWidth 600"
        Case $PDF_FONT_BOLDITALIC
            $BaseFont = $BaseFont & ",BoldItalic"
            $aTemp = StringSplit("600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600", ", ", 3)
            $Param = "/Flags 16482 /FontBBox [-250 -300 720 1000] " & _
                    "/MissingWidth 600 /StemV 191 " & _
                    "/StemH 191 /ItalicAngle -11 /CapHeight 833 /XHeight 417 " & _
                    "/Ascent 833 /Descent -300 /Leading 133 " & _
                    "/MaxWidth 600 /AvgWidth 600"
    EndSwitch
    For $i = $FirstChar To $LastChar
        $Widths[$i] = $aTemp[$i - $FirstChar]
    Next
    Local $aRetTmp[6] = [$BaseFont, $FirstChar, $LastChar, $Param, $Widths, $MissingWidth]
    Return $aRetTmp
EndFunc   ;==>__FontCourier

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __FontSymbol
; Description ...:
; Syntax ........: __FontSymbol( [ $Style , $PDF_FONT_NORMAL ] )
; Parameters ....: $Style               - [optional]  unknown value.
;                  $PDF_FONT_NORMAL     -  unknown value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __FontSymbol($Style = $PDF_FONT_NORMAL)
    $BaseFont = "Symbol"
    $FirstChar = 30
    $LastChar = 255
    $MissingWidth = 332
    Local $aTemp[$LastChar - $FirstChar + 1]
    Switch $Style
        Case $PDF_FONT_NORMAL
            $aTemp = StringSplit("600, 600, 250, 333, 713, 500, 549, 833, 778, 439, 333, 333, 500, 549, 250, 549, 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, " & _
            "500, 500, 278, 278, 549, 549, 549, 444, 549, 722, 667, 722, 612, 611, 763, 603, 722, 333, 631, 722, 686, 889, 722, 722, 768, 741, 556, 592, 611, 690, " & _
            "439, 768, 645, 795, 611, 333, 863, 333, 658, 500, 500, 631, 549, 549, 494, 439, 521, 411, 603, 329, 603, 549, 549, 576, 521, 549, 549, 521, 549, 603, " & _
            "439, 576, 713, 686, 493, 686, 494, 480, 200, 480, 549, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 620, 247, 549, 167, 713, 500, 753, 753, 753, 753, 1042, 987, 603, 987, 603, " & _
            "400, 549, 411, 549, 549, 713, 494, 460, 549, 549, 549, 549, 1000, 603, 1000, 658, 823, 686, 795, 987, 768, 768, 823, 768, 768, 713, 713, 713, 713, 713, " & _
            "713, 713, 768, 713, 790, 790, 890, 823, 549, 250, 713, 603, 603, 1042, 987, 603, 987, 603, 494, 329, 790, 790, 786, 713, 384, 384, 384, 384, 384, 384, " & _
            "494, 494, 494, 494, 600, 329, 274, 686, 686, 686, 384, 384, 384, 384, 384, 384, 494, 494, 494, 600", ", ", 3)
            $Param = "/Flags 6 /FontBBox [-250 -220 1246 1005] " & _
                    "/MissingWidth 332 /StemV 109 " & _
                    "/StemH 109 /ItalicAngle 0 /CapHeight 1005 /XHeight 503 " & _
                    "/Ascent 1005 /Descent -220 /Leading 225 " & _
                    "/MaxWidth 1038 /AvgWidth 601"
        Case $PDF_FONT_BOLD
            $BaseFont = $BaseFont & ",Bold"
            $aTemp = StringSplit("600, 600, 250, 333, 713, 500, 549, 833, 778, 439, 333, 333, 500, 549, 250, 549, 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, " & _
            "500, 500, 278, 278, 549, 549, 549, 444, 549, 722, 667, 722, 612, 611, 763, 603, 722, 333, 631, 722, 686, 889, 722, 722, 768, 741, 556, 592, 611, 690, " & _
            "439, 768, 645, 795, 611, 333, 863, 333, 658, 500, 500, 631, 549, 549, 494, 439, 521, 411, 603, 329, 603, 549, 549, 576, 521, 549, 549, 521, 549, 603, " & _
            "439, 576, 713, 686, 493, 686, 494, 480, 200, 480, 549, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 620, 247, 549, 167, 713, 500, 753, 753, 753, 753, 1042, 987, 603, 987, 603, " & _
            "400, 549, 411, 549, 549, 713, 494, 460, 549, 549, 549, 549, 1000, 603, 1000, 658, 823, 686, 795, 987, 768, 768, 823, 768, 768, 713, 713, 713, 713, 713, " & _
            "713, 713, 768, 713, 790, 790, 890, 823, 549, 250, 713, 603, 603, 1042, 987, 603, 987, 603, 494, 329, 790, 790, 786, 713, 384, 384, 384, 384, 384, 384, 494, " & _
            "494, 494, 494, 600, 329, 274, 686, 686, 686, 384, 384, 384, 384, 384, 384, 494, 494, 494, 600", ", ", 3)
            $Param = "/Flags 16390 /FontBBox [-250 -220 1246 1005] " & _
                    "/MissingWidth 332 /StemV 191 " & _
                    "/StemH 191 /ItalicAngle 0 /CapHeight 1005 /XHeight 503 " & _
                    "/Ascent 1005 /Descent -220 /Leading 225 " & _
                    "/MaxWidth 1038 /AvgWidth 600"
        Case $PDF_FONT_ITALIC
            $BaseFont = $BaseFont & ",Italic"
            $aTemp = StringSplit("600, 600, 250, 333, 713, 500, 549, 833, 778, 439, 333, 333, 500, 549, 250, 549, 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, " & _
            "500, 278, 278, 549, 549, 549, 444, 549, 722, 667, 722, 612, 611, 763, 603, 722, 333, 631, 722, 686, 889, 722, 722, 768, 741, 556, 592, 611, 690, 439, 768, 645, " & _
            "795, 611, 333, 863, 333, 658, 500, 500, 631, 549, 549, 494, 439, 521, 411, 603, 329, 603, 549, 549, 576, 521, 549, 549, 521, 549, 603, 439, 576, 713, 686, 493, " & _
            "686, 494, 480, 200, 480, 549, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 620, 247, 549, 167, 713, 500, 753, 753, 753, 753, 1042, 987, 603, 987, 603, 400, 549, 411, 549, 549, 713, 494, 460, 549, " & _
            "549, 549, 549, 1000, 603, 1000, 658, 823, 686, 795, 987, 768, 768, 823, 768, 768, 713, 713, 713, 713, 713, 713, 713, 768, 713, 790, 790, 890, 823, 549, 250, 713, " & _
            "603, 603, 1042, 987, 603, 987, 603, 494, 329, 790, 790, 786, 713, 384, 384, 384, 384, 384, 384, 494, 494, 494, 494, 600, 329, 274, 686, 686, 686, 384, " & _
            "384, 384, 384, 384, 384, 494, 494, 494, 600", ", ", 3)
            $Param = "/Flags 70 /FontBBox [-250 -220 1246 1005] " & _
                    "/MissingWidth 332 /StemV 109 " & _
                    "/StemH 109 /ItalicAngle -11 /CapHeight 1005 /XHeight 503 " & _
                    "/Ascent 1005 /Descent -220 /Leading 225 " & _
                    "/MaxWidth 1038 /AvgWidth 600"
        Case $PDF_FONT_BOLDITALIC
            $BaseFont = $BaseFont & ",BoldItalic"
            $aTemp = StringSplit("600, 600, 250, 333, 713, 500, 549, 833, 778, 439, 333, 333, 500, 549, 250, 549, 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, " & _
            "500, 278, 278, 549, 549, 549, 444, 549, 722, 667, 722, 612, 611, 763, 603, 722, 333, 631, 722, 686, 889, 722, 722, 768, 741, 556, 592, 611, 690, 439, 768, 645, " & _
            "795, 611, 333, 863, 333, 658, 500, 500, 631, 549, 549, 494, 439, 521, 411, 603, 329, 603, 549, 549, 576, 521, 549, 549, 521, 549, 603, 439, 576, 713, 686, 493, " & _
            "686, 494, 480, 200, 480, 549, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, 600, " & _
            "600, 600, 600, 600, 600, 600, 600, 600, 620, 247, 549, 167, 713, 500, 753, 753, 753, 753, 1042, 987, 603, 987, 603, 400, 549, 411, 549, 549, 713, 494, 460, 549, " & _
            "549, 549, 549, 1000, 603, 1000, 658, 823, 686, 795, 987, 768, 768, 823, 768, 768, 713, 713, 713, 713, 713, 713, 713, 768, 713, 790, 790, 890, 823, 549, 250, 713, " & _
            "603, 603, 1042, 987, 603, 987, 603, 494, 329, 790, 790, 786, 713, 384, 384, 384, 384, 384, 384, 494, 494, 494, 494, 600, 329, 274, 686, 686, 686, 384, " & _
            "384, 384, 384, 384, 384, 494, 494, 494, 600", ", ", 3)
            $Param = "/Flags 16454 /FontBBox [-250 -220 1246 1005] " & _
                    "/MissingWidth 332 /StemV 191 " & _
                    "/StemH 191 /ItalicAngle -11 /CapHeight 1005 /XHeight 503 " & _
                    "/Ascent 1005 /Descent -220 /Leading 225 " & _
                    "/MaxWidth 1038 /AvgWidth 600"
    EndSwitch
    For $i = $FirstChar To $LastChar
        $Widths[$i] = $aTemp[$i - $FirstChar]
    Next
    Local $aRetTmp[6] = [$BaseFont, $FirstChar, $LastChar, $Param, $Widths, $MissingWidth]
    Return $aRetTmp
EndFunc   ;==>__FontSymbol

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __FontTimes
; Description ...:
; Syntax ........: __FontTimes( [ $Style , $PDF_FONT_NORMAL ] )
; Parameters ....: $Style               - [optional]  unknown value.
;                  $PDF_FONT_NORMAL     -  unknown value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __FontTimes($Style = $PDF_FONT_NORMAL)
    $BaseFont = "TimesNewRoman"
    $FirstChar = 32
    $LastChar = 255
    $MissingWidth = 333
    Local $aTemp[$LastChar - $FirstChar]; + 1]
    Switch $Style
        Case $PDF_FONT_NORMAL
            $aTemp = StringSplit("250, 333, 408, 500, 500, 833, 778, 180, 333, 333, 500, 564, 250, 333, 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 278, " & _
            "278, 564, 564, 564, 444, 921, 722, 667, 667, 722, 611, 556, 722, 722, 333, 389, 722, 611, 889, 722, 722, 556, 722, 667, 556, 611, 722, 722, 944, 722, 722, " & _
            "611, 333, 278, 333, 469, 500, 333, 444, 500, 444, 500, 444, 333, 500, 500, 278, 278, 500, 278, 778, 500, 500, 500, 500, 333, 389, 278, 500, 500, 722, 500, " & _
            "500, 444, 480, 200, 480, 541, 778, 500, 778, 333, 500, 444, 1000, 500, 500, 333, 1000, 556, 333, 889, 778, 611, 778, 778, 333, 333, 444, 444, 350, 500, 1000, " & _
            "333, 980, 389, 333, 722, 778, 444, 722, 250, 333, 500, 500, 500, 500, 200, 500, 333, 760, 276, 500, 564, 333, 760, 500, 400, 549, 300, 300, 333, 576, 453, 250, " & _
            "333, 300, 310, 500, 750, 750, 750, 444, 722, 722, 722, 722, 722, 722, 889, 667, 611, 611, 611, 611, 333, 333, 333, 333, 722, 722, 722, 722, 722, 722, 722, 564, " & _
            "722, 722, 722, 722, 722, 722, 556, 500, 444, 444, 444, 444, 444, 444, 667, 444, 444, 444, 444, 444, 278, 278, 278, 278, 500, 500, 500, 500, 500, 500, 500, 549, " & _
            "500, 500, 500, 500, 500, 500, 500, 500", ", ", 3)
            $Param = "/Flags 34 /FontBBox [-250 -216 1200 1000] " & _
                    "/MissingWidth 333 /StemV 73 " & _
                    "/StemH 73 /ItalicAngle 0 /CapHeight 891 /XHeight 446 " & _
                    "/Ascent 891 /Descent -216 /Leading 149 " & _
                    "/MaxWidth 1000 /AvgWidth 401"
        Case $PDF_FONT_BOLD
            $BaseFont = $BaseFont & ",Bold"
            $aTemp = StringSplit("250, 333, 555, 500, 500, 1000, 833, 278, 333, 333, 500, 570, 250, 333, 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, 570, 570, 570, 500, 930, 722, 667, 722, 722, 667, 611, 778, 778, 389, 500, 778, 667, 944, 722, 778, 611, 778, 722, 556, 667, 722, 722, 1000, 722, 722, 667, 333, 278, 333, 581, 500, 333, 500, 556, 444, 556, 444, 333, 500, 556, 278, 333, 556, 278, 833, 556, 500, 556, 556, 444, 389, 333, 556, 500, 722, 500, 500, 444, 394, 220, 394, 520, 778, 500, 778, 333, 500, 500, 1000, 500, 500, 333, 1000, 556, 333, 1000, 778, 667, 778, 778, 333, 333, 500, 500, 350, 500, 1000, 333, 1000, 389, 333, 722, 778, 444, 722, 250, 333, 500, 500, 500, 500, 220, 500, 333, 747, 300, 500, 570, 333, 747, 500, 400, 549, 300, 300, 333, 576, 540, 250, 333, 300, 330, 500, 750, 750, 750, 500, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 389, 389, 389, 389, 722, 722, 778, 778, 778, 778, 778, 570, 778, 722, 722, 722, 722, 722, 611, 556, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278, 278, 278, 500, 556, 500, 500, 500, 500, 500, 549, 500, 556, 556, 556, 556, 500, 556, 500", ", ", 3)
            $Param = "/Flags 16418 /FontBBox [-250 -216 1201 1000] " & _
                    "/MissingWidth 333 /StemV 136 " & _
                    "/StemH 136 /ItalicAngle 0 /CapHeight 891 /XHeight 446 " & _
                    "/Ascent 891 /Descent -216 /Leading 149 " & _
                    "/MaxWidth 1001 /AvgWidth 401"
        Case $PDF_FONT_ITALIC
            $BaseFont = $BaseFont & ",Italic"
            $aTemp = StringSplit("250, 333, 420, 500, 500, 833, 778, 214, 333, 333, 500, 675, 250, 333, 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, " & _
            "333, 333, 675, 675, 675, 500, 920, 611, 611, 667, 722, 611, 611, 722, 722, 333, 444, 667, 556, 833, 667, 722, 611, 722, 611, 500, 556, 722, 611, 833, 611, " & _
            "556, 556, 389, 278, 389, 422, 500, 333, 500, 500, 444, 500, 444, 278, 500, 500, 278, 278, 444, 278, 722, 500, 500, 500, 500, 389, 389, 278, 500, 444, 667, " & _
            "444, 444, 389, 400, 275, 400, 541, 778, 500, 778, 333, 500, 556, 889, 500, 500, 333, 1000, 500, 333, 944, 778, 556, 778, 778, 333, 333, 556, 556, 350, 500, " & _
            "889, 333, 980, 389, 333, 667, 778, 389, 556, 250, 389, 500, 500, 500, 500, 275, 500, 333, 760, 276, 500, 675, 333, 760, 500, 400, 549, 300, 300, 333, 576, " & _
            "523, 250, 333, 300, 310, 500, 750, 750, 750, 500, 611, 611, 611, 611, 611, 611, 889, 667, 611, 611, 611, 611, 333, 333, 333, 333, 722, 667, 722, 722, 722, 722, " & _
            "722, 675, 722, 722, 722, 722, 722, 556, 611, 500, 500, 500, 500, 500, 500, 500, 667, 444, 444, 444, 444, 444, 278, 278, 278, 278, 500, 500, 500, 500, 500, 500, " & _
            "500, 549, 500, 500, 500, 500, 500, 444, 500, 444", ", ", 3)
            $Param = "/Flags 98 /FontBBox [-250 -216 1200 1000] " & _
                    "/MissingWidth 333 /StemV 73 " & _
                    "/StemH 73 /ItalicAngle -11 /CapHeight 891 /XHeight 446 " & _
                    "/Ascent 891 /Descent -216 /Leading 149 " & _
                    "/MaxWidth 1000 /AvgWidth 402"
        Case $PDF_FONT_BOLDITALIC
            $BaseFont = $BaseFont & ",BoldItalic"
            $aTemp = StringSplit("250, 389, 555, 500, 500, 833, 778, 278, 333, 333, 500, 570, 250, 333, 250, 278, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 333, 333, " & _
            "570, 570, 570, 500, 832, 667, 667, 667, 722, 667, 667, 722, 778, 389, 500, 667, 611, 889, 722, 722, 611, 722, 667, 556, 611, 722, 667, 889, 667, 611, 611, 333, " & _
            "278, 333, 570, 500, 333, 500, 500, 444, 500, 444, 333, 500, 556, 278, 278, 500, 278, 778, 556, 500, 500, 500, 389, 389, 278, 556, 444, 667, 500, 444, 389, 348, " & _
            "220, 348, 570, 778, 500, 778, 333, 500, 500, 1000, 500, 500, 333, 1000, 556, 333, 944, 778, 611, 778, 778, 333, 333, 500, 500, 350, 500, 1000, 333, 1000, 389, " & _
            "333, 722, 778, 389, 611, 250, 389, 500, 500, 500, 500, 220, 500, 333, 747, 266, 500, 606, 333, 747, 500, 400, 549, 300, 300, 333, 576, 500, 250, 333, 300, 300, " & _
            "500, 750, 750, 750, 500, 667, 667, 667, 667, 667, 667, 944, 667, 667, 667, 667, 667, 389, 389, 389, 389, 722, 722, 722, 722, 722, 722, 722, 570, 722, 722, 722, " & _
            "722, 722, 611, 611, 500, 500, 500, 500, 500, 500, 500, 722, 444, 444, 444, 444, 444, 278, 278, 278, 278, 500, 556, 500, 500, 500, 500, 500, 549, 500, 556, 556, " & _
            "556, 556, 444, 500, 444", ", ", 3)
            $Param = "/Flags 16482 /FontBBox [-250 -216 1200 1000] " & _
                    "/MissingWidth 333 /StemV 131 " & _
                    "/StemH 131 /ItalicAngle -11 /CapHeight 891 /XHeight 446 " & _
                    "/Ascent 891 /Descent -216 /Leading 149 " & _
                    "/MaxWidth 1000 /AvgWidth 412"
    EndSwitch
    For $i = $FirstChar To $LastChar
        $Widths[$i] = $aTemp[$i - $FirstChar]
    Next
    Local $aRetTmp[6] = [$BaseFont, $FirstChar, $LastChar, $Param, $Widths, $MissingWidth]
    Return $aRetTmp
EndFunc   ;==>__FontTimes

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __InitObj
; Description ...:
; Syntax ........: __InitObj( [ $iObj ] )
; Parameters ....: $iObj                - [optional]  integer value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __InitObj($iObj = 0)
    If $iObj = 0 Then $iObj = $_iMaxObject + 1
    If $iObj > $_iMaxObject Then $_iMaxObject = $iObj
    ReDim $aXREF[$_iMaxObject + 1]
    $aXREF[$iObj] = StringRight("0000000000" & StringLen($_Buffer)+$_Offset+$iObj+1, 10) & " 00000 n"
    __ToBuffer($iObj & " 0 obj")
    Return $iObj
EndFunc   ;==>__InitObj

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __InsertObjectOnPage
; Description ...:
; Syntax ........: __InsertObjectOnPage(  )
; Parameters ....:
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __InsertObjectOnPage()
    If $_iObject >= 0 Then
        For $_iObject In $aOBJECTS
            If ((($PDF_OBJECT_OPTIONS And $PDF_OBJECT_ALLPAGES) = $PDF_OBJECT_ALLPAGES) Or _
                    ((($PDF_OBJECT_OPTIONS And $PDF_OBJECT_EVENPAGES) <> 0) And (Mod($_Pages, 2) = 0)) Or _
                    ((($PDF_OBJECT_OPTIONS And $PDF_OBJECT_ODDPAGES) <> 0) And (Mod($_Pages, 2) <> 0)) And (Not _
                    ((($PDF_OBJECT_OPTIONS And $PDF_OBJECT_NOTFIRSTPAGE) <> 0) And ($_Pages = 1)))) Then
                __DrawObject($PDF_OBJECT_NAME)
            EndIf
        Next
    EndIf
EndFunc   ;==>__InsertObjectOnPage

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __Test
; Description ...:
; Syntax ........: __Test( $sText  )
; Parameters ....: $sText               -  string value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __Test($sText)
    ConsoleWrite($sText & @CRLF)
EndFunc   ;==>__Test

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __ToBinary
; Description ...:
; Syntax ........: __ToBinary( $sImage  )
; Parameters ....: $sImage              -  string value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __ToBinary($sImage)
    Local $hFile, $Bin
    $hFile = FileOpen($sImage, 16)
    $Bin = FileRead($hFile)
    FileClose($hFile)
    Return BinaryToString($Bin)
EndFunc   ;==>__ToBinary

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __ToBuffer
; Description ...:
; Syntax ........: __ToBuffer( $sT  )
; Parameters ....: $sT                  -  string value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __ToBuffer($sT)
    $_Buffer &= $sT & @CRLF
EndFunc   ;==>__ToBuffer

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __ToPdfStr
; Description ...:
; Syntax ........: __ToPdfStr( $Temp  )
; Parameters ....: $Temp                -  unknown value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __ToPdfStr($Temp)
    Return StringReplace(StringReplace(StringReplace($Temp, "\", "\\"), "(", "\("), ")", "\)")
EndFunc   ;==>__ToPdfStr

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __ToSpace
; Description ...:
; Syntax ........: __ToSpace( $sValue  )
; Parameters ....: $sValue              -  string value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __ToSpace($sValue)
    Local $lRet
    Switch $__SetUnit
        Case $PDF_UNIT_PT
            $lRet = $sValue
        Case $PDF_UNIT_INCH
            $lRet = $sValue * 72
        Case $PDF_UNIT_CM
            $lRet = $sValue * 72 / 2.54
        Case $PDF_UNIT_MM
            $lRet = $sValue * 72 / 25.4
    EndSwitch
    Return $lRet
EndFunc   ;==>__ToSpace

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __ToStr
; Description ...:
; Syntax ........: __ToStr( $sValue [, $Dec ] )
; Parameters ....: $sValue              -  string value.
;                  $Dec                 - [optional]  unknown value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __ToStr($sValue, $Dec = 2)
    Return StringReplace(Round($sValue, $Dec), ",", ".")
EndFunc   ;==>__ToStr

; #INTERNAL_USE_ONLY# ===========================================================================================================
; Name ..........: __ToUser
; Description ...:
; Syntax ........: __ToUser( $sValue  )
; Parameters ....: $sValue              -  string value.
; Return values .: None
; Author(s) .....: Mihai Iancu (taietel at yahoo dot com)
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func __ToUser($sValue)
    Local $lRet
    Switch $__SetUnit
        Case $PDF_UNIT_PT
            $lRet = $sValue
        Case $PDF_UNIT_INCH
            $lRet = $sValue / 72
        Case $PDF_UNIT_CM
            $lRet = ($sValue / 72) * 2.54
        Case $PDF_UNIT_MM
            $lRet = ($sValue / 72) * 25.4
    EndSwitch
    Return $lRet
EndFunc   ;==>__ToUser
#endregion #INTERNAL_USE_ONLY#

; only for use with AutoIt 3.3.12+, in previous versions should be commented
;~ Func _Iif($vExpression, $vTrue, $vFalse)
;~     Return $vExpression ? $vTrue : $vFalse
;~ EndFunc   ;==>_Iif
#include "MPDF_UDF.au3"
_SetTitle("Demo PDF in AutoIt")
_SetSubject("Demo PDF in AutoIt, without any ActiveX or DLL...")
_SetKeywords("pdf, demo, AutoIt")
_OpenAfter(True)
_SetUnit($PDF_UNIT_CM)
_SetPaperSize("A4")
_SetZoomMode($PDF_ZOOM_CUSTOM, 90)
_SetOrientation($PDF_ORIENTATION_PORTRAIT)
_SetLayoutMode($PDF_LAYOUT_CONTINOUS)
_InitPDF(@ScriptDir & "test.pdf")
_LoadFontStandard("_Helv", $PDF_FONT_STD_HELVETICA)
_LoadFontStandard("_Tim", $PDF_FONT_STD_TIMES)
_LoadFontStandard("_Cour", $PDF_FONT_STD_COURIER)
_BeginPage()
_DrawText(2, 22, "Questo e un Test: quanto si utilizza un carattere accentato. e o", "_Helv", 12, $PDF_ALIGN_LEFT)
_DrawText(2, 21, "Questo e un Test: quanto si utilizza un carattere accentato. e o", "_Cour", 12, $PDF_ALIGN_LEFT)
_DrawText(2, 20, "Questo e un Test: quanto si utilizza un carattere accentato. e o", "_Tim", 12, $PDF_ALIGN_LEFT)
_DrawText(2, 19, "Zedna: ěščřžýáíé", "_Tim", 12, $PDF_ALIGN_LEFT)
_EndPage()
_ClosePDFFile()

 

Cripled result in PDF:

Zedna: ìšèøžýáíé

Edited by Zedna
Link to comment
Share on other sites

@Zedna

My fix is for _LoadFontTT not _LoadFontStandard.

 

Try this:

#include "MPDF_UDF.au3"
_SetTitle("Demo PDF in AutoIt")
_SetSubject("Demo PDF in AutoIt, without any ActiveX or DLL...")
_SetKeywords("pdf, demo, AutoIt")
_OpenAfter(True)
_SetUnit($PDF_UNIT_CM)
_SetPaperSize("A4")
_SetZoomMode($PDF_ZOOM_CUSTOM, 90)
_SetOrientation($PDF_ORIENTATION_PORTRAIT)
_SetLayoutMode($PDF_LAYOUT_CONTINOUS)
_InitPDF(@ScriptDir & "\test.pdf")
;~ _LoadFontStandard("_Helv", $PDF_FONT_STD_HELVETICA)
;~ _LoadFontStandard("_Tim", $PDF_FONT_STD_TIMES)
;~ _LoadFontStandard("_Cour", $PDF_FONT_STD_COURIER)
_LoadFontTT("_Helv", $PDF_FONT_STD_HELVETICA)
_LoadFontTT("_Tim", $PDF_FONT_STD_TIMES)
_LoadFontTT("_Cour", $PDF_FONT_STD_COURIER)
_BeginPage()
_DrawText(2, 22, "Questo e un Test: quanto si utilizza un carattere accentato. e o", "_Helv", 12, $PDF_ALIGN_LEFT)
_DrawText(2, 21, "Questo e un Test: quanto si utilizza un carattere accentato. e o", "_Cour", 12, $PDF_ALIGN_LEFT)
_DrawText(2, 20, "Questo e un Test: quanto si utilizza un carattere accentato. e o", "_Tim", 12, $PDF_ALIGN_LEFT)
_DrawText(2, 19, "Zedna: ěščřžýáíé", "_Helv", 12, $PDF_ALIGN_LEFT)
_EndPage()
_ClosePDFFile()

i get output: ešcržýáíé

i dont know if this font has the czech chars.

Link to comment
Share on other sites

  • 4 weeks later...

hi guys ,  i try to used this udf , i  create a  little script for create a pdf  but  , is blank , and when pdf reader open at end of creation , tell me  , the number of page request is not valid or not exist in document

why ? o_O

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <MPDF_UDF.au3>



Opt("GuiOnEventMode", 1)
Opt("GUICloseOnESC", 0)

_TxtPrint()
Func _TxtPrint()

    ;set the properties for the pdf
    _SetTitle("Demo PDF in AutoIt")
    _SetSubject("Demo PDF in AutoIt, without any ActiveX or DLL...")
    _SetKeywords("pdf, demo, AutoIt")
    _OpenAfter(True) ;open after generation
    _SetUnit($PDF_UNIT_CM)
    _SetPaperSize("A4")
    _SetZoomMode($PDF_ZOOM_CUSTOM, 90)
    _SetOrientation($PDF_ORIENTATION_PORTRAIT)
    _SetLayoutMode($PDF_LAYOUT_CONTINOUS)

    ;initialize the pdf
    _InitPDF(@ScriptDir & "\Fattura.pdf")
    ;_LoadFontTT("F1", $PDF_FONT_CALIBRI,$PDF_FONT_ITALIC)
    _LoadFontTT("_Calibri", $PDF_FONT_CALIBRI)

    ;=== create objects that are used in multiple pages ===
    _StartObject("Antet", $PDF_OBJECT_ALLPAGES) ;NOTFIRSTPAGE)
    _SetTextHorizontalScaling(90)
    ;and begin writting some data
    _DrawText(5.2, 27.6, StringUpper("Et adipiscing nec nisi elementum natoque!"), "_Garamond", 14, $PDF_ALIGN_LEFT)
    _DrawText(5.2, 26.9, StringUpper("Dapibus scelerisque vel rhoncus porttitor!"), "_Garamond", 16, $PDF_ALIGN_LEFT)
    _SetTextHorizontalScaling(80)
    _DrawText(5.2, 26.2, "Dapibus scelerisque vel rhoncus porttitor!", "_TimesT", 12, $PDF_ALIGN_LEFT)
    _DrawText(5.2, 25.6, "Rhoncus a vut natoque pellentesque", "_TimesT", 12, $PDF_ALIGN_LEFT)
    _DrawText(5.2, 25, "taietel@yahoo.com" & "; " & "http://autoitscript.com/forum/topic/118827-create-pdf-from-your-application/", "_TimesT", 11, $PDF_ALIGN_LEFT)
    ;get the scalling back to default value
    _SetTextHorizontalScaling(100)
    ;and colour also
    _SetColourFill(0)
    ;that's the end of our header!
    _EndObject()


    _BeginPage()
    ;that's the end of our header!
    _Draw_Rectangle(1, 21, 8, 4, $PDF_STYLE_STROKED, 0, 0xfefefe, 0.01) ; rettangolo di sinistra sede legale
    ;_Draw_Rectangle(7, 25.5, 0, 4, $PDF_STYLE_STROKED, 0, 0xfefefe, 0.01)

    ;write the buffer to disk
    _ClosePDFFile()
EndFunc   ;==>_TxtPrint

while 1 
sleep(100)
wend

 

Edited by faustf
Link to comment
Share on other sites

On 11/15/2019 at 7:07 PM, faustf said:

hi guys ,  i try to used this udf , i  create a  little script for create a pdf  but  , is blank , and when pdf reader open at end of creation , tell me  , the number of page request is not valid or not exist in document

why ? o_O

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <MPDF_UDF.au3>



Opt("GuiOnEventMode", 1)
Opt("GUICloseOnESC", 0)

_TxtPrint()
Func _TxtPrint()

    ;set the properties for the pdf
    _SetTitle("Demo PDF in AutoIt")
    _SetSubject("Demo PDF in AutoIt, without any ActiveX or DLL...")
    _SetKeywords("pdf, demo, AutoIt")
    _OpenAfter(True) ;open after generation
    _SetUnit($PDF_UNIT_CM)
    _SetPaperSize("A4")
    _SetZoomMode($PDF_ZOOM_CUSTOM, 90)
    _SetOrientation($PDF_ORIENTATION_PORTRAIT)
    _SetLayoutMode($PDF_LAYOUT_CONTINOUS)

    ;initialize the pdf
    _InitPDF(@ScriptDir & "\Fattura.pdf")
    ;_LoadFontTT("F1", $PDF_FONT_CALIBRI,$PDF_FONT_ITALIC)
    _LoadFontTT("_Calibri", $PDF_FONT_CALIBRI)

    ;=== create objects that are used in multiple pages ===
    _StartObject("Antet", $PDF_OBJECT_ALLPAGES) ;NOTFIRSTPAGE)
    _SetTextHorizontalScaling(90)
    ;and begin writting some data
    _DrawText(5.2, 27.6, StringUpper("Et adipiscing nec nisi elementum natoque!"), "_Garamond", 14, $PDF_ALIGN_LEFT)
    _DrawText(5.2, 26.9, StringUpper("Dapibus scelerisque vel rhoncus porttitor!"), "_Garamond", 16, $PDF_ALIGN_LEFT)
    _SetTextHorizontalScaling(80)
    _DrawText(5.2, 26.2, "Dapibus scelerisque vel rhoncus porttitor!", "_TimesT", 12, $PDF_ALIGN_LEFT)
    _DrawText(5.2, 25.6, "Rhoncus a vut natoque pellentesque", "_TimesT", 12, $PDF_ALIGN_LEFT)
    _DrawText(5.2, 25, "taietel@yahoo.com" & "; " & "http://autoitscript.com/forum/topic/118827-create-pdf-from-your-application/", "_TimesT", 11, $PDF_ALIGN_LEFT)
    ;get the scalling back to default value
    _SetTextHorizontalScaling(100)
    ;and colour also
    _SetColourFill(0)
    ;that's the end of our header!
    _EndObject()


    _BeginPage()
    ;that's the end of our header!
    _Draw_Rectangle(1, 21, 8, 4, $PDF_STYLE_STROKED, 0, 0xfefefe, 0.01) ; rettangolo di sinistra sede legale
    ;_Draw_Rectangle(7, 25.5, 0, 4, $PDF_STYLE_STROKED, 0, 0xfefefe, 0.01)

    ;write the buffer to disk
    _ClosePDFFile()
EndFunc   ;==>_TxtPrint

while 1 
sleep(100)
wend

 

I don't see any _EndPage()  in your script

Link to comment
Share on other sites

On 11/16/2019 at 9:49 PM, faustf said:

yea  sorry o_O but  also with this continue  to tell me the number of page request is not valid or not exist in document

and  when i close pdf  continue  to ask me  if  i want save pdf  , but is just saved  o_O

 

You have loaded _Calibri font but in your script you are not using it at all. You are using another fonts.

Some pdf readers (I use to use Sumatrapdf) read fine the pdf (it simply doesn't shows the non-loaded fonts based text).

Anothers like Acrobar Reader are more sensitive to this.

 

Quick working script (I don't use to use the Objects function for headers).

#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <MPDF_UDF.au3>



Opt("GuiOnEventMode", 1)
Opt("GUICloseOnESC", 0)

_TxtPrint()
Func _TxtPrint()

    ;set the properties for the pdf
    _SetTitle("Demo PDF in AutoIt")
    _SetSubject("Demo PDF in AutoIt, without any ActiveX or DLL...")
    _SetKeywords("pdf, demo, AutoIt")
    _OpenAfter(True) ;open after generation
    _SetUnit($PDF_UNIT_CM)
    _SetPaperSize("A4")
    _SetZoomMode($PDF_ZOOM_CUSTOM, 90)
    _SetOrientation($PDF_ORIENTATION_PORTRAIT)
    _SetLayoutMode($PDF_LAYOUT_CONTINOUS)

    _InitPDF(@ScriptDir & "\Fattura.pdf")
    _LoadFontTT("_Calibri", $PDF_FONT_CALIBRI)
    _SetColourFill(0x000000)
    _SetColourStrokE(0x000000)

    For $xx = 1 To 12 Step 1
        _BeginPage()

        If $xx = 1 Then
            _Draw_Rectangle(1, 21, 8, 4, $PDF_STYLE_STROKED, 0, 0xfefefe, 0.01) ; rettangolo di sinistra sede legale
            _Draw_Rectangle(7, 25.5, 0, 4, $PDF_STYLE_STROKED, 0, 0xfefefe, 0.01)
            _DrawText(5.2, 22.6, StringUpper("Et adipiscing nec nisi elementum natoque!"), "_Calibri", 14, $PDF_ALIGN_LEFT)
            _DrawText(5.2, 21.9, StringUpper("Dapibus scelerisque vel rhoncus porttitor!"), "_Calibri", 16, $PDF_ALIGN_LEFT)
            _DrawText(5.2, 22.2, "Dapibus scelerisque vel rhoncus porttitor!", "_Calibri", 12, $PDF_ALIGN_LEFT)
            _DrawText(5.2, 21.6, "Rhoncus a vut natoque pellentesque", "_Calibri", 12, $PDF_ALIGN_LEFT)
            _DrawText(5.2, 20, "taietel@yahoo.com" & "; " & "http://autoitscript.com/forum/topic/118827-create-pdf-from-your-application/", "_Calibri", 11, $PDF_ALIGN_LEFT)
        Else
            _Draw_Rectangle(1, 21, 8, 4, $PDF_STYLE_STROKED, 0, 0xfefefe, 0.01) ; rettangolo di sinistra sede legale
            _Draw_Rectangle(7, 25.5, 0, 4, $PDF_STYLE_STROKED, 0, 0xfefefe, 0.01)
            _DrawText(5.2, 22.6, StringUpper("This is page number " & $xx), "_Calibri", 14, $PDF_ALIGN_LEFT)
        EndIf

        _EndPage()
    Next

    _ClosePDFFile()
    Sleep(55)
    Global $_Pages = 0
    $_sPage = ""
    $_sFONT = ""
    $_Image = ""
    $_sObject = ""
    $_iResource = ""
    $_Buffer = ""
EndFunc   ;==>_TxtPrint

Greets from Barcelona

Edited by Qwerty212
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...