Forum: PC-Programmierung PDF-Reports mit Perl erstellen


von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Guten Morgen allerseits,

im Zuge eins Projektes muss ich verschiedene spezielle Reports mit Perl 
als PDF erzeugen. Der Report hat mehr den Charakter eines "Belegs", das 
heisst es ist nicht die klassische Tabelle, sondern ein paar Kopfdaten, 
Fußzeile, dazwischen verschiedene Textblöcke mit längerem Freitext, hier 
aber auch tabellenförmige Überschriften.

Die Daten selbst zu ermitteln und entsprechend zu formatieren ist kein 
Problem. Ich mach das auch bereits erfolgreich als HTML-Output, aber 
auch als Excel-Auswertung (wobei Excel mit "Freitexten" immer gewisse 
Probleme hat).

Nun soll ich das aber als PDF erzeugen. Neben dem lästigen Problem der 
Seitenumbrüche (manchmal gehen die Freitext-Bereiche über mehrere 
Seiten, manchmal passen zwei oder mehrere davon auf eine Seite) bin ich 
mir momentan total unklar, über welchen Weg ich ein "schönes" PDF (mit 
Logo und so) erzeugen soll.

Erzeugt muss der Report im Batch (ohne User-interface), dafür aber nur 
auf einer maschine, nämlich dem (Windows 2012-) Server. und, wie in der 
Überschrift ersichtlich, möglichst in Perl  oder zumindest aus Perl 
ansteuerbar (die restliche Infrastruktur ist Perl-basierend). 
Open-Source-Lösungen wären bevorzugt.

Der Klassiker "Crystal Reports" scheidet aus, ist ein Monster mit dem 
wir nur schlechte Erfahrungen haben.

Ich suche eigentlich nicht mal einen "Report Generator", den komplexten 
Teil (Layout, Daten sammeln und umwandlen etc) habe ich eh schon perfekt 
im griff (wie gesagt, den Report als HTML zu erzeugen funktioniert 
bereits wunderbar)

ich suche mehr ein "Zwischenformat" welches ich mit Perl einfach 
erzeugen kann (wie HTML), aus dem ich dann aber einfach ein schönes PDF 
erzeugen kann, mit sauberen Seitenumbrüchen.

LaTeX oder ein Abkömmling wäre sicher eine Möglichkeit, aber das 
beherrsche ich leider überhaupt nicht...


Ich bin für alle Vorschläge dankbar!

Michi

PS: ein Beispiel wie so ein Report aussehen soll, kann ich gerne mal 
vorbereiten, dafür müsste ich einen bestehenden aber erst "schwärzen"

: Bearbeitet durch User
von Jan H. (j_hansen)


Lesenswert?

Apache FOP?

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Jan Hansen schrieb:
> Apache FOP?

Danke für den Hinweis, kannte ich nicht...

leider unmöglich (hab ich vergessen zu erwähnen): Java ist aufgrund 
einer IT-Richtline des Kunden nicht erlaubt (und ich kann und will nicht 
über den Sinn der Richtlinie diskutieren, ich kann sie nicht 
beeinflussen)

von Roland P. (pram)


Lesenswert?

Wenn du schon HTML hast, wandle das doch als PDF um.
entweder mit den Linux Tools "html2ps" und "ps2pdf"
oder du googlest mal nach "html2pdf"

Wobei du mit LaTeX wohl die besten Ergebnisse erzielen wirst, was 
Ausrichtung und Seitenumbrüche betrifft.

Gruß
Roland

von Jochen S. (jochen_s)


Lesenswert?

Servus,

wie schaut's aus das ganze als Late*x script zu erstellen und dann per 
Batch zu übersetzen?
Das beherrscht sehr umfangreiche Tricks in Sachen automatische 
Formatierung, bzw. "angelernte" Formatierung.

Gruß
Jochen


Edit: Roland war schneller hat aber wohl eine ähnliche Meinung.....

: Bearbeitet durch User
von PittyJ (Gast)


Lesenswert?

Ich benutze JagPDF um aus C bzw C++ PDFs zu erstellen.
http://www.jagpdf.org/

Im Prizip wird eine Basis-Bibliothek zur Verfügung gestellt, um einfache 
PDFs zu erzeugen. Text und Graphikfunktionen sind vorhanden.
Ich habe das für ein Projekt und Windows verwendet, und aktuell benutze 
ich das unter Linux.

Wie das mit einer Perl-Einbindung aussieht, kann ich nicht sagen. Perl 
ist eine Sprache, die ich mehr meide.

von Rene S. (Firma: BfEHS) (rschube)


Lesenswert?

Hallo,

bei CPAN gibt es doch ein PDF::API2

http://search.cpan.org/~ssimms/PDF-API2-2.022/lib/PDF/API2.pm

Ob das für deine Ansprüche genügt kann ich nicht sagen. Ich kenne das 
nur für sehr einfache PDF Dokumente. Und für Perl ist CPAN immer die 
erste Adresse.

Grüße aus Berlin

von Christian B. (casandro)


Lesenswert?

Wie schon oben erwähnt sind die Programme aus der TeX Umgebung wohl 
nicht verkehrt. Es gibt auch noch "troff" welches anders funktioniert 
und meines Wissens nach einfacher ist ich aber noch nicht probiert habe.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Für Perl kenne ich nichts dergleichen. Für Python gibt es Reportlab, das
ich schon erfolgreich angewandt habe. Python-Programme kann man auch in
Perl einbinden.

Reportlab kann u.a. die von dir gewünschten Textformatierungen (Zeilen-
und Seitennumbrüche, Kopf- und Fußzeilen, Seitunnummerieung u.ä.),
darüberhinaus aber auch Diagramme und andere Grafiken.

  http://www.reportlab.com/

Für deine Zwecke reicht die Open-Source-Gratisversion.

von Mark 99 (Gast)


Lesenswert?

