C#:docx 从 html 由 open xml power tools throw pre release 2007 生成

C#:docx generated from html by open xml power tools throw pre release 2007

我正在编写代码,通过使用 open XML 强大的工具将 Docx 文件的内容获取为 HTML,现在我想将其转换回另一个 docx 文件。获取内容为 HTML 的步骤工作正常,但是当我从 HTML 生成 docx 文件时,该文件无法打开并抛出此错误

this file was created in a pre-release version of word 2007 and cannot be opened in this version

从测试文档生成的HTML是

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta
      charset="UTF-8" />
    <title>My Page Title</title>
    <meta
      name="Generator"
      content="PowerTools for Open XML" />
    <style>span { white-space: pre-wrap; }
p.pt-Normal {
    line-height: 107.9%;
    margin-bottom: 8pt;
    text-align: justify;
    font-family: ;
    font-size: 11pt;
    margin-top: 0;
    margin-left: 0;
    margin-right: 0;
}
span.pt-DefaultParagraphFont {
    font-family: ;
    font-size: 11pt;
    font-style: normal;
    font-weight: normal;
    margin: 0;
    padding: 0;
}
span.pt-DefaultParagraphFont-000000 {
    font-family: Calibri;
    font-size: 11pt;
    font-style: normal;
    font-weight: normal;
    margin: 0;
    padding: 0;
}
</style>
  </head>
  <body>
    <div>
      <p
        dir="rtl"
        class="pt-Normal">&#x200f;<span
          lang="fa-IR"
          class="pt-DefaultParagraphFont">&#x200f;با سلام خدمت &#x200f;</span><span
          lang="fa-IR"
          class="pt-DefaultParagraphFont">&#x200f;&lt;&lt;&#x200f;</span><span
          class="pt-DefaultParagraphFont-000000">&#x200e;PERSONS.lname&#x200e;</span><span
          lang="fa-IR"
          class="pt-DefaultParagraphFont">&#x200f;&gt;&gt;&#x200f;</span><span
          lang="fa-IR"
          class="pt-DefaultParagraphFont">&#x200f; &#x200f;</span><span
          lang="fa-IR"
          class="pt-DefaultParagraphFont">&#x200f;&lt;&lt;&#x200f;</span><span
          class="pt-DefaultParagraphFont-000000">&#x200e;PERSONS.fname&#x200e;</span><span
          lang="fa-IR"
          class="pt-DefaultParagraphFont">&#x200f;&gt;&gt;&#x200f;</span></p>
      <p
        dir="rtl"
        class="pt-Normal">&#x200f;<span
          lang="fa-IR"
          class="pt-DefaultParagraphFont">&#x200f;مدیر محترم &#x200f;</span><span
          lang="fa-IR"
          class="pt-DefaultParagraphFont">&#x200f;&lt;&lt;&#x200f;</span><span
          class="pt-DefaultParagraphFont-000000">&#x200e;OFFICE.name&#x200e;</span><span
          lang="fa-IR"
          class="pt-DefaultParagraphFont">&#x200f;&gt;&gt;&#x200f;</span></p>
    </div>
  </body>
</html>

我的代码将上面的 html 保存为 docx

using (WordprocessingDocument wordDoc =
        WordprocessingDocument.Create(dest_doc_path, WordprocessingDocumentType.Document))
            {


                MainDocumentPart mainPart = wordDoc.AddMainDocumentPart();

                string htmlcontent = htmlTXT.Text;

                using (Stream stream = mainPart.GetStream())
                {
                    byte[] buf = (new UTF8Encoding()).GetBytes(htmlcontent);
                    stream.Write(buf, 0, buf.Length);
                }


                MessageBox.Show("DONE", "done", MessageBoxButton.OK);


            }

答案很简单。您 不得 将 HTML 内容插入 MainDocumentPart 中,因为它应该包含有效的 Open XML w:document 元素,例如,如下简化的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
  <w:body>
    <w:p>
      <w:r>
        <w:t>Hello, world!</w:t>
      </w:r>
    </w:p>
  </w:body>
</w:document>

错误消息可能有点误导。 HTML 在这种情况下完全无效。

根据您是否在创建 HTML 后(使用 Open XML PowerTools)从原始 Word 文档更改了它,您将不得不将其转换回有效的 Open XML 标记(如果您更改了它)或简单地使用原始 Word 文档中的打开 XML 标记。