Zum Hauptinhalt springen

Von jsreport migrieren

jsreport-Vorlagen mit der Handlebars-Engine und dem Rezept chrome-pdf oder chrome-image kommen fast unverändert zu Formfeed: Beide rendern mit Chromium, die chrome-Optionen von jsreport sind die Seiteneinstellungen von Formfeed, und Kopf- und Fußzeilenvorlagen nutzen dieselben Klassen pageNumber und totalPages. Anders ist, was jsreport als Code auf Ihrem Server ausführt: eigene Helfer und Skripte.

Vorlagen importieren​

Exportieren Sie aus jsreport, im Studio (Export) oder mit der CLI:

jsreport export templates.jsrexport --serverUrl=https://reports.fennlor.example

In der App: Vorlagen → Importieren → jsreport, wählen Sie die .jsrexport-Datei und die Vorlagen. Handlebars-Vorlagen mit einem chrome-Rezept sind vorausgewählt; Untervorlagen und Komponenten brauchen keinen eigenen Import, weil sie in die Vorlagen eingefügt werden, die sie verwenden. Analysieren zeigt je Vorlage einen Bericht, Entwürfe anlegen erstellt je eine Handlebars-Vorlage.

Mit der CLI, in einem Vorlagenprojekt:

formfeed import jsreport templates.jsrexport # alle Handlebars-chrome-Vorlagen
formfeed import jsreport templates.jsrexport --template invoices/invoice

Einstellungen​

format, width, height, landscape, die vier Ränder, displayHeaderFooter mit headerTemplate und footerTemplate, printBackground, scale, pageRanges und waitForNetworkIdle werden auf die Einstellungen der Vorlage abgebildet (Seiteneinrichtung im Editor), und title, author, subject und keywords aus pdfMeta werden zu den PDF-Metadaten. chrome-image-Vorlagen werden zu Bildvorlagen mit ihrer Viewport-Größe (1200 × 630, wenn der Export keine nennt), ihrem Typ (PNG oder JPEG), ihrer Qualität, fullPage und omitBackground als transparentem Hintergrund.

waitForJS (window.JSREPORT_READY_TO_START) hat keine direkte Entsprechung: Setzen Sie waitFor.selector in der settings.json der Vorlage oder in den settings der API-Anfrage, und lassen Sie Ihr Skript dieses Element anlegen, wenn es fertig ist. Das Einstellungsformular des Editors hat dafür kein Feld. PDF-Passwörter und mediaType: screen werden nicht importiert; der Bericht nennt beides. Für ein Passwort senden Sie post.password mit dem Rendering (ab dem Starter-Plan). Auch die Lokalisierungsdateien von jsreport werden nicht importiert: Legen Sie die Texte in den Übersetzungen der Vorlage ab und geben Sie sie mit dem Helfer t aus.

Assets​

