CSharp Docx Bookmarks mit Microsoft Interop füllen und entfernen
Ich verwende eine Docx-Vorlage, aktualisiere einige DocVariables und möchte ein Bild mit einem zuvor gesetzten Lesezeichen hinzufügen. Das funktioniert, aber es fügt weiterhin Bilder zur gleichen Vorlage hinzu.
Ich habe einige Zeilen entfernt, da der relevante Teil das Hinzufügen und Entfernen des Bildes zum und vom Lesezeichen ist. Ziel ist, dass es PDFs aus der Docx-Vorlage generiert, aber nur ein Bild enthält und somit in der Vorlage keines gespeichert wird.
Ich habe versucht, zuvor hinzugefügte Bilder mit dem folgenden Code zu entfernen:
Trotz dessen sind auf dem 10. PDF, 10 Bilder, auf dem 20., 20 usw.
Hat hier jemand eine Idee?
Vielen Dank im Voraus
Ich habe einige Zeilen entfernt, da der relevante Teil das Hinzufügen und Entfernen des Bildes zum und vom Lesezeichen ist. Ziel ist, dass es PDFs aus der Docx-Vorlage generiert, aber nur ein Bild enthält und somit in der Vorlage keines gespeichert wird.
Ich habe versucht, zuvor hinzugefügte Bilder mit dem folgenden Code zu entfernen:
while (bookmarkRange.InlineShapes.Count > 0)
{
bookmarkRange.InlineShapes[1].Delete();
}
Trotz dessen sind auf dem 10. PDF, 10 Bilder, auf dem 20., 20 usw.
private void Convert()
{
// Exemplarische Pfade
string wordTemplatePath = "C:\\Users\\Name\\Desktop\\Neuer_Ordner\\Template.docx";
var word = new Microsoft.Office.Interop.Word.Application();
var template = word.Documents.Open(wordTemplatePath);
word.Visible = false;
// Für jede Zeile
for (int i = 2; i <= totalRows; i++)
{
// Bookmark
Microsoft.Office.Interop.Word.Bookmark bookmark = template.Bookmarks["Signatur"];
// Position
Microsoft.Office.Interop.Word.Range bookmarkRange = bookmark.Range;
while (bookmarkRange.InlineShapes.Count > 0)
{
bookmarkRange.InlineShapes[1].Delete();
}
// Pfad
string signatureFileName = Person + ".png";
string signatureFilePath = Path.Combine(Path.GetDirectoryName(wordTemplatePath), signatureFileName);
// Hinzufügen
bookmarkRange.InlineShapes.AddPicture(signatureFilePath);
template.Fields.Update();
string pdfDocName = $@"{tbOutputPath.Text}\\Doc_{name}_{zeitpunkt.Date:dd.MM.yy}.pdf";
if (template != null)
{
template.ExportAsFixedFormat(pdfDocName,
WdExportFormat.wdExportFormatPDF);
}
}
template.Close();
word.Quit();
}
Hat hier jemand eine Idee?
Vielen Dank im Voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 6257390457
Url: https://administrator.de/forum/csharp-docx-bookmarks-mit-microsoft-interop-fuellen-und-entfernen-6257390457.html
Ausgedruckt am: 22.12.2024 um 11:12 Uhr
7 Kommentare
Neuester Kommentar
Moin.
Cheers briggs
aber es fügt weiterhin Bilder zur gleichen Vorlage hinzu.
Hat hier jemand eine Idee?
Ja, du erstellt nur ein Dokument vor der Schleife also fügt es alle Bilder in das selbe Dokument ein anstatt für jeden Durchlauf in der Schleife ein separates Dokument zu erstellen ... Du musst also das erstellen eines neuen Dokuments in Zeile 8 in die Schleife verlagern nicht davor.Hat hier jemand eine Idee?
Cheers briggs
verbleiben die Bilder im Template und somit auch in den PDFs
Was willst du denn dann ?? Wenn du Bilder hinzufügst ist es normal das diese auch in er PDF Datei landen?! Dann füge halt keine Bilder hinzu fertig.Oben schriebst du das du da Bilder drin haben willst und jetzt auf einmal nicht mehr, entscheide dich doch mal oder beschreibe dein Vorhaben detaillierter.
Nach 10 Durchläufen, enthält das Template 10 der Bilder.
Ist ja auch kein Wunder denn du verwendest kein richtiges Template. Das Template selbst sollte die Endung *.dotx haben nicht *.docx.Hast du das befolgt, kann kann es aus Prinzip nicht sein das sich das Template selbst verändert, weil dann für jeden Schleifendurchlauf ein neues Dokument aus dem Template generiert wird!! Außerdem solltest du den Parameter zum Speichern im Close Befehl auf "false" definieren, template.close(false).
Ziel ist ein Bild pro PDF, welches somit im Template nicht verbleibt oder ggf. noch in der Schleife, vor dem Hinzufügen entfernt wird.
Entfernen brauchst du nicht weil das Template selbst nicht verändert wird. Also überflüssig- Das Template selbst sollte nur das Bookmark und selbst keine Bild mehr enthalten.
Ohuu, sorry muss natürlich *.dotx heißen ich i... .