PDF_UDF zum erstellen von PDF-Dateien ?!

  • Würde gerne helfen, hab aber zu wenig Zeit... Und wenn ich dann Zeit hab, sollte ich wohl erst die GDI-UDF weitermachen :rolleyes:

  • Wäre interessiert daran zumal ein Arbeitskollege eine PDF Umsetzung für unser System geschrieben hat. Der ist zwar momentan im Urlaub lässt sich aber bestimmt bei Problemen und Fragen zurate ziehen (spätestens wenn er wieder da ist). Ansonsten erst mal sehen, wie viel Aufwand das ganze machen würde.

  • Ich habe eine VB5 Umsetzung gefunden, die allerdings von 2007 ist.
    http://vb-tec.de/pdf.htm
    Mal sehen was dafür alles nötig ist. Ich habe heute keine Zeit mehr mich darum zu kümmern, werde mir das aber mal genauer anschauen.

  • Ich denke, die C-Deklarationen lassen sich einfacher übersetzen, da AutoIt ja die C-Syntax für die Variablentypen beim DLLCall verwendet.

  • So, erster Versuch ;)

    Folgende Dateien sind enthalten:
    hpdf.pas = Delphi Datei, aus welcher dann die hpdf.au3 generiert wird
    hpdfconstants.au3
    libhpdf.dll
    TestHpdf.au3 = ein kleines Testscript, das am Schluß eine Pdf erstellen soll
    Translate.au3 = Dieses Script übersetzt hpdf.pas (Delphi) nach hpdf.au3


    Translate.au3 ausführen, TestHpdf.au3 ausführen und Test.pdf ansehen (falls alles geklappt hat ^^ )

    Schaut zwar schon mal nicht so schlecht aus, aber die ganzen Funktionen mit den Structs - OJE!!!
    Ob das mal alles funktionieren wird ;(
    Mit dem Errorhandling muß ich mir auch noch was überlegen.

    lgE

  • Eigentlich sollte das gehen!

    Allerdings würde ich mich dann nur auf die wesentlichen Funktionen beschränken
    Leider kenn ich mit Pdf´s zuwenig aus, welche Objekte man nun tatsächlich benötigt -
    Also Textformatierung, Grafische Objekte usw.
    Und welche man vernachlässigen kann...

    Aber toll wärs auf jeden Fall, wenn man das ohne FremdDll erledigen könnte!

    lgE

  • Ich habe auch schon Beispiele gefunden in anderen Sprachen unter anderen auch in C/C++. Um mich da einzulesen braucht das aber Zeit.
    FPDF sieht schonmal gut aus. Vor allem scheint das Skript Lizenzfrei zu sein. PHP lässt sich ähnlich wie bei C gut mit AutoIt umsetzen zumal PHP wirklich gut dokumentiert ist. Wären dann ja nur knappe 1750 Zeilen Code zum übersetzen :)

  • Ich habe mal angefangen die FPDF Klasse zu übersetzen. Die Syntax ist im großen und ganzen portiert nun geht es an die Probleme die OOP in AutoIt umzusetzen.
    Ich habe schon einige Fehler gemacht und nicht darauf geachtet, dass die Membervariablen teilweise die gleichen sind wie in den Methoden Parametern ($this->$n = $n). Suchen und ersetzen ist da eher Suboptimal ;)
    Naja wird schon gehen und mal sehen wie es weitergeht.

  • Es gibt im englischem Forum eine PDF-Creator UDF, leider habe ich den Link nicht mehr, aber die Funktionen in meinem dicken AutoIt-Ordner ;) :

    Spoiler anzeigen
    [autoit]

    #Region PDF-UDF
    ; Convert2PDF script
    ; Part of $PDFCreator
    ; License: GPL
    ; Homepage: http://www.sf.net/projects/pdfcreator
    ; Version: 1.0.0.0
    ; Date: September, 1. 2005
    ; Author: Frank Heindörfer
    ; Comments: This script convert a printable file in a pdf-file using the com interface of $PDFCreator.

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

    ; Translated by ptrex
    Const $maxTime = 30 ; in seconds
    Const $sleepTime = 250 ; in milliseconds

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

    Dim $objArgs, $ifname, $fso, $PDFCreator, $DefaultPrinter, $ReadyState, _
    $i, $c, $AppTitle, $Scriptname, $ScriptBasename

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

    $fso = ObjCreate("Scripting.FileSystemObject")

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

    $Scriptname = $fso.GetFileName(@ScriptFullPath)
    $ScriptBasename = $fso.GetFileName(@ScriptFullPath)

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

    $AppTitle = "PDFCreator - " & $ScriptBasename

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

    $file = InputBox("FileName", "Fill in the Path and filename", "C:\Tmp\Test.xls")

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

    $PDFCreator = ObjCreate("PDFCreator.clsPDFCreator")
    $PDFCreator.cStart("/NoProcessingAtStartup")

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

    With $PDFCreator
    .cOption("UseAutosave") = 1
    .cOption("UseAutosaveDirectory") = 1
    .cOption("AutosaveFormat") = 0 ; 0=PDF, 1=PNG, 2=JPG, 3=BMP, 4=PCX, 5=TIFF, 6=PS, 7= EPS, 8=ASCII
    $DefaultPrinter = .cDefaultprinter
    .cDefaultprinter = "PDFCreator"
    .cClearcache()
    EndWith

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

    ; For $i = 0 to $objArgs.Count - 1
    With $PDFCreator
    $ifname = "C:\Tmp\Test.xls" ;$objArgs($i)
    If Not $fso.FileExists($ifname) Then
    MsgBox(0, "Error", "Can't find the file: " & $ifname & @CR & $AppTitle)
    Exit
    EndIf
    If Not .cIsPrintable(String($ifname)) Then
    ConsoleWrite("Converting: " & $ifname & @CRLF & @CRLF & _
    "An error is occured: File is not printable!" & @CRLF & $AppTitle & @CR)
    EndIf

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

    $ReadyState = 0
    .cOption("AutosaveDirectory") = $fso.GetParentFolderName($ifname)
    .cOption("AutosaveFilename") = $fso.GetBaseName($ifname)
    .cPrintfile(String($ifname))
    .cPrinterStop = 0

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

    $c = 0
    Do
    $c = $c + 1
    Sleep($sleepTime)
    Until ($ReadyState = 0) And ($c < ($maxTime * 1000 / $sleepTime))

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

    If $ReadyState = 0 Then
    ConsoleWrite("Converting: " & $ifname & @CRLF & @CRLF & _
    "An error is occured: File is not printable!" & @CRLF & $AppTitle & @CR)
    Exit
    EndIf
    EndWith
    ;Next

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

    With $PDFCreator
    .cDefaultprinter = $DefaultPrinter
    .cClearcache()
    Sleep(200)
    .cClose()
    EndWith

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

    ;--- $PDFCreator events ---

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

    Func PDFCreator_eReady()
    $ReadyState = 1
    EndFunc ;==>PDFCreator_eReady

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

    Func PDFCreator_eError()
    MsgBox(0, "An error is occured!", "Error [" & $PDFCreator.cErrorDetail("Number") & "]: " & $PDFCreator.cErrorDetail("Description") & @CR)
    EndFunc ;==>PDFCreator_eError
    #EndRegion PDF-UDF

    [/autoit]