3
我知道這裏已經有類似的問題,並且建議使用Open XML和全部。將HTML轉換爲Word Docx,樣式不變
我使用的是Open XMl,但它僅適用於內聯樣式。
是否有任何解決方案,或者任何其他更好的方法來將html轉換爲除Open XML以外的docx。
謝謝!
我知道這裏已經有類似的問題,並且建議使用Open XML和全部。將HTML轉換爲Word Docx,樣式不變
我使用的是Open XMl,但它僅適用於內聯樣式。
是否有任何解決方案,或者任何其他更好的方法來將html轉換爲除Open XML以外的docx。
謝謝!
您可以使用類似於here所述的工具來內聯CSS文件。
然後,執行轉換(改編自Eric White's blog):
using (WordprocessingDocument myDoc =
WordprocessingDocument.Open("ConvertedDocument.docx", true))
{
string altChunkId = "AltChunkId1";
MainDocumentPart mainPart = myDoc.MainDocumentPart;
var chunk = mainPart.AddAlternativeFormatImportPart(
AlternativeFormatImportPartType.Html, altChunkId);
using (FileStream fileStream = File.Open("YourHtmlDocument.html", FileMode.Open))
{
chunk.FeedData(fileStream);
}
AltChunk altChunk = new AltChunk() {Id = altChunkId};
mainPart.Document.Body.InsertAfter(
altChunk, mainPart.Document.Body.Elements<Paragraph>().Last());
mainPart.Document.Save();
}
這是不完全轉換HTML到DOCX。它的追加YourHtmlDocument.html
到ConvertedDocument.docx
。如果ConvertedDocument.docx
最初爲空,則此方法實際上是一種轉換。
無論何時使用AltChunk
構建文檔,HTML都會嵌入到文檔中,直到下次在Word中打開文檔爲止。此時,HTML會被轉換爲WordProcessingML
標記。如果文檔不能在MS Word中打開,這實際上只是一個問題。如果您正在上傳到Google文檔,在OpenOffice中打開或使用COM轉換爲PDF,OpenXML將不夠用。在這種情況下,您可能需要使用付費工具,如Aspose.Words。
這會在'Elements().Last()'上崩潰,如果之前沒有插入段落,因爲找不到'Last()'。使用'mainPart.Document.Body.InsertAfterSelf(altChunk);'代替 –