Ich würde auch zu einem Typesetter greifen. TeX ist ein bisschen dick, 
würde aber sicher gehen. groff (GNU nroff, troff) wäre weiter vorne auf 
der Liste. Auch FOP (aber wenn der Kunde sich ins Hemd scheißt... [1]).

Einen der erwähnten Typesetter, weil die relativ einfach zu bedienen 
sind und man aus einer Quelle diverse Ausgangsformate (HTML, PDF, etc.) 
erzeugen kann und nicht für jedes Format bei Null anfangen muss.


--
[1] Eine "Kein Java" IT-Richtlinie (aber dafür Perl ...[2]), lässt 
darauf schließen, dass bei deinem Kunden eher begrenzt intelligente 
Leute die Entscheidungen treffen. Eventuell auf der Basis der Aussagen 
selbsternannter Überhacker in der IT-Abteilung. Solche Kunden sind 
gefährlich. Ich würde mit denen keine Details diskutieren, sondern 
machen.

[2] Perl, die write-once, read-never Sprache, mit der jeder ohne 
besondere Absicht absolut unwartbaren Code schreiben kann. "There is 
more than one way to do it!" Oh ja, und jeder Weg muss mal ausprobiert 
werden.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Vielen Dank für eure Hinweise! Da hab ich ja mal einiges zu lesen...

Über PDF::Api2 hab ich schon mal drübergelesen, das setzt aber wohl 
tiefe Kenntnisse der PDF-Struktur voraus (die ich nciht habe) und damit 
bindet man sich auch stark an PDF (wäre aber nciht so schlimm)

TeX würde mich schon interessieren... ich hab das vor Jahren mal 
"indirekt" eingesetzt (automatische Doku-Generation aus Source-Code) bin 
dabei aber kaum mit der Sprache in Berührung gekommen, war aber vom 
Ergebnis mehr als begeistert...

Auch wenns etwas "dick" ist, denke ich wäre ich damit "auf der sicheren 
Seite" im Sinne von "dann gibt es nix was ich damit nicht hinbekomme". 
ich hab zwar aktuell diese Anforderung, aber wir bräuchten sowas öfter, 
behelfen uns bisher mit Excel, aber das Anstarten von Excel und PDF 
speichern ist der blanke Horror ("Fehler: Default-Drucker konnte nicht 
gefunden werden"). Abgesehen von anderen Limitierungen von Excel...

Zurück zu TeX: wäre jemand bereit (natürlich gegen Bezahlung), mir einen 
solchen Beispiel-Report (den ich als PDF, aber auch als RTF und HTML 
vorliegen habe, der kommt original aus einer Access-Anwendung) 
exemplarisch in irgendein sinnvolles TeX-Derivat zu wandeln, und mir bei 
der Auswahl der Toolchain (gibts dvips noch?) behilflich zu sein?

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Mark 99 schrieb:
> Eine "Kein Java" IT-Richtlinie lässt
> darauf schließen, dass bei deinem Kunden eher begrenzt intelligente
> Leute die Entscheidungen treffen. Eventuell auf der Basis der Aussagen
> selbsternannter Überhacker in der IT-Abteilung.

Starke Worte :-) Du kannst aber davon ausgehen dass die Leute schon 
wissen was sie tun. Ich selbst hab zwar nix gegen Java (liebe es aber 
auch nicht), kann aber die Abwehr der IT sehr gut nachvollziehen: sobald 
du verschiedene Software hast, von denen jede genau eine spezielle 
Java-Version (bis auf die letzte Dezimalstelle des patchlevels hinunter) 
braucht, in Komination mit den wöchentlich x Sicherheits-Updates, macht 
Java nicht gerade sehr beliebt...

Mark 99 schrieb:
> Perl, die write-once, read-never Sprache

Die Perl-Diskussion führe ich gerne, aber nicht hier in diesem Thread, 
bitte.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael Reinelt schrieb:
> Zurück zu TeX: wäre jemand bereit (natürlich gegen Bezahlung), mir einen
> solchen Beispiel-Report (den ich als PDF, aber auch als RTF und HTML
> vorliegen habe, der kommt original aus einer Access-Anwendung)
> exemplarisch in irgendein sinnvolles TeX-Derivat zu wandeln, und mir bei
> der Auswahl der Toolchain (gibts dvips noch?) behilflich zu sein?

Kannst du den Beispiel-Report weit genug anonymisieren und dann hier
öffentlich machen?  Dann können wir dir alle helfen.

dvips macht man eher nicht mehr.  Heutzutage wirft man "pdflatex" an,
welches dann gleich PDF rauswirft.

von Michael R. (Firma: Brainit GmbH) (fisa)


Angehängte Dateien:

Lesenswert?

Jörg Wunsch schrieb:
> Kannst du den Beispiel-Report weit genug anonymisieren und dann hier
> öffentlich machen?  Dann können wir dir alle helfen.

Gerne!

Alles was orange ist, da kommt (variabler) Text hin. größere orange 
bereiche enthalten mehrzeiligen text.

Auf seite 2 (eigentlich 3/5) sieht man schon eine "Lästigkeit": hier 
kommen mehrere Blöcke mit jeweils einem eigenen Kopfbereich, und 
unterschiedlich langen Freitexten. Umbruch wird hier sicher lästig...

Jörg Wunsch schrieb:
> dvips macht man eher nicht mehr.  Heutzutage wirft man "pdflatex" an,
> welches dann gleich PDF rauswirft.

Ah ja, ist halt doch schon gute 20 jahre her :-)

: Bearbeitet durch User
von Christian R. (supachris)


Lesenswert?

Ich würde auch den Weg über LaTex empfehlen. Machen wir für unsere 
Test-Reports auch so. Python testet alles automatisiert und schmeißt die 
Ergebnisse in tex Files. Danach wird pdflatex angeworfen und das PDF ist 
fertig. Durch die Hierarchie-Ebenen und ImportIfFileExist kann man 
unvollständige Tests usw. da super handhaben.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Christian R. schrieb:
> Ich würde auch den Weg über LaTex empfehlen.

