Hallo Gemeinde,
bisher wandle ich png-Dateien in PDF um, mithilfe der MPDF_UDF.au3 von Mihai Iancu. Das Problem ist für mich nun, dass die UDF die Grafik-Datei
leider in ein DIN A4-PDF quasi einfügt und somit die Grafik zentriert rein skaliert. Sieht furchtbar aus
Ich habe versucht die PNG-Datei wenigstens als Landscape einzufügen, war aber nicht erfolgreich.
Die Option $PDF_ORIENTATION_LANDSCAPE hat keine Auswirkung und ob oder was ich da sonst noch einstellen muss konnte ich nicht heraus finden.
Ich brauche eine Möglichkeit die Grafik-Datei direkt wie sie ist, in eine PDF umzuwandeln. Hat jemand eine Idee ob das mit der UDF auch geht oder
könnte ich das per Autoit i-wie anders durchführen?
Auf Drittanbietertools würde ich gerne verzichten...
png-Datei in PDF umwandeln
-
hipfzwirgel -
4. April 2025 um 13:29 -
Erledigt
-
-
Hi hipfzwirgel 👋 ,
ich kenne die UDF nicht, doch es wäre hilfreich wenn du sie teilst (wenn sie nicht unter einer Lizenz steht bei der dies untersagt sein sollte). Somit hätten wir die Möglichkeit mal nachzuschauen.
Warum willst oder musst du explizit auf Drittanbietertools verzichten? Es gibt wunderbare HTTP APIs online, sogar mit Auth, mit denen du dies per einzelnen POST Request machen kannst. Natürlich ohne Internet-Verbindung nicht, doch in welchen Fällen ist das schon so.
Mein Ansatz für sowas wäre es das Rad nicht neu zu erfinden und einen Service zu nutzen. Falls der mal wegbricht, wechselt man zu einem anderen. Oder du hostet das GitHub Repo. dazu einfach selbst.
-----------
Naja, vielleicht bekommst du zur UDF noch direkt 'ne Antwort. Viel Erfolg 🤝 .
Viele Grüße
Sven -
Mit Cairo kannst du auch PDFs erstellen -> https://www.autoitscript.com/forum/topic/21…024-04-02-alpha
Siehe dazu Beispiel "Example15.au3".
-
ich kenne die UDF nicht, doch es wäre hilfreich wenn du sie teilst (wenn sie nicht unter einer Lizenz steht bei der dies untersagt sein sollte). Somit hätten wir die Möglichkeit mal nachzuschauen.
Vermutlich meint hipfzwirgel folgende UDF:
In den AutoIt-Wiki https://www.autoitscript.com/wiki/User_Defined_Functions findet man unter PDF :
MPDF-UDF von taietel Version 1.0.3 (Edited August 10, 2011)
Create PDF from your applicationIf you look to output PDF's from your application (generate reports, graphics, tables etc), this UDF can be very useful.In the zip file are examples, images…www.autoitscript.comIm Thread gibt es u.a. die Modifikation von Konya (May 30, 2024)
Create PDF from your applicationwww.autoitscript.com(eine MPDF_UDF.au3 von Mihai Iancu habe ich auf die schnelle nicht entdeckt. Ggf. eine weitere Modifikation)Edit : Offenbar ist der Realname von taietel Mihai Iancu !
-
Nur so am Rande, aber hast Du etwas ähnliches nicht bereits vor 4 Jahren gefragt (inklusive Antworten) ?
-
Das Problem ist für mich nun, dass die UDF die Grafik-Datei leider in ein DIN A4-PDF quasi einfügt und somit die Grafik zentriert rein skaliert. Sieht furchtbar aus
Ich habe mir die von Konya aktualisierte Version (siehe Beitrag #4) kurz angesehen. Die Einstellmöglichkeiten sind ja doch recht umfangreich. Ich vermute mal das Du _SetPaperSize("a4") im Code verwendest - dann kann es, trotz $PDF_ORIENTATION_PORTRAIT bzw. _SetOrientation($PDF_ORIENTATION_LANDSCAPE) usw., zu Verzerrungen kommen - abhängig von anderen Parametern. Leider fehlt mir die Zeit das alles zu eruieren.
Ich brauche eine Möglichkeit die Grafik-Datei direkt wie sie ist, in eine PDF umzuwandeln. Hat jemand eine Idee ob das mit der UDF auch geht ?
Eine Lösung, wenn auch wahrscheinlich nicht die eleganteste, die bei mir funktioniert, wäre es, _SetPaperSize("CUSTOM", $iImageWidth, $iImageHeight) zu verwenden.
$iImageWidth und $iImageHeight sind die Breite und Höhe der gewählten Grafik. Diese Werte lassen sich mittels https://autoit.de/onlinehilfe/on…etDimension.htm ermitteln (siehe dortiges Beispiel).
Es wäre hilfreich, wenn Du ein (auf den Kern reduziertes) Skriptbeispiel Deiner momentanen Vorgehensweise posten könntest.
-
Hallo Gemeinde,
vielen lieben herzlichen Dank an euch alle. ich werde mir die Woche die Vorschläge, bzw. Denkanstöße anschauen.
Und Ja, es handelt sich um die MPDF-UDF von taietel
@ Musahi: Ja ich habe damals das Thema insofern angefragt, als das ich eben eine Möglichkeit gesucht habe, überhaupt erst mal
mit Autoit PDF Dateien zu erzeugen.
Jetzt geht es mir eben darum, dass ich das Layout der PDF-Datei anpassen muss. Ich versuche im ersten Schritt dein Vorschlag mit _SetPaperSize.
Mal sehen ob ich das dann so hinbekomme... -
pack mal die 3 Dateien in einen Ordner und starte die pdf.au3
hier mal ein Beispiel:
-
Hallo Schnuffel,
meinen allerherzlichsten Dank an dich für deine Einlassung. Diese hat mir geholfen zu erkennen warum die Änderungen der Parameter
bei meiner Funktion(die ich höchstwahrscheinlich aus dem o.g. OriginalThread zur UDF oder aus der Hilfe zu meiner von Musashi erwähnten Anfrage heraus generierte),
keine, bzw. nicht die Auswirkungen hatten, die sie hätten haben sollen. Ich habe es nicht ganz zu Ende analysiert aber die Originalfassung "meiner" Funktion
hat eine Routine die nicht nur das Öffnen einer Grafikdatei behandelt, sondern auch das Öffnen mehrerer Dateien (was ich aber nicht benötige!).AutoIt
Alles anzeigenFunc _SelectImages() Local $sImg = FileOpenDialog("Select images", "\\Pfad zur Grafikdatei", "Images (*.jpg;*png)", 4) If @error Then MsgBox(4096, "", "No File(s) choosen") Else Local $aImgs = StringSplit($sImg, "|", 3) ;set the properties for the pdf _SetTitle($sNameImg & "Img2PDF.pdf") _SetSubject("Convert image(s) to pdf") _SetKeywords("pdf, AutoIt") ;_OpenAfter(True) ;open after generation _SetUnit($PDF_UNIT_PT) ;_SetPaperSize("a4") _SetPaperSize("CUSTOM", 1057, 548) _SetZoomMode($PDF_ZOOM_CUSTOM, 90) _SetOrientation($PDF_ORIENTATION_LANDSCAPE) _SetLayoutMode($PDF_LAYOUT_CONTINOUS) ;initialize the pdf _InitPDF(@AppDataDir & "\HaSc\" & $sNameImg & "Img2PDF.pdf") If UBound($aImgs) <> 1 Then ;=== load resources used in pdf === For $i = 1 To UBound($aImgs) - 1 _LoadResImage("img" & $i, $aImgs[0] & "\" & $aImgs[$i]) Next ;load each image on it's own page For $i = 1 To UBound($aImgs) - 1 _BeginPage() ;scale image to paper size! _InsertImage("img" & $i, 2, 9, 17, 15) ; Diese Werte hatte ich angepasst, ohne das es eine Auswirkung auf die Grafik hatte _EndPage() Next Else _LoadResImage("taietel", $aImgs[0]) _BeginPage() ;scale image to paper size! _InsertImage("taietel", 2, 9, 17, 15) ; Diese Werte hatte ich angepasst, ohne das es eine Auswirkung auf die Grafik hatte _EndPage() EndIf ;then, finally, write the buffer to disk _ClosePDFFile() ResetPDFSettings() Sleep(300) GUICtrlSetData($EditSysNot, "HW-Summary-file is converted to pdf..." & @CRLF & @CRLF, 1) EndIf EndFunc ;==>_SelectImages
Ich glaube, dass das Zusammenspiel der UDF mit der in der Funktion verwendeten Array-Techniken schuld sind (genauer die Indizes als Pfadangaben).
Der Rest des Codes ist, soweit ich das erkennen konnte gleich. Lasse mich aber gerne korrigieren
Ich kann jetzt durch die neue Func die Grafik-Datei in die ausgewählte Größe 1057 x 548 skalieren und es wird ein ebenso großes PDF erzeugt. ERGO: Fall zunächst gelöst.
So habe ich die Funktion jetzt angepasst:AutoIt
Alles anzeigenFunc _SelectImages() Local $sImg = FileOpenDialog("Select images", "Pfad zur Datei", "Images (*.jpg;*png)", 4) If @error Then MsgBox(4096, "", "No File(s) choosen") Else ; PDF Properties _SetTitle($sNameImg & "Img2PDF.pdf") ; Titel _SetSubject("Convert image(s) to pdf") ; Thema _SetKeywords("pdf, AutoIt") ; Stichwörter _OpenAfter(True) ; nach Erstellung im Anzeigeprogramm öffnen _SetUnit($PDF_UNIT_PT) ; Maßeinheit zur Positionierung setzen ;_SetPaperSize("A4") ; Papierformat angeben _SetPaperSize("CUSTOM", 1057, 548) ; 548 = H, 1057 = W _SetZoomMode($PDF_ZOOM_CUSTOM, 80) ; Ausgabezoomfaktor angeben _SetOrientation($PDF_ORIENTATION_LANDSCAPE) ; Orientierung Hoch- Querformat ($PDF_ORIENTATION_PORTRAIT / $PDF_ORIENTATION_LANDSCAPE) _SetLayoutMode($PDF_LAYOUT_CONTINOUS) ; Seiten anhängen ; Init und Fonts laden _InitPDF(@AppDataDir & "\HaSc\" & $sNameImg & "Img2PDF.pdf") _LoadFontTT("_ARIAL", $PDF_FONT_STD_ARIAL) _LoadFontTT("_ARIALB", $PDF_FONT_STD_ARIAL, $PDF_FONT_BOLD) ; _LoadResImage( $sImgAlias , $sImage ) _LoadResImage('ImgFile', $sImg) _BeginPage() ; Image einfügen _InsertImage('ImgFile', 1, 1, 1057, 548) _EndPage() _ClosePDFFile() ResetPDFSettings() Sleep(300) GUICtrlSetData($EditSysNot, "HW-Summary-file is converted to pdf..." & @CRLF & @CRLF, 1) EndIf EndFunc ;==>_SelectImages
Nochmals: Aller herzlichsten DANK an Alle und explizit an Schnuffel.