_StringToPDF()

  • Hab mal das Script von Ahnungslos umgebaut und zu einer UDF
    .Währe schön wenn es mal getestet werden würde :P

    [autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ; Function Name: _StringToPDF()
    ; Description: Create PDF File
    ; Parameter(s): $Text - Text in the PDF (I love Autoit)
    ; $File - Path and Filename of the PDF (c:Test.pdf)
    ; $Size - Papersize A4 or A3
    ; $Rand_x - The spacing to the left and right side, Default 20
    ; $Rand_y - The spacing to the top and buttom, Default 24
    ; $Schriftart - Fonts (Times-Roman, Helvetica and Courier), Default Courier
    ; $Fett - Value if the font is bold, Default 0 (normal)
    ; $Kursiv - Value if the font is italic, Default 0 (normal)
    ; $Schrift - Size of the font, Default 12
    ; $Autor - Name of the autor, Default "unknown"
    ; $Titel - Title of the PDF, Default "MyPDF"
    ;
    ; Author(s): Christian Korittke <[email='Christian_Korittke@web.de'][/email]>
    ; Tamer Hosgör <[email='Tamer@TamTech.info'][/email]>

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _StringToPDF ( $Text, $File, $Size, $Rand_x, $Rand_y, $Schriftart, $Fett, $Kursiv, $Schrift, $Autor, $Titel)

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

    If $Rand_x = "" Then $Rand_x = "20"
    If $Rand_y = "" Then $Rand_y = "24"
    If $Fett = "" Then $Fett = "0"
    If $Kursiv = "" Then $Kursiv = "0"
    If $Schrift = "" Then $Schrift = "12"
    If $Autor = "" Then $Autor = "unknown"
    If $Titel = "" Then $Titel = "My PDF"
    $Zeilen = 1

    If $Fett = 1 Or $Kursiv = 1 Then
    If $Schriftart = "Times-Roman" Then
    If $Fett = 1 Then
    $Schriftart = "Times-Bold"
    ElseIf $Kursiv = 1 Then
    $Schriftart = "Times-Italic"
    EndIf
    If $Fett = 1 And $Kursiv = 1 Then $Schriftart = "Times-BoldItalic"
    ElseIf $Schriftart = "Helvetica" Then
    If $Fett = 1 Then
    $Schriftart = "Helvetica-Bold"
    ElseIf $Kursiv = 1 Then
    $Schriftart = "Helvetica-Oblique"
    EndIf
    If $Fett = 1 And $Kursiv = 1 Then $Schriftart = "Helvetica-BoldOblique"
    Else
    If $Fett = 1 Then
    $Schriftart = "Courier-Bold"
    ElseIf $Kursiv = 1 Then
    $Schriftart = "Courier-Oblique"
    EndIf
    If $Fett = 1 And $Kursiv = 1 Then $Schriftart = "Courier-BoldOblique"
    EndIf
    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
    EndIf

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

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

    [/autoit][autoit][/autoit][autoit]

    ; 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)

    [/autoit][autoit][/autoit][autoit]

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

    [/autoit][autoit][/autoit][autoit]

    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")

    [/autoit][autoit][/autoit][autoit]

    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")

    [/autoit][autoit][/autoit][autoit]

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

    [/autoit][autoit][/autoit][autoit]

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

    [/autoit][autoit][/autoit][autoit]

    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")

    [/autoit][autoit][/autoit][autoit]

    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

    [/autoit][autoit][/autoit][autoit]

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

    [/autoit][autoit][/autoit][autoit]

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

    [/autoit][autoit][/autoit][autoit]

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

    [/autoit][autoit][/autoit][autoit]

    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")

    [/autoit][autoit][/autoit][autoit]

    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")

    [/autoit][autoit][/autoit][autoit]

    FileClose($File)

    [/autoit][autoit][/autoit][autoit]

    EndFunc

    [/autoit]

    2 Mal editiert, zuletzt von Tam0r (5. September 2006 um 20:39)

    • Offizieller Beitrag

    HI,

    oder :

    Spoiler anzeigen
    [autoit]

    ; Function Name: _StringToPDF()
    ; Description: Create PDF File

    [/autoit] [autoit][/autoit] [autoit]

    _StringToPDF("Hello", "c:mega.pdf")

    [/autoit] [autoit][/autoit] [autoit]

    Func _StringToPDF($Text, $File = "MyPDF.pdf", $creator = "Creator", $producer = "Producer", $Size = "A4", $Rand_x = 20, $Rand_y = 24, $Schriftart = "Times-Roman", $Fett = 0, $Kursiv = 0, $Schrift = 12, $Autor = "unknown", $Titel = "Title")
    If $Size = "A4" Then
    $Size_x = 210
    $Size_y = 297
    ElseIf $Size = "A3" Then
    $Size_x = 420
    $Size_y = 297
    EndIf

    $Zeilen = 1
    If $Fett = 1 Or $Kursiv = 1 Then
    If $Schriftart = "Times-Roman" Then
    If $Fett = 1 Then
    $Schriftart = "Times-Bold"
    ElseIf $Kursiv = 1 Then
    $Schriftart = "Times-Italic"
    EndIf
    If $Fett = 1 And $Kursiv = 1 Then $Schriftart = "Times-BoldItalic"
    ElseIf $Schriftart = "Helvetica" Then
    If $Fett = 1 Then
    $Schriftart = "Helvetica-Bold"
    ElseIf $Kursiv = 1 Then
    $Schriftart = "Helvetica-Oblique"
    EndIf
    If $Fett = 1 And $Kursiv = 1 Then $Schriftart = "Helvetica-BoldOblique"
    Else
    If $Fett = 1 Then
    $Schriftart = "Courier-Bold"
    ElseIf $Kursiv = 1 Then
    $Schriftart = "Courier-Oblique"
    EndIf
    If $Fett = 1 And $Kursiv = 1 Then $Schriftart = "Courier-BoldOblique"
    EndIf
    EndIf
    Switch $Schrift
    Case 8
    $Abstand = 9
    Case 9
    $Abstand = 11
    Case 10
    $Abstand = 12
    Case 11
    $Abstand = 13
    Case 12
    $Abstand = 15
    Case 14
    $Abstand = 17
    Case 16
    $Abstand = 19
    Case 18
    $Abstand = 21
    Case 20
    $Abstand = 24
    Case 22
    $Abstand = 26
    Case 24
    $Abstand = 28
    Case 26
    $Abstand = 30
    Case 28
    $Abstand = 32
    Case 36
    $Abstand = 41
    Case 48
    $Abstand = 55
    EndSwitch
    If Not StringInStr($Text, @CRLF) = 0 Then
    $Text = StringSplit($Text, @CRLF)
    $Zeilen = $Text[0] / 21
    EndIf

    Local $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)

    Local $pdf[47] = [ "%PDF-1.2", "%âãÏÓ", "1 0 obj", "<<","/Author (" & $Autor & ")", "/CreationDate (D:" & @YEAR & @MON & @MDAY & @HOUR & @MIN & @SEC & ")", _
    "/Creator (" & $creator & ")","/Producer (" & $producer & ")", "/Title (" & $Titel & ")",">>", _
    "endobj","4 0 obj","<<","/Type /Font", "/Subtype /Type1", "/Name /F1","/Encoding 5 0 R","/BaseFont /" & $Schriftart,">>", _
    "endobj","5 0 obj","<<", "/Type /Encoding", "/BaseEncoding /WinAnsiEncoding",">>","endobj","6 0 obj","<<"," /Font << /F1 4 0 R >>", _
    " /ProcSet [ /PDF /Text ]", ">>","endobj","7 0 obj","<<","/Type /Page","/Parent 3 0 R","/Resources 6 0 R","/Contents 8 0 R", _
    "/Rotate 0", ">>","endobj","8 0 obj","<<","/Length 9 0 R",">>","stream","BT"]

    For $i=0 To UBound($pdf)-1
    FileWriteLine($File, $pdf[$i] & @CRLF)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    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

    Local $pdf1[40] = ["ET","endstream", "endobj","9 0 obj","78","endobj", "2 0 obj", "<<", "/Type /Catalog", "/Pages 3 0 R", ">>", _
    "endobj", "3 0 obj", "<<", "/Type /Pages", "/Count 1", "/MediaBox [ 0 0 " & $Size_x & " " & $Size_y & " ]", "/Kids [ 7 0 R ]", _
    ">>", "endobj", "0 10", "0000000000 65535 f ", "0000000013 00000 n ", "0000000591 00000 n ", "0000000634 00000 n ", "0000000156 00000 n ", _
    "0000000245 00000 n ","0000000307 00000 n ","0000000372 00000 n ", "0000000453 00000 n ", "0000000576 00000 n ", "trailer", _
    "<<", "/Size 10", "/Root 2 0 R", "/Info 1 0 R", ">>", "startxref", "712", "%%EOF"]
    For $i=0 To UBound($pdf1)-1
    FileWriteLine($File, $pdf1[$i] & @CRLF)
    Next
    EndFunc ;==>_StringToPDF

    [/autoit]

    So long,

    Mega

  • @Tam0r Ja es wurde gepostet damit es jeder nutzen kann.

    Leider ist die PDF Vorlage (die Ihr nutzt) fehlerhaft und kann mit Programmen wie Foxit Reader nicht gelesen werden. :weinen:
    Ich habe das mitlerweile behoben.
    Wenn Intresse vorhanden ist, poste ich eine kleine Erklärung.

    Bis jetzt ist möglich:

    - einzelne Zeichen zu Formatieren
    - Linien zeichnen
    - Links einfügen
    - kleine Bilder einfügen (schwer umsetzbar und unkomprimiert)
    - Rechtecke zeichnen

  • Nein ich habe noch nichts umgesetzt.

    Aber hier eine Erklärung zu PDF.
    Bei Unklarheiten steh ich jederzeit zur Verfügung.

    Im Anhang befindet sich eine .PDF und eine .Doc Datei.
    Endung bitte wieder anpassen. Ich hoffe das dadurch nichts verloren ging, aber diese Formate kann man nicht hochladen.