Gut ihr habts mich überzeugt (und ich hab mich nicht mal richtig gewehrt 
:-)

jetzt brauch ich nur noch jemanden der mir hilft...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael Reinelt schrieb:

> Alles was orange ist, da kommt (variabler) Text hin. größere orange
> bereiche enthalten mehrzeiligen text.

Sieht aus, als könnte man das als Tabellen aufbauen.

Wie man die diversen Rahmen zimmert, müsste ich nachsehen, sowas ist
in einem Textdokument sonst eher nicht üblich.

> Auf seite 2 (eigentlich 3/5) sieht man schon eine "Lästigkeit": hier
> kommen mehrere Blöcke mit jeweils einem eigenen Kopfbereich, und
> unterschiedlich langen Freitexten.

Naja, das ist für LaTeX nun weniger ein Thema, Textsatz ist ja eine
übliche Aufgabe. ;-)

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Jörg Wunsch schrieb:
> Wie man die diversen Rahmen zimmert, müsste ich nachsehen, sowas ist
> in einem Textdokument sonst eher nicht üblich.

Bei dem Kunden ist viel "nicht üblich" :-)
Wer verächtlich von "Raketentechnik" redet, liegt gar nicht weit daneben 
:-)

Mir fiele ein großer Stein vom Herzen, wenn wir da eine passable Lösung 
fänden, ich schiebe diese Aufgabe jetzt schon monatelang vor mir her...

von Vlad T. (vlad_tepesch)


Lesenswert?

Jörg Wunsch schrieb:
> Sieht aus, als könnte man das als Tabellen aufbauen.

wenn ich "Tabellen" im Zusammenhang mit "LaTex" höre, kräuselt sich bei 
mir immer alles. Ich hab das als totalen Krampf in Erinnerung.

LaTex ist echt toll, wenns um alles geht was mit *Text*-Satz zu tun hat 
und zugehörigen Verzeichnissen, aber Tabellen sind furchtbar. Da braucht 
man zig Pakete und ewiges Rumgefummel, bis es so aussieht, wie man es 
sich vorgestellt hat.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Vlad Tepesch schrieb:
> Da braucht man zig Pakete und ewiges Rumgefummel, bis es so aussieht,
> wie man es sich vorgestellt hat.

Wird sich hier in Grenzen halten.  Da das ja alles Formular-mäßig
aussieht, gibt es feste Spaltenbreiten.

Ich bin nur noch nicht dazu gekommen, mal ein Gerippe zu zimmern, das
demonstriert, wie man es grundsätzlich angehen kann.  Die Details kann
Michael ja dann selbst ergänzen.

An sich ist es natürlich richtig, so eine starre Formatierung der
Ausgabe ist nicht unbedingt das, wo LaTeX glänzt.  Andererseits fiele
mir auch gerade nichts besseres ein, was man problemlos aus einem
Script zimmern könnte.  Für derartige Textrahmen in troff hätte ich
jedenfalls erstmal gar keine Idee, für farbige Hinterlegungen auch
nicht.

p.s.: Tabellen, die sich über mehrere Seiten hinziehen, sind in der
Tat etwas fummelig, aber das muss hier nicht sein.  Da, wo die Seiten
umgebrochen werden können, ist es ja alles wieder Fließtext, die
Tabellen braucht man für die Feldaufteilung der ersten Seite.

: Bearbeitet durch Moderator
von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Vlad Tepesch schrieb:
> wenn ich "Tabellen" im Zusammenhang mit "LaTex" höre, kräuselt sich bei
> mir immer alles.

Zur not könnte man die Tabellen auch weglassen. Ein paar horizontale 
Linien tätens für den Anfang auch...

Ein Rahmen um einen Block sollte aber möglich sein, oder?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael Reinelt schrieb:
> Ein Rahmen um einen Block sollte aber möglich sein, oder?

Ja, minipage in einer fbox (framed box), habe ich mir als Stichwort
von meiner Frau auf den Weg geben lassen. ;-)

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Bei Adobe gibt's die Doku zum Herunterladen.

Ein PDF selbst zu erzeugen ist nicht sooo schwer ... ;)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Joachim Drechsel schrieb:
> Ein PDF selbst zu erzeugen ist nicht sooo schwer ... ;)

Naja, aber nochmal eine andere Größenordnung als ein LaTeX-File.

Man könnte auch PostScript selbst zimmern und dann PDF draus machen
lassen.  Aber so'nen Kram wie die Textblöcke zu setzen will man sich
eigentlich nicht zu Fuß antun.

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Geht aber recht zügig ...

Man muß ja nicht unbedingt komprimieren und so. Eigentlich ist es
eine Liste mit Objekten die dann geeignet kombiniert werden. Hat man
das einmal begriffen geht das mit einem ASCII-Editor.

: Bearbeitet durch User
von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Jörg Wunsch schrieb:
> habe ich mir als Stichwort
> von meiner Frau auf den Weg geben lassen. ;-)

Was hast denn du für Frauen? ;-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael Reinelt schrieb:
> Was hast denn du für Frauen?

Nur eine, aber die kennt sich dafür mit LaTeX und XML aus. ;-) (Mit
letzterem verdient sie sich ihre Brötchen.)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Joachim Drechsel schrieb:
> Eigentlich ist es
> eine Liste mit Objekten die dann geeignet kombiniert werden. Hat man
> das einmal begriffen geht das mit einem ASCII-Editor.

Ich weiß, ich habe vor 15 Jahren mal bei einer GUUG-Tagung einen
Vortrag über PostScript als Programmiersprache gehalten. ;-)

