Jump to content

Recommended Posts

Posted

Hello,

I must write a script (autoit) to generate by program a pdf file, without dll or other...

Fpdf class, for php, is an example of my idea.

Has Smbody any example?

Thank you

Roby

Posted

Hello,

I must write a script (autoit) to generate by program a pdf file, without dll or other...

Fpdf class, for php, is an example of my idea.

Has Smbody any example?

Thank you

Roby

Someone published a _StringToPdf UDF.

Also if it's very simple, maybe a good startup.

You may search for it.

HTH, Reinhard

Posted

Someone published a _StringToPdf UDF.

Also if it's very simple, maybe a good startup.

You may search for it.

HTH, Reinhard

thank you, I see it..

Posted (edited)

ok... but I don't find the technical reference of PDF file.

Where I find it?

Thank you

Edited by roby
Posted

@all

Maybe this can get you started

#include <GUIConstants.au3>

GUICreate("PDF-Creator",500,520)
GUICtrlCreateGroup("Seitenformat",10,30,170,70)
GUICtrlCreateGroup("Rand (mm)",190,30,105,70)
GUICtrlCreateGroup("Schriftformat",315,30,175,70)
GUICtrlCreateRadio("Querformat",20,70)
GUICtrlCreateLabel("Autor:",10,475,100,20)
GUICtrlCreateLabel("Titel:",120,475,100,20)
GUICtrlCreateLabel("links:",200,50,30,20)
GUICtrlCreateLabel("oben:",200,75,30,20)

$Start    =    GUICtrlCreateButton("erzeuge PDF",370,480,120,30)
                    GUICtrlSetFont(-1,11,600)
$Autor    =    GUICtrlCreateInput("",10,490,100,20)
$Titel    =    GUICtrlCreateInput("",120,490,100,20)
$Text       =     GUICtrlCreateEdit("Bitte geben sie hier Ihren Text ein.",10,120,480,345) 
$Schrift       =  GUICtrlCreateCombo("8",325,48,45,20)
                    GUICtrlSetData(-1,"9|10|11|12|14|16|18|20|22|24|26|28|36|48|72","12")
$Schriftart     =   GUICtrlCreateCombo("Times-Roman",380,48,100,20)
                    GUICtrlSetData(-1,"Helvetica|Courier","Times-Roman")
$Size        =     GUICtrlCreateCombo("A4",110,60,50,20)
                    GUICtrlSetData(-1,"A3","A4")
$Format         =   GUICtrlCreateRadio("Hochformat",20,50)
                    GUICtrlSetState(-1,$GUI_CHECKED)
$Rand_y         =   GUICtrlCreateInput("24",240,48,45,20)
                    GUICtrlCreateUpdown(-1)
                    GUICtrlSetLimit(-1,999,0)
$Rand_x         =   GUICtrlCreateInput("25",240,72,45,20)
                    GUICtrlCreateUpdown(-1)
                    GUICtrlSetLimit(-1,999,0)
$Fett       =     GUICtrlCreateCheckbox("Fett",325,73,35,20)
$Kursiv         =   GUICtrlCreateCheckbox("Kursiv",370,73,60,20)

GUISetState ()
While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then Exit
    If $msg = $Start Then ExitLoop
WEnd
    
$Pfad       =     FileSaveDialog("Speichern",@DesktopDir,"PDF (*.pdf)",16)
If StringRight($Pfad,4) = ".pdf" Then
Else
    $Pfad = $Pfad & ".pdf"
EndIf

$Fett       =     GUICtrlRead($Fett)
$Kursiv         =   GUICtrlRead($Kursiv)
$Schriftart     =   GUICtrlRead($Schriftart)
$Rand_x         =   GUICtrlRead($Rand_x)
$Rand_y         =   GUICtrlRead($Rand_y)
$Format         =   GUICtrlRead($Format)
$Autor    =    GUICtrlRead($Autor)
$Titel    =    GUICtrlRead($Titel)
$Size        = GUICtrlRead($Size)
$Text       =     GUICtrlRead($Text)
$Schrift       =  GUICtrlRead($Schrift)
                    FileDelete($Pfad)
$File       =     FileOpen($Pfad, 1)
$Zeilen         =   1

If $Size       = "A4" Then
    $Size_x     = 210
    $Size_y     = 297
ElseIf $Size    = "A3" Then
    $Size_x     = 297
    $Size_y     = 420
EndIf

