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 -
Unerledigt
-
-
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.
-
Hallo Schnuffel,
hallo Gemeinde,
gibt es eigentlich so etwas wie ein Howto für die UDF?
Ich konnte im Originalbeitrag leider nur die Examples finden aber
eben keine "Bedienungsanleitung". ich würde gerne ein von mir entworfenes template als Basis-PDF nutzen...
konnte aber weder in der Func initpdf noch sonst eine Möglichkeit finden dies umzusetzen... -
hmm,
ich glaube nein. Der Ersteller ist glaube ich auch nicht mehr aktiv.
Wenn du mir das "Template" schickst kann ich schauen, ob ich das für dich erstellen kann.
-
Hallo Schnuffel,
ich habe heute morgen im Autoitscript.com eine Nachricht an taietel gesendet mit der Frage nach einem Howto.
Dort bekam ich den Hinweis eingeblendet, er sei aktiv. Was auch immer das heissen mag... Schauen wir mal ob ich eine Antwort bekomme.
Wenn ja werde ich sie hier posten. Mein Template ist im Anhang. Es handelt sich um ein PDF-Formular. Die ausfüllbaren Felder sollten erhalten bleiben,
wenn i-wie möglich.
Im Vorfeld schon jetzt meinen aller herzlichsten Dank für deine Mühen... -
ich habe heute morgen im Autoitscript.com eine Nachricht an taietel gesendet ... .
Dort bekam ich den Hinweis eingeblendet, er sei aktiv. Was auch immer das heissen mag.In seinem Profil steht "Last visited March 15, 2023" , also vor über zwei Jahren.
-
Hallo Musashi,
das ist traurig. Da wird dann wohl keine Antwort kommen -
Hallo hipfzwirgel,
Mihai hat in seiner UDF leider keine direkte Unterstützung für Form Elemente integriert.
Es stellt sich auch die Frage, wenn ich eine pdf durch ein Script erstelle, dann brauche ich doch keine beschreibbaren Formularfelder mehr.
Dann ist die pdf final. Ansonsten ist im Workflow irgendwo der Fehler.Für eine Template Vorlage wäre in dem Fall Acrobat oder Open Office eher geeignet.
Lediglich an Signature Feldern bin ich bisher nicht an Acrobat vorbeigekommen. -
Schnuffel laut Dokumenteneigenschaften wurde das Template mit OpenOffice erstellt
-
Hallo gmmg,
das ist richtig und zwar wegen der Möglichkeit dort, dass Word-Dokument als PDF-Formular(befüllbare Textfelder) zu exportieren.
Geht aber nur wenn das Wordfile im Kompatibilitätsmodus gespeichert ist und die Textfelder auch "alter Art sind".
@ Schnuffel:
ich denke ich werde die Seite mit der Grafik, sowie die Seite mit dem Textfile in Excel nachbauen.
Dort kann ich ja die Zellen dann beschreiben, eine Grafik einfügen und das Textfile via z. B. FileReadArray eben falls in ein Excel Template eintragen.
Könnte man die Excel-Files dann via Autoit als PDF speichern, so das ich sie dann mergen kann? -
ich denke, du gehst das Thema viel zu kompliziert an.
Bau dir ein AutoIt Script, dass ein pdf erstellt.
An den Stellen, die dynamischen Inhalt enthalten sollen, übergibst du diese als Parameter an das Script.
Ein duales bearbeiten manuell und via Script halte ich für nicht zielführend -
Hallo Schnuffel,
aber gerade da stößt die UDF ja an ihre Grenzen. Das Testprotokoll soll wie im Template ersichtlich, jetzt auf jeder Seite
die Kopfzeile haben. Wie du selber gesagt hast, ist es nicht möglich mit der UDF das Template als Basis zu nehmen.
Ich habe versucht die Grafik (Screenshot von HWiNFO64) in das PDF-Template einzufügen, sodass die Kopfzeile nicht überlagert wird aber das habe ich bis jetzt nicht hinbekommen.
Auch Chatgpt hat mir keine praktikable Lösung geben können.Bisher füllt mein Autoit-Programm auf der ersten Seite (Checkliste als PDF-Formular) die Kopfdaten und verschiedene technische Parameter des
zu prüfenden Computers aus. Dann wurde der notwendige HWiNFO64-Screenshot per UDF in ein PDF(leeres Blatt ohne Kopfzeile) konvertiert - das mit der Ausrichtung und Größe haben wir ja jetzt
hinbekommen - aber eben nicht die (ausfüllbare) Kopfzeile. Im letzten Schritt erzeugt mein Proggi aus einem Textfile (Bios-Dump) eine weitere PDF (leider auch ohne die Kopfzeile). Alle 3 PDF-Dateien werden dann via pdftk.exe von meinem Proggi gemergt zu einem Testprotokoll.
Fazit: Mein Proggi machte bisher alles was notwendig war. Nur leider muss ich eben jetzt überall die Kopfzeile einfügen...
Daher der Gedanke die Seiten 2 mit dem Screenshot und die Seiten mit dem Bios-Dump als Excel zuerstellen, die notwendigen Angaben für die Kopfzeile und die Textdaten des Bios-Dump
lassen sich via Autoit dort in die Zellen eintragen und die Grafik hoffentlich wie in Word einfügen. Das ganze dann als PDf speichern wird ja hoffentlich auch i-wie gehen... -
ich sehe da kein Problem.
Ich hab mit der UDF schon mehrseitige Rechnungen mit Kopf- und Fußzeilen erstellt.
Ist nur ein wenig Zeitaufwand sich das so hinzufriemeln.Zeig doch mal alle deine pdf Formulare und dann schauen wir weiter.
Das Einzige, dass mit der UDF nicht geht (m.W.) ist das Erstellen von Formularfeldern, die nachträglich in der PDF als Form dienen und beschreibbar sind.Es gibt in der UDF die Möglichkeit für alle Seiten ein "Grundgerüst" zu erstellen, dass dann auf jeder Seite angezeigt wird.
Dazu dann die jeweiligen Daten der Seite. -