Ändert nichts dran, dass du dich um den ganzen Salat mit dem Textsatz
kümmern musst.  Das würde zumindest ich mir für einen derartigen
Bericht nicht antun wollen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Genug für heute.  Erster Versuch hier.

Für die \pageref{LastPage} muss man das pdflatex ggf. zweimal laufen
lassen, da erst nach dem ersten Durchlauf die gesamte Seitenzahl
feststeht.

Schreib mal, ob dir der Weg prinzipiell so gefällt oder nicht.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Jörg Wunsch schrieb:
> ob dir der Weg prinzipiell so gefällt

JA! JA! JA! JA!

Das sieht super aus, und das beste: Ich kann den LaTeX-Code sogar 
einigermaßen verstehen...

Spannen wäre jetzt noch so ein Block mit längerem Fließtext, der 
schlimmstenfalls über eine Seite gehen kann...

von tim (Gast)


Lesenswert?

Habe ein ähnliches Problem gehabt und das mit OO/Libreoffice gelöst.
Zuerst wird eine .odt mit Platzhaltern erstellt.
Zum .PDF erzeugen wird dann:
- die .odt ausgepackt (zip)
- die xml file gepatcht, also Platzhalter gegen realen Inhalt tauschen
- wieder einpacken
- von OO/Libreoffice als .pdf Abspeichern lassen (Headless per macro)

Dauert keine Sekunde und du kannst direkt in OO/Libre Formatieren.
Seite 1 von x geht so auch automagisch.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Michael Reinelt schrieb:
> Spannen wäre jetzt noch so ein Block mit längerem Fließtext, der
> schlimmstenfalls über eine Seite gehen kann...

Habe ich auf Anhieb nicht ganz in der von dir gewünschten
Formatierung hinbekommen, sondern nur, indem der Text auch auf
der gesamten Seitenbreite formatiert wird.  Versucht man, die Ränder
schmaler zu machen, dann erfolgt dies auch bei den Kopf- und
Fußzeilen.  Tabellen mit Absätzen über Seitengrenzen hinweg, das
hatten wir oben schon mal, sind nicht gerade die starke Seite von
LaTeX.

Weiß nicht, ob du mit dem hier leben kannst.  Nutzt am Ende das Papier
effektiver aus, als positiven Seiteneffekt. ;-)

Vermutlich werden auch nicht alle Packages wirklich benötigt; die
Liste stammt aus einem copy&paste eines anderen Dokuments.

von Georg A. (georga)


Lesenswert?

> Tabellen mit Absätzen über Seitengrenzen hinweg, das hatten wir
> oben schon mal, sind nicht gerade die starke Seite von LaTeX.

Gibts dafür nicht supertabular?

http://cs.brown.edu/about/system/software/latex/doc/supertabular.pdf

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Georg A. schrieb:
> Gibts dafür nicht supertabular?

Weder mit supertabular noch mit longtable habe ich das vernünftig
hinbekommen.  Beide sind in der Lage, einzelne Tabellenzeilen gut
über die Seiten zu verteilen, aber eine Zeile, die dann in einem
Feld einen sehr langen Absatz enthält (p{XXX cm}), zu verteilen, haben
sie nicht geschafft.  Der entsprechende Textblock läuft dann unten aus
der Seite raus.

Andererseits: wenn man große Textblöcke hat und diese nur auf 2/3
der Papierbreite drucken lässt, ist das ziemliche Verschwendung.
Vielleicht akzeptiert der Kunde das ja so. ;-)

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Hallo Jörg,

erstmals nochmal vielen Dank für deine Mühe! Leider komme ich erst jetzt 
dazu mich damit zu beschäftigen (Dienstreisen, und Chaos weil zwei 
Kollegen Urlaub und zwei andere krank waren :-(

Ich hab mal TeXlive 2014 installiert, hat etwas gedauert rauszufinden 
wie man eine minimale Installation + pdflatex hinkriegt. Das tut mal.

Jetzt muss ich mich intensiv mit dem Report selbst beschäftigen. ich 
fürchte da werden noch die einen oder anderen fragen aufkommen...

von Vlad T. (vlad_tepesch)


Lesenswert?

Ich sag ja ... latex und Tabellen ... würg

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Vlad Tepesch schrieb:
> Ich sag ja ... latex und Tabellen ... *würg*

Schaut momentan nicht ganz so würg aus. ich komme gut voran...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael Reinelt schrieb:
> Leider komme ich erst jetzt dazu mich damit zu beschäftigen

Hatte mich schon gewundert. ;-)  Viel Erfolg!  Wenn du Fragen hast,
frag ruhig, aber ich denke, dass zumindest die wesentlichen Elemente
deines Resultat-Wunsches erstmal vorhanden sind.  (Ein farblich
hervorgehobenes Label oberhalb eines Textblockes war noch nicht dabei.
Wenn das wichtig ist, wird sich aber sicherlich eine Lösung finden,
beispielsweise, indem man die Überschrift einer \subsubsection
umdefiniert oder sowas.)

Vlad Tepesch schrieb:
> latex und Tabellen

Lange Tabellen; in allen anderen Fällen komme ich mit der
LaTeX-Version immer noch besser klar als mit den diversen Offices.

von Perle (Gast)


Lesenswert?

Ich würde das auf HTML-Basis machen. HTML-Grundgerüst ist schnell 
erstellt, lesbar und einfach später abänderbar.

Du brauchst nur ein Tool das HTML nach PDF wandelt da gibts ja Dutzende.
Ich glaube Chrome kann direkt PDF ausgeben, musst es nur entspr. 
aufrufen, weiss auch nicht wie das unter Windows ist, unter Linux geht 
das mit dem Abkömmling Chromium, neben zig anderen Konvertierungstools 
wie convert von ImageMagick, wkhtmltopdf,...

Bevor du das jedesmal nach PDF konvertierst setzt du an den entspr. 
Stellen im HTML-Quelltext deine entspr. Daten.

So sparst du dir die Installation weiterer Softwaremonster wie LaTeX 
oder diverse PDF-Libs die viel zu umständlich und unflexibel für deine 
Trivialaufgabe sind. Das sind dann nur wenige Zeilen Perl für die ganze 
Chose. Das ist in max. 1h erledigt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Perle schrieb:
> Ich glaube Chrome kann direkt PDF ausgeben, ...

> So sparst du dir die Installation weiterer Softwaremonster wie LaTeX

Hmm.  Hmm. :-)