If $Fett = $GUI_CHECKED Or $Kursiv = $GUI_CHECKED Then
    If $Schriftart = "Times-Roman" Then
        If $Fett = $GUI_CHECKED Then
            $Schriftart = "Times-Bold"
        ElseIf $Kursiv = $GUI_CHECKED Then
            $Schriftart = "Times-Italic"
        EndIf
        If $Fett = $GUI_CHECKED And $Kursiv = $GUI_CHECKED Then $Schriftart =  "Times-BoldItalic"
    ElseIf $Schriftart = "Helvetica" Then
        If $Fett = $GUI_CHECKED Then
            $Schriftart = "Helvetica-Bold"
        ElseIf $Kursiv = $GUI_CHECKED Then
            $Schriftart = "Helvetica-Oblique"
        EndIf
        If $Fett = $GUI_CHECKED And $Kursiv = $GUI_CHECKED Then $Schriftart =  "Helvetica-BoldOblique"
    Else
        If $Fett = $GUI_CHECKED Then
            $Schriftart = "Courier-Bold"
        ElseIf $Kursiv = $GUI_CHECKED Then
            $Schriftart = "Courier-Oblique"
        EndIf
        If $Fett = $GUI_CHECKED And $Kursiv = $GUI_CHECKED Then $Schriftart =  "Courier-BoldOblique"
    EndIf
EndIf

If $Format    = $GUI_UNCHECKED Then
    $Size     = $Size_x
    $Size_x     = $Size_y
    $Size_y     = $Size
EndIf

If $Schrift     = 8 Then
    $Abstand    = 9
ElseIf $Schrift = 9 Then
    $Abstand    = 11
ElseIf $Schrift = 10 Then
    $Abstand    = 12
ElseIf $Schrift = 11 Then
    $Abstand    = 13
ElseIf $Schrift = 12 Then
    $Abstand    = 15
ElseIf $Schrift = 14 Then
    $Abstand    = 17
ElseIf $Schrift = 16 Then
    $Abstand    = 19
ElseIf $Schrift = 18 Then
    $Abstand    = 21
ElseIf $Schrift = 20 Then
    $Abstand    = 24
ElseIf $Schrift = 22 Then
    $Abstand    = 26
ElseIf $Schrift = 24 Then
    $Abstand    = 28
ElseIf $Schrift = 26 Then
    $Abstand    = 30
ElseIf $Schrift = 28 Then
    $Abstand    = 32
ElseIf $Schrift = 36 Then
    $Abstand    = 41
ElseIf $Schrift = 48 Then
    $Abstand    = 55
Else
    $Abstand    = 83
EndIf

If Not StringInStr($Text,@CRLF) = 0 Then
    $Text = StringSplit($Text,@CRLF)
    $Zeilen = $Text[0] / 2 + 1
EndIf

; Umrechnung
$Wert       = 2.834175
$Size_y         = Round($Size_y * $Wert)
$Size_x         = Round($Size_x * $Wert)
$Rand_x         = Round($Rand_x * $Wert)
$Rand_y         = Round($Rand_y * $Wert)

FileWriteLine($File,"%PDF-1.2")
FileWriteLine($File,"%âãÏÓ")

FileWriteLine($File,"1 0 obj")
FileWriteLine($File,"<<")
FileWriteLine($File,"/Author ("&$Autor&")")
FileWriteLine($File,"/CreationDate (D:"&@YEAR&@MON&@MDAY&@HOUR&@MIN&@SEC&")")
FileWriteLine($File,"/Creator (Ahnungslos)")
FileWriteLine($File,"/Producer (Ahnungslos)")
FileWriteLine($File,"/Title ("&$Titel&")")
FileWriteLine($File,">>")
FileWriteLine($File,"endobj")

FileWriteLine($File,"4 0 obj")
FileWriteLine($File,"<<")
FileWriteLine($File,"/Type /Font")
FileWriteLine($File,"/Subtype /Type1")
FileWriteLine($File,"/Name /F1")
FileWriteLine($File,"/Encoding 5 0 R")
FileWriteLine($File,"/BaseFont /"&$Schriftart)
FileWriteLine($File,">>")
FileWriteLine($File,"endobj")

FileWriteLine($File,"5 0 obj")
FileWriteLine($File,"<<")
FileWriteLine($File,"/Type /Encoding")
FileWriteLine($File,"/BaseEncoding /WinAnsiEncoding")
FileWriteLine($File,">>")
FileWriteLine($File,"endobj")

FileWriteLine($File,"6 0 obj")
FileWriteLine($File,"<<")
FileWriteLine($File,"  /Font << /F1 4 0 R >>")
FileWriteLine($File,"  /ProcSet [ /PDF /Text ]")
FileWriteLine($File,">>")
FileWriteLine($File,"endobj")

