Eine Word-Vorlage in C# ohne Office ausfüllen
Jemand hat invoice.docx in Word erstellt, mit {{customer}} dort, wo der Name hingehört. Diese Anleitung zeigt, wie Sie die Datei aus C# ausfüllen: Text, sich wiederholende Tabellenzeilen und Bilder, und wie Sie das Ergebnis prüfen.
byte[] template = await HtmlToDocxConverter.ConvertAsync("<p>Customer: {{customer}}</p>");
byte[] filled = DocxEditor.ReplaceText(template, new Dictionary<string, string>
{
["{{customer}}"] = "Contoso Ltd",
});Platzhalter, die Word aufteilt
- Word teilt einen Platzhalter wie
{{customer}}oft in drei oder vier separate<w:t>-Elemente auf, zum Beispiel nach der Korrektur eines Tippfehlers oder einer Rechtschreibprüfung. - Ein Suchen und Ersetzen im XML findet dann nichts und meldet Erfolg.
ReplaceTextfügt die Teile wieder zusammen, bevor es vergleicht.ReplaceTexterreicht auch Kopf- und Fußzeilen, sodass auch ein Name im Briefkopf ersetzt wird.- Ein Schlüssel ohne Platzhalter lässt das Dokument unverändert. Ein Platzhalter ohne Schlüssel bleibt als wörtlicher Text stehen, etwa
{{unknown}}.
Eine Zeile pro Datensatz
- Legen Sie eine Vorlagenzeile in die Tabelle, und
FillRowsklont sie einmal für jeden Datensatz. - Jede neue Zeile behält Rahmen, Schattierung, Schriftarten und Spaltenbreiten der Vorlagenzeile.
- Erweitern Sie zuerst die Zeilen, dann füllen Sie Einzelwerte.
FillRowsklont die Zeile, daher wird ein Platzhalter, der schon darin steht, in jede Zeile kopiert. - Der Collection-Name im Platzhalter,
{{item.Desc}}, entspricht dem Argumentcollection,"item".
Ein Bild einsetzen
ReplaceImageersetzt einen Text-Platzhalter durch Bild-Bytes.- Größen werden in Punkt angegeben. Geben Sie eine Größe an, und die andere skaliert mit, damit das Seitenverhältnis erhalten bleibt.
- Das Format bestimmen die Bytes, nie ein Dateiname. Eine Datei namens
logo.png, die JPEG-Bytes enthält, wird als das JPEG gelesen, das sie ist.
Das Ausfüllen prüfen
ExtractTextgibt den Text des Dokuments als String zurück, sodass ein Test prüfen kann, ob das Ausfüllen funktioniert hat.- Standardmäßig lässt es Kopf- und Fußzeilen weg. Übergeben Sie
includeHeadersAndFooters: true, um sie einzubeziehen.
Was es nicht kann
- Kopfzeilen pro Abschnitt und gerade/ungerade (gespiegelte) Seiten werden nicht unterstützt. Eine abweichende erste Seite schon.
DocxBlockhat vier Factory-Methoden,Heading,Paragraph,TableundImage. Es ist bewusst kein Dokumentmodell; für echte Kontrolle über das Layout verwenden Sie eine Vorlage.- Die Schriftarten im PDF hängen von der Maschine ab, die konvertiert. Ohne installierte Schriftarten greift das PDF auf die Base-14-Standardschriften zurück. Beide werden dargestellt, sind aber nicht byte-identisch.
Installation
dotnet add package Ank.DocToolkitIn der DocToolkit-Dokumentation lesenNuGetGitHub