png-Datei in PDF umwandeln

  • 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...

  • 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

  • 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 application
    If 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.com

    Im Thread gibt es u.a. die Modifikation von Konya (May 30, 2024)

    Create PDF from your application
    www.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 !

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    2 Mal editiert, zuletzt von Musashi (4. April 2025 um 21:26)

  • 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.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • 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:

    Bilder

    Dateien

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ausführbares Script ("as is"), dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Man möge mir verzeihen, wenn ich nicht perfekten und ideal lesbaren Code zur Verfügung stelle.
    Ich möchte Hilfe zur Selbsthilfe leisten und denke dass eine gewisse Transferleistung erwartet werden kann.

  • 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!).

    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. :party:
    So habe ich die Funktion jetzt angepasst:

    Nochmals: Aller herzlichsten DANK an Alle und explizit an Schnuffel.

    Einmal editiert, zuletzt von SOLVE-SMART (7. April 2025 um 15:39)

  • 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.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ausführbares Script ("as is"), dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Man möge mir verzeihen, wenn ich nicht perfekten und ideal lesbaren Code zur Verfügung stelle.
    Ich möchte Hilfe zur Selbsthilfe leisten und denke dass eine gewisse Transferleistung erwartet werden 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.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • 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.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ausführbares Script ("as is"), dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Man möge mir verzeihen, wenn ich nicht perfekten und ideal lesbaren Code zur Verfügung stelle.
    Ich möchte Hilfe zur Selbsthilfe leisten und denke dass eine gewisse Transferleistung erwartet werden kann.

  • 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

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ausführbares Script ("as is"), dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Man möge mir verzeihen, wenn ich nicht perfekten und ideal lesbaren Code zur Verfügung stelle.
    Ich möchte Hilfe zur Selbsthilfe leisten und denke dass eine gewisse Transferleistung erwartet werden kann.

  • 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.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ausführbares Script ("as is"), dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Man möge mir verzeihen, wenn ich nicht perfekten und ideal lesbaren Code zur Verfügung stelle.
    Ich möchte Hilfe zur Selbsthilfe leisten und denke dass eine gewisse Transferleistung erwartet werden kann.