适用于OpenXml的PowerTools。读取页眉/页脚时的空引用

时间:2012-09-25 09:45:20

标签: c# html docx

我有一个将docx文档转换为Pdf的任务。我决定采用这种方法: 将docx转换为html,然后将html传递给ItextSharp。几个星期以来,我一直在寻找google,codeplex,sourceforge和stackoverflow等解决方案,以便进行此转换,直到找到Eric White blog。在第一次印象中,他为使用OpenXml文档提供了很好的工具。但是当我试图测试它时,我有一个关于null引用的错误。读取标题(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这样的商业组件。

1 个答案:

答案 0 :(得分:0)

发现了这个问题。由于电动工具项目和主项目之间的不同参考,出现了错误。 我项目上的DocumentFormat.OpenXml版本是2.5.5513.0,电动工具是2.0.5022.0 在引用相同的资源后,一切都很顺利。