tabellarische Reporte oder Berichte aus Autoit

  • Hallöchen,

    mal ne andere Frage.

    Ich suche etwas um Tabellen für Berichte und Reports schön formatiert (automatisiert) vielleicht gern auch als PDF im Batch, abzustellen, auszudrucken und als email zu versenden.

    Wenn möglich fehlerresistent (nicht wie LaTex). Damit stehe ich etwas auf Kriegsfuß.

    Ich denke ich werde nicht der einzige sein, der sowas braucht.

    vielleicht hat jemand einen guten Tip.

    :Glaskugel:

  • Muss das mit AutoIt erfolgen oder bezieht sich "etwas" als allgemeine Frage auf alle möglichen Tools wie Berichtsgeneratoren (Crystal Reports ..) etc.?

    Wo kommen die Daten her (aus einem ERP, Datenbank, Text-Dateien ...)?

    Je detaillierter die Frage, umso schnellere und bessere Antworten kriegst Du :)

  • Mit Autoit sollen die Daten generiert werden und es muß nicht (geht auch nicht) mit Autoit ein PDF erstellt werden. Exteren Programme gehen auch wenn sie im Batch Daten verarbeiten können. Wenn ein Zusammenspiel möglich ist gerne.

    :thumbup:

  • Dafür müsste man definitiv mehr Angaben haben.

    Wie werden die Daten generiert? Bzw. sollen sie generiert werden.

    Wie sollen sie dargestellt werden?

    etc. etc.

  • Darstellt sollen sie als Tabellen (Spalten und Reihen). Wie sie aussehen ist erstmal egal, Hauptsache gegliedert. Daten werden durch Autoit entweder in ein .txt oder über Clip ausgegeben. Daten aus Sqlite muß ich eh über Autoit ausgeben. Außer der Berichtsgenerator kann auch Sqlite Datenbank ansprechen im Batch, dann wäre das auch eine Option.

    Es ist nur so, das z.B. Dateinamen unterschiedlich lang sein können und dadurch doch anders formatiert werden sollten (kleinere Fonts) halt einfach passend gemacht.

    Entweder es gibt ein vordefinierte Vorlage oder es muß eine Steuerungsdatei sein, wie das Ding auszusehen hat. Wie gesagt LaTex ist zwar ein Vorbild aber schwer zu händeln. Viele Fehlermeldungen Fonts ect. nie klappt das wie man möchte. Und Hand anlegen will ich nicht. Wie gesagt automatische Reports und Berichte, Statusmeldungen ect.

    :Face:

  • man kann mit Autoit ein PDF generieren? Wie funktioniert das? Das ist spannend. Auch in Tabellen und Spalten.

    Unbenommen davon würde ich das gerne lernen. Wo steht da was? Gerne auch einen Link.

    Ein simpler Berichtgenerator ohne viel Schnick Schnack würde mir vielleicht auch schon helfen.


    Berlin, hier klebt der Bär :klatschen:

  • ... man kann mit Autoit ein PDF generieren? Wie funktioniert das? ....


    Suchfunktion: PDF = Das mit PDF kann man so lösen:

    Spoiler 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

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • ... vielleicht hat jemand einen guten Tip.

    Hier das Beispiel von Alina mit zugehöriger UDF .

    Eine interessante Diskussion zu dem Thema findest Du unter :

    hipfzwirgel
    15. April 2021 um 11:39

    Beispielskript :

    Die UDF (TxTtoPDF.au3) findest Du im Anhang (bitte in das SkriptDir des Beispiels kopieren).

    Wie im o.a. Thread bereits beschrieben, funktioniert die UDF aber nur für recht einfache Texte (soll keine Kritik sein). Siehe : SumNumbers.txt zu TxT2Pdf.pdf umgewandelt

    EDIT :

    Das von chesstiger genannte Tool wkhtmltopdf wäre sicher auch einen Blick wert

  • Wäre es nicht besser am Anfang zu starten (Woher kommen die Daten? Wie sehen die Daten aus? usw.) bevor man den letzten Schritt (erstellen der PDf aus der fertigen Ansicht) macht.

    Daher nochmal BlutigerAnfänger :

    - Quelle: Woher kommen die Daten? Aus einer anderen Datei (CSV, Excel,...) oder einem Programm?

    - Das ist keinesfalls egal, Programmieren bedeutet alles zusammen zu setzen und die Daten muss man sich ja irgendwo holen.

    - Sind die Daten immer gleich aufgebaut oder kann es unterschiede geben (Spaltenüberschriften/ Spaltenanzahl)?

    - Du hast was von SQLite geschrieben. Schau mal hier:

    Externer Inhalt gist.github.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    - Darstellung: Am Besten stellst du ein Bild einer Excel die Beispielhaft zeigt wie die Daten Dargestellt werden sollen.

    - PDF: Sollen sie dort 1:1 wie im Programm dargestellt werden oder kommt hier wieder ein anderes Format zum Tragen?

    - Dazu zählt auch: Überschrift, Fußnote, welche Spalten angezeigt werden sollen etc.?

    - Hierzu gab es oben ja schon ein paar Beispiele.

    Was du wegen der Dateinamen meinst (kleiner Fonts :/), erschließt sich mir noch nicht so ganz.

  • Hallo Moombas,

    bei mir sind es tatsächlich nur Texte oder Zahlen aus Datenbanken in .csv oder .txt. oder aus Sqlite. Immer strukturiert getrennt. Per se nichts aufregendes. Ich muß nur Text und Zahlen wie in einer Excel Tabelle so ausgeben könne, daß der Drucker nicht Mist druckt. Also, das der Text umgebrochen in der gleichen Zelle bleibt und Erklärungstext hinzugefügt werden kann

    Ich hab mal ein Beispiel angehängt

  • Dann wäre es interessant wie diese csv bzw txt aufebaut sind:

    ; getrennt oder , oder ganz was anderes?

    mit " vorweg und hinten dran oder ohne?

    Die Überschrift ist in der Datei enthalten oder aus dem Dateinamen oder woanders?

    Der Text unten in der PDF soll aus einem (Freitext)Kommentarfeld kommen?

    Ich gehe davon aus, das es auch mal mehrere Seiten sein können?

  • Das mit den Trennzeichen kann ich machen wie ich will. Ich generiere die Datei! bzw den Datensatz. Es können tatsächlich auch mal mehrere Seiten sein. Ich bin aber bemüht es immer auf eine Seite zu beschränken.

    Was sinnvoll wäre Trennlinien in Spalten und Reihen um die Datensätze erkennbar gut darzustellen.


    :)

  • Excel UDF funktioniert bei mir nicht. Ich habe kein Excel auf der Platte und ADO Einbindung auf dem Server ist immer problematisch. Berechtigungen ect.

    Mir wäre es lieber ich kann es gleich erledigen ohne zuviel rum zuschrauben.

    :S

  • Wenn es kein LaTeX sein soll (was ich allein aufgrund der enormen Größe einer TeX-Distribution durchaus nachvollziehen kann) dann könntest du dich nach anderen Formaten und Umsetzern umsehen.
    Das Prinzip bleibt im Grunde gleich: Dein Programm erzeugt Code in irgendeiner Auszeichnungssprache und dieser wird dann von einem Übersetzertool nach PDF konvertiert.


    Auf Anhieb würden mir da Markdown und html einfallen. Für beide Formate gibt es pdf-Übersetzer für die Kommandozeile, wobei markdown eher eingeschränkt ist was Tabellenauszeichnung angeht - hier wäre evtl. AsciiDoc eine Alternative.

    Groff hatte ich auch noch im Hinterkopf aber ob das heute noch state-of-the-art ist bezweifle ich ein bisschen.

    Ansonsten hättest du noch die Wahl entsprechende Bibliotheken einzubinden (die oftmals Geld kosten) und deine PDF im Programm über die Bibliothek zu erstellen.

  • Wenn jemand den PDF-Part übernehmen kann, könnte ich evtl. den Rest als Entwurf zur Verfügung stellen.

    Ich habe bisher keine Tabellen, sondern nur reine txt-Dateien in PDF umgewandelt (TxTtoPDF.au3).

  • Im Anhang nur mal ein Sample (noch ohne die Konvertierung Array>PDF + Kommentarfeld).

    Sicherlich noch einige andere Anpassungen notwendig aber ich denke manchmal ist es einfacher einfach mal einen Ausgangspunkt, der nicht nur aus Text besteht, zu haben.

    Hier der Code (die GUI sollte sich dynamisch anpassen wenn man die jeweiligen Konstanen ändert für die jeweiligen Bedürfnisse):