Wann hat man das letzte Mal ein Sicherheits-Update für LaTeX einspielen
müssen?  Das letzte für Chromium ist jedenfalls erst ein paar Tage alt 
...

von Walter Tarpan (Gast)


Lesenswert?

Wenn man für jeden Block, der einzeln auf einer Seite einen Sinn ergäbe, 
eine eigene tabular macht, ist das mit dem Seitenumbruch auch kein 
Problem mehr.

Wenn wir ehrlich sind, ergibt langer Fließtext in Tabellen ohnehin wenig 
Sinn, da wird dann massiv Spaltenplatz verschenken.

Perle schrieb:
> Ich würde das auf HTML-Basis machen. HTML-Grundgerüst ist schnell
> erstellt, lesbar und einfach später abänderbar.

Jetzt hast Du allerdings noch nicht verraten, welcher 
HTML->PDF-Interpreter mit langen Tabellen sinnvolle Umbrüche erzeugt.


Viele Grüße
W.T.

von Perle (Gast)


Lesenswert?

Walter Tarpan schrieb:
> Jetzt hast Du allerdings noch nicht verraten, welcher
> HTML->PDF-Interpreter mit langen Tabellen sinnvolle Umbrüche erzeugt.
Ab >= n Zeilen generierst du ein neues PDF mit enstspr. Seitenzahlen,...
wo ist das Problem? Das ist noch gut handlebar und brauchst kein 
LaTeX-Monster, das du evt. gar nicht installieren darfst wenn die 
IT-Abteilung schon bei Java rumzickt.

Vielleicht ist auch Office installiert, könnte mir vorstellen dass das 
auch per Script aufrufbar ist und in PDFs drucken kann, dann brauchst du 
nicht mal ein extra Tool dafür.

LaTeX macht erst Sinn, wenn sich dein Grundaufbau und nicht nur die paar 
Bereiche auch dynamisch zusammensetzt oder exakte Formatierung wichtig 
ist.
Aber selbst mit HTML kannst du heute sehr genau formatieren, musst nur 
die entspr. Styles setzen, ok ein bischen Gebastel ist es evt. doch je 
nach Renderengine aber das spielt ja hier eh keiner Rolle.

Du hast ja immer nur Tabelleninhalte, ein paar Seitenzähler oder andere 
simple Marken die sich ändern, der Rest ist Vorlage und die klein und 
primitiv.

Der Hinweis mit den Sicherheitslücken zu Chromium ist in diesem 
Zusammenhang völlig fehl am Platz und zeugt von nicht verstandener 
Problematik. Zudem war Chromium nur ein Beispiel von vielen um das PDF 
zu generieren.

von Walter Tarpan (Gast)


Lesenswert?

Perle schrieb:
> Ab >= n Zeilen generierst du ein neues PDF mit enstspr. Seitenzahlen,...

Naja, also das ist im Vergleich zum PDFlatex-Ansatz allerdings 
wirklich kein Komfortgewinn. Da sind die eingebauten Mechanismen 
deutlich ausgereifter.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Walter Tarpan schrieb:
> Wenn wir ehrlich sind, ergibt langer Fließtext in Tabellen ohnehin wenig
> Sinn, da wird dann massiv Spaltenplatz verschenken.

Das war dann auch meine Idee, bei der ich aufgehört habe, mir da
irgendwie (vorerst) weitere Gedanken drum zu machen.  Seitenweise
nur zwei Drittel der Seitenbreite zu bedrucken, kann ja eigentlich
nicht richtig sinnvoll sein.

Perle schrieb:
> Der Hinweis mit den Sicherheitslücken zu Chromium ist in diesem
> Zusammenhang völlig fehl am Platz und zeugt von nicht verstandener
> Problematik.

Sicherheitsproblematiken waren aber, soweit ich mich erinnere,
wesentliche Beweggründe, warum beispielsweise Java gar nicht erst in
die Tüte kommen soll.

> Zudem war Chromium nur ein Beispiel von vielen um das PDF zu generieren.

Je weiter weg du aber von „modernen Browsern“ bist, um so schlechter
dürfte es mit einer auch nur halbwegs exakten Formatierung des CSS
im Ausdruck werden.  Von vernünftiger Absatzformatierung oder gar
Silbentrennung kann man dann wohl sowieso nur noch träumen.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Hallo allerseits,

danke für die rege beteiligung.

@Jörg: Fragen kommen schon noch, ich kumuliere gerade :-)

Momentan siehts minütlich superer aus (super, superer, am supersten)

HTML rendern: Hätte ich versucht, kannst du vergessen wenn du saubere 
Kopf- und Fußzeilen haben willst. Dafür ist HTM schlicht nicht gemacht. 
in meinem Fall ist dabei die herausforderung der lange Fließtext, der 
dynamisch umgebrochen werden muss. Da ist nix mit "zeilen zählen"...

mit Office rendern: machen wir bei anderen Reports mit Excel. geht mehr 
schlecht als recht. Problem 1: Excel-Kopf- und Fußzeilen sind eine 
katastrophe. Problem 2: Sehr oft bleibt der Excel-batch stehen mit "der 
Standarddrucker ist nicht mehr verfügbar" (Dreckszeug, elendes...)

: Bearbeitet durch User
von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Hi Michael,

dann probiere es halt doch einmal direkt.

