Ich habe ein Python Programm geschrieben welches mir immer die aktuellen Daten aus verschiedenen Listen liefert.
Nun möchte ich dies gut formatiert in ein PDF darstellen. Wo auch fixe Texte enthalten sein sollen zu genaueren Erklärung die sich aber nicht ändern werden, ebenfalls müsste auch Tabellen erstellbar sein. ich habe jetzt schon viel im Internet gesucht bin leider nicht richtig fündig geworden.
Welches Tool bzw. Python Plugin würdet ihr empfehlen und gibt es dafür auch eine gute Anleitung bzw Tutorial.
PDF Erstellung mit Python
- __blackjack__
- User
- Beiträge: 13080
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
`reportlab` oder LaTeX sind da glaube ich die beiden üblichen Antworten für.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
ReportLab ist der de-facto Standard zum Bauen von PDF. ReportLab ist recht mächtig, mit Platypus hast du auch eine High-Level Möglichkeit, PDFs zu bauen.
Falls du LeTeX kannst das manuellen Bauen ein LeTeX Dokument ggf. über eine Template-Engine, sicher auch eine Möglichkeit.
Ich selber nutze ReportLab, mit ein bisschen Einarbeitung ist das ganz gut zu handhaben.
Gruß, noisefloor
ReportLab ist der de-facto Standard zum Bauen von PDF. ReportLab ist recht mächtig, mit Platypus hast du auch eine High-Level Möglichkeit, PDFs zu bauen.
Falls du LeTeX kannst das manuellen Bauen ein LeTeX Dokument ggf. über eine Template-Engine, sicher auch eine Möglichkeit.
Ich selber nutze ReportLab, mit ein bisschen Einarbeitung ist das ganz gut zu handhaben.
Gruß, noisefloor
- __blackjack__
- User
- Beiträge: 13080
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Es gäbe da noch die Report Markup Language (RML) für Reportlab, entweder kommerziell direkt von Reportlab, oder als alternative Implementierung: https://github.com/zopefoundation/z3c.rml
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 5
- Registriert: Montag 23. Juli 2018, 12:23
Gibt es eine gute Anleitung für Platypus weil habe ich habe es mal mit Canvas befehlen und drawString versucht. Aber da ich nicht weis wie lang die Texte sind hatte ich immer Probleme mit den Zeilen Umbrüchen da er über die Seite hinaus geschrieben hatte.
In Latex habe ich mein Dokument bis jetzt immer Manuel erstellt, wo ich die werte aus den Tabellen Manuel übertagen hatte. Dies wollte ich automatisieren, leider ändert sich immer die Anzahl der ganzen Werte und ich habe keine gute Möglichkeit gefunden mein Latex Dokument über Python zu füllen. Bei der installation von PythonTex bin ich nicht wirklich vorwärts gekommen.
In Latex habe ich mein Dokument bis jetzt immer Manuel erstellt, wo ich die werte aus den Tabellen Manuel übertagen hatte. Dies wollte ich automatisieren, leider ändert sich immer die Anzahl der ganzen Werte und ich habe keine gute Möglichkeit gefunden mein Latex Dokument über Python zu füllen. Bei der installation von PythonTex bin ich nicht wirklich vorwärts gekommen.
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Gruß, noisefloor
Diesen Weg willst du eigentlich auch nicht nutzen, weil zu low-level. Wie gesagt, nutz' Platypus aus ReportLab, das kümmert sich automatisch um Zeilenumbrüche, Abstände zwischen Absätzen, Seitenumbrüche etc. Die Nutzung ist in der ReportLab Doku erklärt.Gibt es eine gute Anleitung für Platypus weil habe ich habe es mal mit Canvas befehlen und drawString versucht.
Gruß, noisefloor
-
- User
- Beiträge: 5
- Registriert: Montag 23. Juli 2018, 12:23
Also dies ist mein Latex File was ich mal angelegt hatte. Die Items welche ich noch eintragen muss habe ich in einer Liste die ich mit python erstellt habe. Als kurzes beispiel ich habe den einen monat mal 10 dann auch mal 50 kunden diese sollen dann alle in der \section{Customers} aufgeführt sein usw.
\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\begin{document}{%%ReqID}
\title{Customers and order situation}
\maketitle
\tableofcontents
\newpage
\section{Introduction}
What is required?
\section{Customers}
Lists of all relevant Costomers for this month. Required information:
\begin{itemize}
\item ID :
\item prename:
\item name:
\item order type:
\item LAST ACTIVITY:
\end{itemize}
\section{Ordes}
Lists of all relevant orders for this month.
\begin{itemize}
\item Order ID:
\item Order Description:
\item Costomer:
\item executor:
\end{itemize}
\section{Traceability}
\\\\
\begin{tabular}{|c|c|c|}
excecutor & Order ID & occupancy \\
\hline
exec1 & OrID & occ \\
exec1 & OrID & Occ \\
\end{tabular}
\\\\
\end{document}
-
- User
- Beiträge: 5
- Registriert: Montag 23. Juli 2018, 12:23
- __blackjack__
- User
- Beiträge: 13080
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Thomas_Lindinger: Das Stichwort Template-Engine wurde ja schon erwähnt. Ich persönlich mag Jinja2. Da müsste man die Begrenzer ändern weil die Voreinstellung für LaTeX etwas ungünstig ist.
Ich habe es selbst noch nicht verwendet, aber das `latex`-Package sieht vielversprechend aus: https://pypi.org/project/latex/
Ich habe es selbst noch nicht verwendet, aber das `latex`-Package sieht vielversprechend aus: https://pypi.org/project/latex/
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- __blackjack__
- User
- Beiträge: 13080
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Mit Jinja2 und dem `latex`-Package könnte das dann beispielsweise so aussehen:
Code: Alles auswählen
\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\begin{document}{%%ReqID}
\title{Customers and order situation}
\maketitle
\tableofcontents
\newpage
\section{Introduction}
What is required?
\section{Customers}
Lists of all relevant customers for this month. Required information:
\begin{itemize}
%- for customer in customers
\item ID: \VAR{customer.id}
\item prename: \VAR{customer.prename}
\item name: \VAR{customer.name}
\item order type: \VAR{customer.order_type}
\item LAST ACTIVITY: \VAR{customer.last_activity}
%- endfor
\end{itemize}
\section{Orders}
Lists of all relevant orders for this month.
\begin{itemize}
%- for order in orders
\item Order ID: \VAR{order.id}
\item Order Description: \VAR{order.description}
\item Customer: \VAR{order.customer}
\item Executor: \VAR{order.executor}
%- endfor
\end{itemize}
\section{Traceability}
\\\\
\begin{tabular}{|c|c|c|}
excecutor & Order ID & occupancy \\
\hline
%- for spam in things_that_need_better_names
\VAR{spam.executor} & \VAR{spam.order_id} & \VAR{spam.occupancy} \\
%# Oder alternativ wenn die `spam`-Objekte die `order`-Objekte aus
%# dem Orders-Abschnitt als Attribute haben:
\VAR{spam.executor} & \VAR{spam.order.id} & \VAR{spam.occupancy} \\
%- endfor
\end{tabular}
\\\\
\end{document}
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Minibeispiel mit ReportLab:
Gruß, noisefloor
Minibeispiel mit ReportLab:
Code: Alles auswählen
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import SimpleDocTemplate, Paragraph,Table, \
ListFlowable, ListItem, Spacer, TableStyle
from reportlab.lib import colors
all_data = [[1, 'foo', 'mail'], [2, 'bar', 'online']]
doc = SimpleDocTemplate('test.pdf')
styles = getSampleStyleSheet()
story = []
story.append(Paragraph('ein bisschen Einleitungstext', styles['Normal']))
for data in all_data:
list_elements = []
for item in data:
list_elements.append(ListItem(Paragraph(str(item),
styles['Normal']),
leftIndent=25))
story.append(ListFlowable(list_elements,
bulletType='bullet',
start='·',
leftIndent=10))
story.append(Spacer(10, 10))
table = Table(all_data)
table.setStyle((TableStyle([('BOX',( 0,0), (-1,-1), 0.5, colors.black),
('INNERGRID', (0,0), (-1,-1), 0.5, colors.black)])))
story.append(table)
doc.build(story)
Hallo zusammen,
ich hefte mich mal an diesen Thread.
Verzweifelt versuche ich pythontex in LaTeX zu verwenden.
Habe auch schon das Paket pythontex in MikTex installiert.
Dennoch funktioniert es in TexMaker nicht und \usepackage{pythontex} wir rot unterstrichen.
Über einen hilfreichen Ratschlag würde ich mich sehr freuen.
Für Windows 10 64
ich hefte mich mal an diesen Thread.
Verzweifelt versuche ich pythontex in LaTeX zu verwenden.
Habe auch schon das Paket pythontex in MikTex installiert.
Dennoch funktioniert es in TexMaker nicht und \usepackage{pythontex} wir rot unterstrichen.
Über einen hilfreichen Ratschlag würde ich mich sehr freuen.
Für Windows 10 64