{{asset "logo.png" "dataURI"}} und die übrigen Kodierungen werden aus dem Export aufgelöst: Bilder und Schriften bis 256 KB werden zu Data-URIs, Text-Assets (CSS, Skripte, Kodierungen utf8 und string) werden eingefügt, und ein Asset, das jsreport von einer http(s)-Adresse verlinkt, wird zu dieser Adresse. Größere Dateien, Assets, die der Export nicht enthält, und Assets, die vom jsreport-Server verlinkt sind, werden zu {{asset "logo.png"}} und im Bericht aufgeführt. Der Helfer asset von Formfeed zeigt auf die Dateibibliothek des Workspace: Laden Sie diese Dateien unter demselben Namen dort hoch (auf der Seite Dateien oder mit formfeed files push), dann lösen sich die Verweise auf; eine öffentliche HTTPS-URL an ihrer Stelle funktioniert ebenso. Eine Vorlage, die nach dem Einfügen ihrer Assets größer als 1 MB ist, ist im Bericht ein Fehler; laden Sie die großen Dateien stattdessen hoch. Die Syntax von jsreport 2, {#asset logo.png @encoding=dataURI}, wird genauso umgewandelt.

Untervorlagen​

{{childTemplate "invoices/lines"}} (und {#child invoices/lines} aus jsreport 2) wird durch den Inhalt der Untervorlage ersetzt, der dann mit denselben Daten rendert. Der Bericht nennt Untervorlagen, die der Export nicht enthält.

Komponenten​

{{component "./address"}} wird durch den Inhalt der Komponente ersetzt. An eine Komponente übergebene Eigenschaften werden nicht übernommen: Der eingefügte Inhalt sieht die umgebenden Daten, verweisen Sie also direkt auf diese Werte.

Helfer​

Eigene Helfer sind JavaScript, das jsreport auf Ihrem Server ausführt; Formfeed führt keinen eigenen Code aus. Der Bericht nennt jeden Helfer, den die Vorlage definiert, und jeder Aufruf eines solchen Helfers ist ein Fehler, weil er das Rendering scheitern ließe. Für die meisten Helfer gibt es eine eingebaute Entsprechung:

Typischer jsreport-HelferFormfeed
Zahlen und Beträge formatieren{{money total "EUR"}}, {{number qty 2}}
Datum formatieren mit moment{{date issued "dd.MM.yyyy"}}
Summen und Gesamtbeträge{{sum lines "total"}}
toJS{{{json value}}} (vom Importer umgewandelt)
QR-Codes und Barcodes<img src="{{qrcode url}}" alt="QR code">, <img src="{{barcode sku type="code128"}}" alt="Barcode {{sku}}">

Alles andere berechnen Sie in Ihrer Anwendung und senden es mit den Daten. Die pdf-utils-Helfer (pdfAddPageItem, pdfCreatePagesGroup) und module haben keine Entsprechung.

Engines​

Formfeed unterstützt Handlebars, Liquid und Jinja2. jsrender-, EJS- und Pug-Vorlagen werden als Handlebars-Entwürfe mit einem Fehler importiert: Schreiben Sie sie in einer der drei Sprachen neu. Eine Vorlage ohne Engine (none) wird zur Handlebars-Vorlage.

Rezepte​

chrome-pdf und chrome-image werden unterstützt, das html-Rezept wird zur PDF-Vorlage. Excel, Word und andere Rezepte werden gemeldet und zur Orientierung als PDF-Vorlagen importiert.

Skripte​

jsreport-Skripte (beforeRender, afterRender) laden meist Daten vor dem Rendern. Laden Sie diese Daten in Ihrer Anwendung und senden Sie sie mit der Render-Anfrage; Formfeed rendert, was es erhält.

pdf-utils​

Zusammenführen, Anhängen und Voranstellen sowie Kopfzeilen aus einer anderen Vorlage werden nicht importiert. Rendern Sie die Teile als eigene Dokumente oder fassen Sie sie in einer Vorlage mit Seitenumbrüchen ({{pageBreak}}) zusammen.

Beispieldaten​

Die Daten-Entität, auf die eine Vorlage verweist, wird zu ihrem Standard-Datensatz; Vervollständigung, Vorschau und die Prüfung des Berichts auf fehlende Variablen verwenden sie.

API umstellen​

Aus POST /api/report von jsreport wird ein Rendering. Der Import legt Entwürfe an, und die API rendert die veröffentlichte Version; veröffentlichen Sie also jede Vorlage zuerst. Die Anfrage nennt die Vorlage mit ihrem Slug (dem Namen der Vorlage in Kleinbuchstaben mit Bindestrichen) und sendet die Daten, die die Anfrage an jsreport enthielt:

curl https://api-eu.formfeed.dev/v1/renders \
-H "Authorization: Bearer ff_live_…" \
-H "Content-Type: application/json" \
-d '{ "template": "invoice", "data": { "number": "R-7", "total": 12.5 } }'