FileWriteLine($File,"7 0 obj")
FileWriteLine($File,"<<")
FileWriteLine($File,"/Type /Page")
FileWriteLine($File,"/Parent 3 0 R")
FileWriteLine($File,"/Resources 6 0 R")
FileWriteLine($File,"/Contents 8 0 R")
FileWriteLine($File,"/Rotate 0")
FileWriteLine($File,">>")
FileWriteLine($File,"endobj")

FileWriteLine($File,"8 0 obj")
FileWriteLine($File,"<<")
FileWriteLine($File,"/Length 9 0 R")
FileWriteLine($File,">>")
FileWriteLine($File,"stream")
FileWriteLine($File,"BT")
    
If $Zeilen = 1 Then
    FileWriteLine($File,"/F1 "&$Schrift&" Tf")
    FileWriteLine($File,"1 0 0 1 "&$Rand_y&" "&$Size_y - $Rand_x - $Abstand&" Tm")
    FileWriteLine($File,"("&$Text&") Tj")
Else
    For $Counter = 1 To $Zeilen
        FileWriteLine($File,"/F1 "&$Schrift&" Tf")
        FileWriteLine($File,"1 0 0 1 "&$Rand_y&" "&$Size_y - $Rand_x - $Abstand * $Counter&" Tm")
        FileWriteLine($File,"("&$Text[$Counter * 2 - 1]&") Tj")
    Next
EndIf

FileWriteLine($File,"ET")
FileWriteLine($File,"endstream")
FileWriteLine($File,"endobj")

FileWriteLine($File,"9 0 obj")
FileWriteLine($File,"78")
FileWriteLine($File,"endobj")

FileWriteLine($File,"2 0 obj")
FileWriteLine($File,"<<")
FileWriteLine($File,"/Type /Catalog")
FileWriteLine($File,"/Pages 3 0 R")
FileWriteLine($File,">>")
FileWriteLine($File,"endobj")

FileWriteLine($File,"3 0 obj")
FileWriteLine($File,"<<")
FileWriteLine($File,"/Type /Pages")
FileWriteLine($File,"/Count 1")
FileWriteLine($File,"/MediaBox [ 0 0 "&$Size_x&" "&$Size_y&" ]")
FileWriteLine($File,"/Kids [ 7 0 R ]")
FileWriteLine($File,">>")
FileWriteLine($File,"endobj")

FileWriteLine($File,"0 10")
FileWriteLine($File,"0000000000 65535 f ")
FileWriteLine($File,"0000000013 00000 n ")
FileWriteLine($File,"0000000591 00000 n ")
FileWriteLine($File,"0000000634 00000 n ")
FileWriteLine($File,"0000000156 00000 n ")
FileWriteLine($File,"0000000245 00000 n ")
FileWriteLine($File,"0000000307 00000 n ")
FileWriteLine($File,"0000000372 00000 n ")
FileWriteLine($File,"0000000453 00000 n ")
FileWriteLine($File,"0000000576 00000 n ")
FileWriteLine($File,"trailer")
FileWriteLine($File,"<<")
FileWriteLine($File,"/Size 10")
FileWriteLine($File,"/Root 2 0 R")
FileWriteLine($File,"/Info 1 0 R")
FileWriteLine($File,">>")
FileWriteLine($File,"startxref")
FileWriteLine($File,"712")
FileWriteLine($File,"%%EOF")

FileClose($File)

Regards

ptrex

Posted (edited)

Works good.

It never comes me into my mind to try something like that.

To much free PDF Writer on the market.

But I think I can good use it for a small application I just work on.

Thanks

However,

the Acrobat SDK with PDF specification you find at: http://www.adobe.com/devnet/acrobat/

for a quick start the direct link: http://www.adobe.com/devnet/acrobat/pdfs/pdf_reference.pdf

HTH, Reinhard

PS: They complicated it a little bit (15,8MB) compared to "ptrex - definition"

Edited by ReFran
Posted

well, have you a function to draw a line?

I try

...
        FileWriteLine($File, "150 250 m")
        FileWriteLine($File, "150 350 l")
        FileWriteLine($File, "S")
...

but don't work...

Thank you

Posted

well, have you a function to draw a line?

I try

...
        FileWriteLine($File, "150 250 m")
        FileWriteLine($File, "150 350 l")
        FileWriteLine($File, "S")
...

but don't work...

Thank you

As you know - from the 15,8MB PDF-Reference file - a pdf has a well defined structure.

So where in the file did you write?

br, Reinhard

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
×
×
  • Create New...