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

Community

brevier import mahnung.docx -o templates/mahnung

Der 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:

mahnung.html
<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-header und docx-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:

mahnung.schema.json
{
  "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.pdf

Weiter: Den Aufruf ersetzen. Ein durchgehendes Beispiel steht unter Beispiel.