У меня действительно возникают проблемы при редактировании закладок в шаблоне Word, используя Document.Format.OpenXML
, а затем сохраняя его в новом PDF-файле. Я не могу использовать Microsoft.Word.Interop
, так как он дает COM-ошибку на сервере.Как отредактировать закладки в шаблоне Word с помощью DocumentFormat.OpenXml и сохранить его как новый файл PDF?
Мой код заключается в следующем:
public static void CreateWordDoc(string templatePath, string destinationPath, Dictionary<string, dynamic> dictionary)
{
byte[] byteArray = File.ReadAllBytes(templatePath);
using (MemoryStream stream = new MemoryStream())
{
stream.Write(byteArray, 0, (int)byteArray.Length);
using (WordprocessingDocument wordDoc = WordprocessingDocument.Open(stream, true))
{
var bookmarks = (from bm in wordDoc.MainDocumentPart.Document.Body.Descendants<BookmarkStart>()
select bm).ToList();
foreach (BookmarkStart mark in bookmarks)
{
if (mark.Name != "Table" && mark.Name != "_GoBack")
{
UpdateBookmark(dictionary, mark);//Not doing anything
}
else if (mark.Name != "Table")
{
// CreateTable(dictionary, wordDoc, mark);
}
}
File.WriteAllBytes("D:\\RohitDocs\\newfile_rohitsingh.docx", stream.ToArray());
wordDoc.Close();
}
// Save the file with the new name
}
}
private static void UpdateBookmark(Dictionary<string, dynamic> dictionary, BookmarkStart mark)
{
string name = mark.Name;
string value = dictionary[name];
Run run = new Run(new Text(value));
RunProperties props = new RunProperties();
props.AppendChild(new FontSize() { Val = "20" });
run.RunProperties = props;
var paragraph = new DocumentFormat.OpenXml.Wordprocessing.Paragraph(run);
mark.Parent.InsertAfterSelf(paragraph);
paragraph.PreviousSibling().Remove();
mark.Remove();
}
Я пытался заменить закладки с моим текстом, но метод UpdateBookmark
не работает. Я пишу поток и сохраняю его, потому что думал, что если закладки заменены, я могу сохранить их в другом файле.
Я не могу найти код для преобразования Docx в PDF с помощью itextSharp, можете ли вы поделиться им? – user2801308
уверен. дай мне пару минут –