Kopf- und Fußzeile definieren und fest positionieren, dann Zeilen
zählen und den Kram wegschreiben. Man muß weder komprimieren noch
unbedingt komplexeste Grafiken in ein PDF einbauen.

Die obj-Liste erzeugen, dabei die Positionen merken und Schluß als
Crosreference ausgeben ist relativ einfach.

HTML ist halt kein Layout- oder Textprogramm.

von Perle (Gast)


Lesenswert?

Joachim Drechsel schrieb:
> Hi Michael,
>
> dann probiere es halt doch einmal direkt.
>
> Kopf- und Fußzeile definieren und fest positionieren, dann Zeilen
> zählen und den Kram wegschreiben. Man muß weder komprimieren noch
> unbedingt komplexeste Grafiken in ein PDF einbauen.
>
> Die obj-Liste erzeugen, dabei die Positionen merken und Schluß als
> Crosreference ausgeben ist relativ einfach.
>
> HTML ist halt kein Layout- oder Textprogramm.
Äh doch, wenn man von Stylesheets schon mal was gehört hat und nicht auf 
dem Kenntnissstand von HTML deutlich kleiner Version 5 ist, sowas ist 
Kinderkram. Selbst mit Holzhammermethoden aus der Steinzeit wie Frames 
bekommt man das hin. Ausser Silbentrennung geht das oben alles.
Wenn das allerdings schon eine Hürde ist, dann ist LaTex doch der 
bessere Weg allerdings muss man dort auch wissen was man tut, insofern 
schenkt sich das nix. Braucht man die Silbentrennung kann man LaTeX 
nehmen oder Office.

Gerade mal nachgeschaut was mit dem Perlmodul Win32 geht:
Du kannst auch direkt von Perl aus auf Officemacros zugreifen, COM, OLE 
-> damit geht alles, was sonst unter Windows von anderen 'hauseigenen' 
Sprachen automatisierbar ist. Drucken in PDF kannst du so auch 
initieren.

Macro definieren:
Sub Drucken()
Application.PrintOut filename:="", _
Range:=wdPrintAllDocument, _
Item:=
wdPrintDocumentContent, _
copies:=1, _
Pages:="", PageType:=wdPrintAllPages, _
Collate:=True, Background:=False,
PrintToFile:=True
' PDF option entsprechend setzen, bin jetzt zu faul zum nachschlagen
End Sub


Das ruftst du dann von Perl aus auf:
use Win32::OLE;
$word = new Win32::OLE 'Word.Application'
or die "Fehler!";
$word->{Visible} = 0;
$word->Documents->Open(‘c:/vorlage.doc’);
$word->Application->Run("Drucken");
$word->Quit();

Also ehrlich gesagt wenn Office verfügbar ist würde ich das so machen, 
dann brauchst du Perl nur noch um die Aktion anzustossen. Eigentlich 
brauchst du nicht mal mehr Perl, hauseigene Scriptsprache reicht schon, 
Powershell,... je nachdem was auf dem Server installiert ist.

Um entspr. deine Vorlage zu generieren kannst du auch ein Macro 
definieren, da kannst du dann komfortabel auf Abschnitte, Tabellen, 
beliebig zugreifen.

Weiss nicht wo deine Daten herkommen, dementsprechend musst du sie 
einlesen
oder mit Perl,... vorformatieren,... je nachdem was für dich einfacher 
ist.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Perle schrieb:
> Also ehrlich gesagt wenn Office verfügbar ist würde ich das so machen,

Ich habs doch oben schon geschrieben: Wir machen das schon so! Aber das 
funktioniert ganz schlecht: a) mit Excel kriegt man solche Reports so 
nciht hin (allein wegen der Kopfzeile, Logo etc), und b) wenn Excel 
(oder Office allgemein) keinen Standarddrucker findet, startet es nicht. 
Und der Standarddrucker ist schnell (versehentlich) verstellt, da reicht 
eine falsche RDP-Anmeldung!

von Michael R. (Firma: Brainit GmbH) (fisa)


Angehängte Dateien:

Lesenswert?

So, die erste Frage: das versteh ich nicht:
1
\documentclass[10pt,a4paper,oneside]{article}
2
\renewcommand{\familydefault}{\sfdefault}
3
\usepackage[a4paper,top=1cm, bottom=5cm, left=2.5cm, right=1.5cm, includeheadfoot]{geometry}
4
\usepackage[utf8]{inputenc}
5
\usepackage{array}
6
\begin {document}
7
\begin{tabular}{|>{\centering\arraybackslash}m{2cm}|m{9cm}|>{\centering\arraybackslash}m{2cm}|>{\centering\arraybackslash}m{2cm}|}
8
  \hline
9
  \textbf{A} & \textbf{B} & \textbf{C} & \textbf{D}\\
10
  \hline
11
  xxx \newline yyy &
12
  blahfasel \newline the quick brown fox jumps \newline over the lazy dog & REI & 2014-09-29\\
13
  \hline
14
\end{tabular}
15
\end {document}

Das Ergebnis sieht aus wie im angehängen PDF, was mich stört ist dass 
die erste der beiden Zeilen in Spalte A nicht zentriert ist. Wenn ich 
noch mehr zeilen einfüge (mit \newline getrennt) sind alle bis auf die 
letzte nach links verschoben.

von Walter Tarpan (Gast)


Lesenswert?

Ich hab's mal schnell probiert - das Problem ist aber knifflig. 
p-Tabellenspalten und zentriert sind für LaTeX nicht unbedingt eine 
ideale Kombination, zumal "zentriert" auch die automatische 
Silbentrennung ausschaltet (die gibt es nur im Blocksatz).

von Walter Tarpan (Gast)


Lesenswert?

