Jump to content

pdf file - write on fly


roby
 Share

Recommended Posts

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

Link to comment
Share on other sites

@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

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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...