Hallo an Alle,
kann mir jemand sagen, ob man mit Autoit, den Inhalt einer Textdatei und eine Grafikdatei(.png) in einer Datei zusammen tragen kann um daraus dann
direkt eine PDF-Datei zu erzeugen?
Mit Autoit eine PDF-Datei erstellen
- hipfzwirgel
- Erledigt
-
-
Hallo hipfzwirgel,
ob das so direkt geht, weiß ich nicht, du willst ja sicher auch ein entsprechendes Layout der späteren pdf haben. Da gibt es sicher spätere weitere Antworten von Forums Mitgliedern.
Was aber geht, wenn du aus deinem Text und dem Bild mit den Funktionen von Word eine entsprechende Layout Datei erstellst und die dann als PDF druckst.
Gruß gmmg
-
Es gibt im Entwickerforum https://www.autoitscript.com/f…e/attachment.php?id=34962 .
-
Hallo autoBert,
vielen lieben Dank für die Infos. Leider funktioniert die UDF nicht:CodeInclude\MPDF_UDF.au3"(251,54) : error: _Iif(): undefined function. _Iif($_sFONT <> "", "/Font<<" & $_sFONT & ">>", "") ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
Das ist die Fehlermeldung aus dem Debugfenster vom SciTE nachdem Drücken von F5. Es wird im SciTE automatisch die udf-Datei geöffnet und der Fehler angezeigt.
Ich habe es auch probiert die UDf in den Includeordner zu speichern = gleiches Fehlerbild. Mache ich da etwas falsch? -
Die Funktion _Iif() ist wohl dort irgendwo verloren gegangen (braucht man inzwischen auch nicht mehr, da es den ternären Operator gibt).
Damit du den Code nicht umschreiben musst, hier die Funktion mal nachgebaut:
-
-
Also folgende von Mihai Iancu funktioniert.
AutoIt
Alles anzeigen#include <TxTtoPDF.au3> Global $txtfilename, $pdffilename ; Assign a Local variable the search handle of all files in the current directory. Local $hSearch = FileFindFirstFile("*.txt") ; Assign a Local variable the empty string which will contain the files names found. Local $sFileName = "", $iResult = 0 While 1 $sFileName = FileFindNextFile($hSearch) ; If there is no more file matching the search. If @error Then ExitLoop $txtfilename = $sFileName $pdffilename = StringTrimRight ($txtfilename, 4) WEnd ; Close the search handle. FileClose($hSearch) ;set the properties for the pdf _SetTitle('') _SetSubject('') _SetKeywords('') _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($pdffilename & '.pdf') _LoadFontTT('F1', $PDF_FONT_CALIBRI,$PDF_FONT_ITALIC) _Txt2PDF($txtfilename, 'F1') ;write the buffer to disk _ClosePDFFile() Sleep(1000) FileDelete($txtfilename) Func _Txt2PDF($sFile, $sFontAlias) Local $hFile = FileOpen($sFile) Local $sText = FileRead($hFile) FileClose($hFile) Local $iUnit = Ceiling(_GetUnit()) Local $iX = 2 Local $iY = Ceiling(_GetPageHeight() / _GetUnit()) - 1.5 Local $iPagina = Ceiling(_GetPageWidth() / $iUnit) - $iX Local $iWidth = Ceiling($iPagina - $iX);, 1) Local $lScale Local $iRanduri = StringSplit($sText & @CRLF & @CRLF & @CRLF & @CRLF, @CRLF, 3) Local $iHR = 0.5 * Ceiling($iY / (10 * $iUnit)) Local $iPages = Ceiling((UBound($iRanduri)) * $iHR / $iY) Local $iNrRanduri = Ceiling(UBound($iRanduri) / $iPages-2) Local $nrp For $j = 0 To $iPages + 2 $nrp = _BeginPage() _DrawText(_GetPageWidth()/_GetUnit()-1, 1, $nrp, 'F1', 10, $PDF_ALIGN_CENTER) For $i = 0 To $iNrRanduri - 1 Local $sLength = Round(_GetTextLength($iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10)) Local $iH = $iY - $iHR * ($i + 1) Select Case $iH < 1 _EndPage() Case $i + $j * $iNrRanduri = UBound($iRanduri) - 1 _EndPage() Return Case $sLength > $iWidth - 1 $lScale = Ceiling($iWidth * 100 / $sLength) _SetTextHorizontalScaling($lScale) _DrawText($iX, $iH, $iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10, $PDF_ALIGN_LEFT, 0) _SetTextHorizontalScaling(100) Case Else _DrawText($iX, $iH, $iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10, $PDF_ALIGN_LEFT, 0) EndSelect Next _EndPage() Next EndFunc ;==>_Txt2PDF
-
@All,
wie im ersten Poist geschriben will er aber doch auch Bilder verarbeitetn. Können denn die Beispiele dies auch?
Gruß gmmg
-
So wie ich das verstehe kann MPDF das.
-
Hallo,
ich empfehle ergänzend zu den vielen guten Beiträgen und Vorschlägen noch das hier
-
Das ist genau die UDF die im Beitrag #3 vorgeschlagen wurde und über die wir die ganze Zeit reden. Nur halt der Link direkt zum Download und nicht zum Thema (thread)
-
....
Ich nutze selbst MIPDF und las von MPDF und von TxTtoPDF. Daher mein Denkfehler. Danke für den Hinweis
-
Ich habe mir angewöhnt, für sowas wkhtmltopdf zu verwenden. Damit kann man aus einer HTML-Datei eine entsprechende PDF-Datei erzeugen. Sämtliche Berichtsaufbereitung bei uns in der Firma funktioniert damit. Der Vorteil ist, dass man super Templates nutzen kann und ansonsten nur ein wenig HTML/CSS beherrschen muss.
-
chesstiger : aus Html PDF zu erzeugen ist mit Sicherheit die schnellere Lösung, aber ginge dies nicht auch mit dem "Microsoft To PDF"-Druckertreiber?
hipfzwirgel : Mit Example_Mixed und Example_Image2PDF sind aber gute Beispiele in der Zipdatei, die zeigen wie es mit AutoIt funktioniert.
-
Hallo!
Es gibt die MPDF_UDF um PDFs mit Text, Bilder und Grafiken zu erstellen. Du kannst auch verschiedene Schriftarten einbinden......
Sollte im englischen Forum zu finden sein....
lg
Racer
-
ist das nicht genau die UDF die im Beitrag #3 vorgeschlagen wurde und über die wir die ganze Zeit reden?
-
Ja, das geht grundsätzlich auch mit dem in Windows 10 integriertem PDF-Drucker.
Man muss dann allerdings erstens ein Programm haben, was das HTML-Dokument an den Druckertreiber weitergibt... Also z.B. IE oder Chrome. Die wiederum müssten dann im Hintergrund entsprechend aufgerufen werden, was mit dem IE noch geht, mit Chrome aber schon eine Gratwanderung wird.
Und zweitens erzeugt der integrierte PDF-Drucker nur ganz primitive PDF-Dokumente, in denen bspw. Text nicht als Text abgelegt ist, sondern als Bitmap. Das führt dazu, dass der Benutzer keine einzelnen Elemente aus dem PDF-Dokument rauskopieren kann. Wir bereiten mit wkhtmltopdf ziemlich viele Listen und Tabellen auf, die wir an unsere Kunden rausschicken. Da soll der Kunde natürlich schon die Möglichkeit haben, auch Preise und Artikelbezeichnungen aus dem Dokument zu kopieren.
Ich habe damals auch viel damit rumexperimentiert, bin dann aber doch bei wkhtmltopdf geblieben, weil es deutlich flexibler ist und auch noch portabel.
Das hier ist zum Beispiel unser Ordersatz: https://3f-berleburg.de/download/Ordersatz.pdf
Diese Datei wurde aus einer primitiven CSV-Datei automatisch mittels eines AutoIt-Skripts und wkhtmltopdf generiert. Besondere "Higlights", die nur mit wkhtmltopdf möglich sind... Das anklickbare Inhaltsverzeichnis mit Sprüngen zu den entsprechenden Abschnitten, die immerwiederkehrende Kopfzeile auf jeder Seite, die _nicht_ Bestandteil der ursprünglichen HTML-Datei ist usw...
Kurzum: Für ganz ganz simple Sachen reicht auch der integrierte PDF-Drucker. Aber für alles weitere ist wkhtmltopdf echt ein super Alleskönner.
-
Ich mache das seit Jahren wie folgt:
Aus Autoit heraus einfache Textdocumente erstellen mit PCL Steuercodes. PCL Steuercodes findet man in jedem Laserdrucker Handbuch. Damit kann mann rechten / linken Rand einstellen, Schriftgröße, Fett, Italic, Laufweite usw. usw. Man muss sich ein wenig einlesen. (PCL Codes ESC Codes oder auch 1B....).
Damit konnte ich alles an Textdateien erstellen was ich, beruflich, benötigte. Und dann ruft man via Autoit (Script), WinPCLtoPDF auf, das findet man hier:
http://www.columbia.edu/~em36/pcltopdf.html
das erzeugt dann aus der PCL Datei ein fertiges PDF. Sofern man noch Bilder in Form von Logos (Firmenlogo, in immer gleicher Weise) benötigt, fertigt man sich einmalig eine PDF Vorlage und "stempelt" diese mit der Freeware command line Version von z.B. pdftk darüber. Klingt kompliziert - ist es aber nicht, wenn man sich damit ein wenig beschäftigt. Gleiches würde mit Bildern funktionieren.
Selbstverständlich funktioniert das mit PCLtoPDF auch ohne PCL Codes. Dann eben recht unformatiert. Bemerkung am Rande PCltoPDF scheint in Autoit geschrieben zu sein. Der Autor jedenfalls bedankt sich bei der Autoit Community.
Gruss
Peter
-
bin dann aber doch bei wkhtmltopdf geblieben
Soweit ich gelesen habe, soll der Aufruf ganz simpel sein: wkhtmltopdf URL filename.pdf
Habe das mit der lokalen Adresse meiner array_tut.htm getestet, aber ohne Erfolg:
[Sorry an den TE, fürs Reingrätschen. Aber gehört gewisserweise ja auch zum Thema]
-
Hallo Alle,
bin gerade dabei mich ein zuarbeiten. Das erzeugen der PDF-Dateien klappt schon mal mit der UDF.
eine weitere Frage dazu: ich öffne zunächst ein "Template"-PDF-Formular per shellexecute($tmplt).$tmplt = "Dateipfad\Template.pdf"
Wie kann ich das Formular unter anderem Namen direkt abspeichern,
um dann per MPDF_UDF der "neuen Datei" den Text und das Image zu fügen zu können?Mit FileSaveOpenDialog lege ich den Dateinamen
nach einem vorgegebenem Muster(YYYY_MM_DeviceName.pdf) fest aber wie speichere ich die PDF-Datei nun ab?
Filewrite und FileClose funzen nicht