P.S.: Ich würde also mit normalen p-Spalten anfangen, wenn die Tabelle 
erst einmal vollständig ist gibt es oft wenig Grund, zu "zentriert" zu 
wechseln.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Walter Tarpan schrieb:
> p-Tabellenspalten und zentriert sind für LaTeX nicht unbedingt eine
> ideale Kombination, zumal "zentriert" auch die automatische
> Silbentrennung ausschaltet (die gibt es nur im Blocksatz).

Die drei Spalten möchte ich schon gerne zentriert haben. Spalte 1 
enthält im Endeffekt eine Zahl (1..99) und darunter ein Wort (eins von 
drei möglichen, also keine Silbentrennung nötig), Spalte C ein 
dreibuchstabiges kürzel, spalte D ein Datum.

von Walter Tarpan (Gast)


Lesenswert?

Naja, für zentriert ohne Zeilenumbruch sind die klassischen "c"-Spalten 
da.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Walter Tarpan schrieb:
> Naja, für zentriert ohne Zeilenumbruch sind die klassischen "c"-Spalten
> da.

Denen kannste aber keine Breite vorgeben.

von Susi (Gast)


Angehängte Dateien:

Lesenswert?

Ich hoffe, folgender Code hilft weiter. Er enthält einige zusätzliche 
Definition für die Spalten: horizontalen Abstand entfernen, \newline 
umdefinieren.
1
\documentclass[10pt,a4paper,oneside]{article}
2
\renewcommand{\familydefault}{\sfdefault}
3
\usepackage[a4paper,top=1cm, bottom=5cm, left=2.5cm, right=1.5cm, includeheadfoot]{geometry}
4
\usepackage[utf8]{inputenc}
5
\usepackage{array}
6
\begin{document}
7
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
8
\begin{tabular}{|C{2cm}|m{9cm}|C{2cm}|C{2cm}|}
9
  \hline
10
  \textbf{A} & \textbf{B} & \textbf{C} & \textbf{D} \\
11
  \hline
12
xxx \newline yyy & blahfasel \newline the quick brown fox jumps \newline over the lazy dog & REI & 2014-09-29\\
13
  \hline
14
\end{tabular}
15
\end {document}

Die Lösung wurde in folgendem Thread gefunden: 
http://tex.stackexchange.com/questions/12703/how-to-create-fixed-width-table-columns-with-text-raggedright-centered-raggedlef

von Walter Tarpan (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Walter Tarpan schrieb:
>> Naja, für zentriert ohne Zeilenumbruch sind die klassischen "c"-Spalten
>> da.
>
> Denen kannste aber keine Breite vorgeben.

Das stimmt. Zumindest nicht direkt. Man könnte nur mit \phantom in einer 
Zelle eine Mindestbreite erzwingen.

von Sven (Gast)


Lesenswert?

Wenn ihr Probleme mit überlaufenden Zellen (nach unten hin) habt. Leider 
geht es nur, wenn die Sachen umbrechbar (THIS_Is_A_Cool_filnemae_bla_bla 
... wird ja nicht wirklich umgebrochen) sind:
1
\makeatletter
2
\newbox\cut@desc
3
\newenvironment{cutlines}[1][2]{%
4
 \@tempdima=#1\relax
5
 \setbox\cut@desc\vbox\bgroup
6
   \parskip=0pt
7
}{%
8
 \egroup
9
 \vsplit\cut@desc to \@tempdima
10
}

Example code:
1
\begin{cutlines}[3\baselineskip] % 3 lines only
2
\lipsum
3
\end{cutlines}


Another code, which uses a command:
1
\newsavebox\descripbox
2
\newsavebox\partialbox
3
\newcommand\vtruncate[2]{%
4
\setbox\descripbox\vbox{{#2\par}}%
5
\setbox\partialbox\vsplit\descripbox to #1\relax
6
\vtop{\unvbox\partialbox}%
7
% or use \par\unvbox\partialbox
8
}

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Susi schrieb:
> Ich hoffe, folgender Code hilft weiter.

Super, Danke, das hat geholft!

von Daniel F. (df311)


Lesenswert?

Perle schrieb:
>> HTML ist halt kein Layout- oder Textprogramm.
> Äh doch, wenn man von Stylesheets schon mal was gehört hat und nicht auf

css ist für das layout zuständig, html für auszeichnungen und die 
struktur (und meta-daten).
aber html ist NICHT für das layout zuständig (w3m funktioniert z.b. ganz 
gut ohne css bzw. interpretiert ein paar farben, aber das wars dann 
schon im großen und ganzen)

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Daniel F. schrieb:
> Perle schrieb:
>>> HTML ist halt kein Layout- oder Textprogramm.
>> Äh doch, wenn man von Stylesheets schon mal was gehört hat und nicht auf
>
> css ist für das layout zuständig, html für auszeichnungen und die
> struktur (und meta-daten).
> aber html ist NICHT für das layout zuständig (w3m funktioniert z.b. ganz
> gut ohne css bzw. interpretiert ein paar farben, aber das wars dann
> schon im großen und ganzen)

HTML bildet eine logische Struktur, CSS das Layout ;)

von Adam Lochter (Gast)


Lesenswert?

Daniel F. schrieb:
> css ist für das layout zuständig, html für auszeichnungen und die
> struktur (und meta-daten).
> aber html ist NICHT für das layout zuständig (w3m funktioniert z.b. ganz
> gut ohne css bzw. interpretiert ein paar farben, aber das wars dann
> schon im großen und ganzen)

Was willst du uns jetzut mit deiner Wortklauberei sagen? CSS wird im 
Zusammenhang mit HTML bentzt dass HTML formal kein Layout definiert 
weiss jeder der damit zu tun hat. Da wollte mal wieder einer 
Klugscheissen, ne?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Könntet ihr bitte eure CSS/HTML-Diskussion in einem separaten Thread
führen?  Michael hatte doch wohl deutlich genug zu verstehen gegeben,
dass er mit der LaTeX-Lösung bereits kurz vorm Ziel ist.  Die
Lösungsansätze sind schließlich vor knapp drei Wochen diskutiert worden.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Abschluss: ich konnte mit toller Unterstützung von Jörg (und seiner 
besseren Hälfte) die Reports in einer sehr guten Qualität mit TeX 
erstellen, das funktioniert wirklich ganz ausgezeichnet! nebenbei bin 
ich überrascht, wie schnell TeX arbeitet, das Erstellen des 
TeX-Quellcodes mit perl geht ja sowieso blitzschnell, aber auch die 
Umwandlung in PDF ist in etwa 1-2 Sekunden erledigt.

insgesamt voller Erfolg auf der ganzen Linie! Angenehmer Nebeneffekt: 
ich habe endlich etwas TeX gelernt, und bin für zukünftige Aufgaben in 
diese Richtung gewappnet!

herzlichen Dank nochmal an alle Unterstützer, allen voran natürlich Jörg 
& seine Frau!


lg Michi

von Daniel F. (df311)


Lesenswert?

Michael Reinelt schrieb:
> die Reports in einer sehr guten Qualität mit TeX
> erstellen, das funktioniert wirklich ganz ausgezeichnet!

tja, es geht halt nichts über ein textsatzsystem anstatt irgendeiner 
unsäglichen software (office-suiten quer durch die bank) oder einer 
pdf-library die genausowenig auf den satz achtet.

zum schluss bleibt nur noch die Frage \TeX oder \LaTex? oben war von 
\LaTeX die rede, in deinem letzten beitrag von \TeX ;-)

: Bearbeitet durch User
von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Daniel F. schrieb:
> zum schluss bleibt nur noch die Frage \TeX oder \LaTex? oben war von
> \LaTeX die rede, in deinem letzten beitrag von \TeX ;-)

