Import
Eine Word-Datei importieren
Importieren Sie einen Word-Brief mit Serienbrieffeldern oder Tags, und sehen Sie, was der Import mit Feldern, Formatvorlagen und Schema macht.
Auf dieser Seite
brevier import mahnung.docx -o templates/mahnungDer Import schreibt drei Dateien: mahnung.html, mahnung.css und
mahnung.schema.json. Er schreibt keine sample.json. Seine Eingabe ist eine
Word-Datei, in der eine Vorlagenbibliothek markiert hat, wo die Daten hingehören.
Der Datencode dieser Bibliothek bleibt, wie er ist.
Die Felder, die der Import liest
| In Word | In der Vorlage |
|---|---|
MERGEFIELD KundeName |
{{ KundeName }} |
$kunde.name (Velocity: XDocReport, docx4j) |
{{ kunde.name }} |
Eine Tabellenzeile mit #foreach($p in $posten) |
Eine Zeile, die über posten wiederholt: {{#each posten}} |
{{ a.b }} und {%tr for p in a %} (Jinja: docxtpl) |
Ein Tag und eine wiederholte Zeile |
{kunde.name} und {#posten} (docxtemplater) |
Ein Tag und eine wiederholte Zeile |
{{Kunde.Name}} und {{#Posten}} (DocxTemplater für .NET) |
Ein Tag und eine wiederholte Zeile |
Ein Beispiel: die Mahnung
Die Mahnung ist ein Mahnbrief mit Kundenanschrift, einer Tabelle offener
Positionen sowie Kopf- und Fußzeile. Alle Namen und Zahlen sind erfunden. Das ist
die Velocity-Fassung, wie XDocReport sie liest. Die rechte Spalte zeigt, was der
Import in mahnung.html geschrieben hat.
| In der Word-Datei | In mahnung.html |
|---|---|
Serienbrieffeld $kunde.name |
<p>{{ kunde.name }}</p> |
Kunde: $kunde.name |
<p>Kunde: {{ kunde.name }}</p> |
Zahlungserinnerung Nr. $mahnung.nummer in der Formatvorlage Überschrift 1 |
<h1 class="Heading1">Zahlungserinnerung Nr. {{ mahnung.nummer }}</h1> |
| Die Wörter „keinen Zahlungseingang“ in der Zeichenformatvorlage Betont | <span class="Betont">keinen Zahlungseingang</span> |
Kopfzeile: $mahnung.firma · Forderungsmanagement |
<div class="docx-header"> mit dem Absatz |
Fußzeile: IBAN $mahnung.iban |
<div class="docx-footer"> mit dem Absatz |
Die Tabelle in der Word-Datei hat eine Kopfzeile und eine Zeile, die wiederholt
wird. Die Zeile beginnt mit dem Serienbrieffeld
@before-row#foreach($p in $mahnung.posten) und endet mit @after-row#end. Ihre
Zellen enthalten $p.bezeichnung, $p.menge und $p.betrag. Der Import
schreibt:
<table class="MahnTabelle">
<thead>
<tr><th><p><strong>Bezeichnung</strong></p></th><th><p><strong>Menge</strong></p></th><th><p><strong>Betrag</strong></p></th></tr>
</thead>
<tbody>
{{#each mahnung.posten}}<tr><td><p>{{ bezeichnung }}</p></td><td><p>{{ menge }}</p></td><td><p>{{ betrag }}</p></td></tr>{{/each}}
</tbody>
</table>Derselbe Brief, für docxtpl, docxtemplater oder DocxTemplater für .NET
geschrieben, ergibt dieselbe mahnung.html.
Formatvorlagen, Kopf- und Fußzeile
- Jede Word-Formatvorlage, die die Datei nutzt, wird zu einer CSS-Regel mit dem
Namen der Formatvorlage, zum Beispiel
.Heading1(font-size: 16pt, fett, Farbe#1F3864) und.Betont(fett, Farbe#C00000). - Seitengröße und Ränder des Dokuments werden zu
@page. - Kopf- und Fußzeile der Seite werden zu den Blöcken
docx-headerunddocx-footer. Das CSS setzt sie mit@top-center { content: element(docx-header); }in den Seitenrand, und die Fußzeile entsprechend. - Eine Schrift, die in die Word-Datei eingebettet ist, wird nicht kopiert.
Installieren Sie die Schrift auf dem Rechner, der setzt, oder laden Sie sie mit
@font-face.
Das Schema
Das Schema führt jedes Feld der Vorlage auf. Jeder Wert ist ein string, und eine
wiederholte Zeile wird zu einem Array von Objekten:
{
"type": "object",
"properties": {
"mahnung": {
"type": "object",
"properties": {
"nummer": { "type": "string", "title": "nummer" },
"posten": {
"type": "array",
"items": {
"type": "object",
"properties": {
"bezeichnung": { "type": "string", "title": "bezeichnung" },
"menge": { "type": "string", "title": "menge" },
"betrag": { "type": "string", "title": "betrag" }
}
}
}
}
}
}
}Die echte Datei führt alle Felder von mahnung und kunde auf, und jedes Objekt
hat required und "additionalProperties": false. Die Engine weist ein Feld ab,
das das Schema nicht aufführt.
Ändern Sie den Typ eines Feldes dort, wo die Word-Datei ihn nicht sagen konnte,
zum Beispiel "type": "number" für menge.
Wenn Ihr Java-Code Objekte über den Namen ihrer Klasse bindet
(Schritt 2),
verschieben Sie jedes Objekt nach $defs, mit dem Namen der Klasse, und lassen
Sie seine Wurzel mit $ref auf den Typ zeigen:
{
"properties": { "kunde": { "$ref": "#/$defs/Kunde" } },
"$defs": {
"Kunde": {
"type": "object",
"properties": { "name": { "type": "string" } }
}
}
}Das Ergebnis prüfen
Öffnen Sie mahnung.html und mahnung.css und vergleichen Sie sie mit der
Word-Datei. Der Import schreibt, was er lesen kann. Setzen Sie den Brief dann mit
Daten:
brevier pdf templates/mahnung/mahnung.html --data mahnung.json -o mahnung.pdfWeiter: Den Aufruf ersetzen. Ein durchgehendes Beispiel steht unter Beispiel.