1

我的任务是将 docx 文档转换为 Pdf。我决定采用这种方法:将 docx 转换为 html,然后将 html 传递给 ItextSharp。几周以来,我一直在 google、codeplex、sourceforge 和 stackoverflow 等网站上寻找进行这种转换的解决方案,直到找到Eric White 博客。在第一印象中,他是处理 OpenXml 文档的绝佳工具。但是当我尝试测试它时,我遇到了关于空引用的错误。读取标头时发生错误(RevisionAccepter 类)

 public static void AcceptRevisions(WordprocessingDocument doc)
    {
        AcceptRevisionsForPart(doc.MainDocumentPart);
        foreach (var part in doc.MainDocumentPart.HeaderParts) //part is null
            AcceptRevisionsForPart(part); //null ref exception here
        foreach (var part in doc.MainDocumentPart.FooterParts)
            AcceptRevisionsForPart(part);
        if (doc.MainDocumentPart.EndnotesPart != null)
            AcceptRevisionsForPart(doc.MainDocumentPart.EndnotesPart);
        if (doc.MainDocumentPart.FootnotesPart != null)
            AcceptRevisionsForPart(doc.MainDocumentPart.FootnotesPart);
    }

我用于转换的代码(与示例相同)

private void conv()
    {
        byte[] byteArray = File.ReadAllBytes(textBox1.Text);
        using (MemoryStream memoryStream = new MemoryStream())
        {                

            memoryStream.Write(byteArray, 0, byteArray.Length);
            using (WordprocessingDocument doc =
                WordprocessingDocument.Open(memoryStream, true))
            {
                HtmlConverterSettings settings = new HtmlConverterSettings()
                {
                    PageTitle = "My Page Title"

                };
                XElement html = HtmlConverter.ConvertToHtml(doc, settings);

                File.WriteAllText("Test.html", html.ToStringNewLineOnAttributes());
            }
        }
    }

命名空间:

using System.Xml;
using System.Xml.Xsl;
using OpenXmlPowerTools;
using System.Xml.Linq;
using DocumentFormat.OpenXml.Packaging;

我试图传递由 word 2010 创建的文档,带有标题和没有标题,但仍然在同一个地方出现错误。也许我错误地传递了文件或文件本身的东西。

也许还有另一种方法可以在不使用商业组件的情况下将 docx 转换为 pdf,例如 Apose。

4

1 回答 1

1

发现了问题。由于电动工具项目和主项目之间的引用不同,因此发生错误。我的项目上的 DocumentFormat.OpenXml 版本是 2.5.5513.0,而电动工具上的版本是 2.0.5022.0 引用相同的资源后一切正常。

于 2012-09-26T05:57:31.500 回答