Wenn ich das so genau wüsste :-)

ich verwende die TeXlive-Installation unter Windows (und auch unter 
Linux, wo ich entwickle), die bringt vermutlich LaTeX (neben ein paar 
anderen Makro-Paketen) mit.

Zum Umwandeln in PDF verwende ich "pdflatex", was wohl auch auf LaTeX 
schließen lässt.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Daniel F. schrieb:
> \TeX oder \LaTex?

Letzteres.  Plain TeX wäre nochmal 'ne andere Hausnummer.  Die hätte
zwar sicher die Aufgabe besser im Rahmen der Vorgabe lösen können,
aber Leute mit Know-How dafür sind leider wohl noch dünner gesiedelt
als bei LaTeX.

Es freut mich, dass auch mit Hilfe des Forums hier eine Lösung zustande
gekommen ist, mit der nicht nur du deine Aufgabe erledigt hast, Michi,
sondern mit der auch dein Kunde zufrieden ist.  Auf dass den Leuten
das Gefühl für einen ordentlichen Textsatz mal nicht völlig abhanden
kommen möge. ;-)  (In diesem Sinne auch ein wenig im Vermächtnis meines
Onkels, der mal vor vielen Jahrzehnten Schriftsetzer gelernt hatte. :)

von Daniel F. (df311)


Lesenswert?

Jörg Wunsch schrieb:
> Daniel F. schrieb:
>> \TeX oder \LaTex?
>
> Letzteres.

ich habs mir fast gedacht ;-) (\TeX ist mir eine (nicht ganz kleine) 
spur zu hart - da bleibe ich lieber bei latex. auch wenn die 
google-suche hin und wieder überhaupt nicht das ausspuckt was man 
eigentlich sucht :-)

Michael Reinelt schrieb:
> Zum Umwandeln in PDF verwende ich "pdflatex", was wohl auch auf LaTeX
> schließen lässt.

jep, latex - wobei (wenn ich mich nicht täusche) in texlive auch ein 
"nacktes" tex enthalten ist...

von Gustav (Gast)


Lesenswert?

Jörg Wunsch schrieb:
> Auf dass den Leuten
> das Gefühl für einen ordentlichen Textsatz mal nicht völlig abhanden
> kommen möge.

Da hat LaTeX natürlich erhebliche Mängel, aber wie das so ist mit dem 
Einäugigen unter den Blinden. :-)

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Gustav schrieb:
> Jörg Wunsch schrieb:
>> Auf dass den Leuten
>> das Gefühl für einen ordentlichen Textsatz mal nicht völlig abhanden
>> kommen möge.
>
> Da hat LaTeX natürlich erhebliche Mängel, aber wie das so ist mit dem
> Einäugigen unter den Blinden. :-)

Wer oder was wäre denn deiner Meinung nach ein "Sehender" was Textsatz 
betrifft?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Michael Reinelt schrieb:
> Wer oder was wäre denn deiner Meinung nach ein "Sehender" was Textsatz
> betrifft?

Ein gelernter Schriftsetzer?

von Gustav (Gast)


Lesenswert?

Michael Reinelt schrieb:
>> Da hat LaTeX natürlich erhebliche Mängel, aber wie das so ist mit dem
>> Einäugigen unter den Blinden. :-)
>
> Wer oder was wäre denn deiner Meinung nach ein "Sehender" was Textsatz
> betrifft?

Einen richtig Sehenden gibts nicht.

Am ehesten InDesign, aber da muß man selbst schon richtig Ahnung von 
Textsatz haben, um die Wahlfreiheiten richtig zu nutzen.

LaTeX ist halt "gut per Default".

Zeilenumbruch macht TeX ja super. Absätze auf Seiten umbrechen nicht. 
Das liegt aber auch an der Herkunft von anno dunnemal, da reichte die 
Rechenleistung schlicht nicht.

Das "normale" LaTeX (pdflatex) leistet sich aber auch viele, viele 
Schwächen: Unicode, OpenType-Features etc.

XeLaTeX, LuaTeX und Konsorten kümmern sich drum, aber halt alle für sich 
und inkompatibel.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.