从OpenXml生成PDF

时间:2011-09-03 01:11:02

标签: pdf-generation openxml

我正在尝试找到一个可以从OpenXml生成PDF的SDK。我使用Open Xml Power Tools来转换打开的XML和html,并使用iTextSharp将Html解析为PDF。但结果是看起来很糟糕的PDF。

我还没有尝试过iText的RTF解析器。如果我朝这个方向发展,我将最终需要一个RTF转换器,使简单的转换成为一个双重的噩梦。

看起来我最终可能会编写一个基于电动工具OpenXml到html转换器的自定义转换器。任何建议表示赞赏。由于许可证太贵(Aspose Word / TxText),我此时真的不能最终选择专业的转换器了。


我以为我会在调查中投入更多精力。我回到了转换实用程序“http://msdn.microsoft.com/en-us/library/ff628051.aspx”并查看了它的代码。鉴于它最大的缺点是阅读底层样式并生成样式属性。由于不处理自定义真实字体的限制,PDF看起来好多了。明天会更多调查。我希望做过这样的事情/遇到奇怪的问题,并且可以解释一些问题。




    private static StringDictionary GetStyle(XElement el)
    {
        IEnumerable jcL = el.Elements(W.jc);
        IEnumerable spacingL = el.Elements(W.spacing);
        IEnumerable rPL = el.Elements(W.rPr);

        StringDictionary sd = new StringDictionary();

        if (HasAttribute(jcL, W.val)) sd.Add("text-align", GetAttribute(jcL, W.val));

        // run prop exists
        if (rPL.Count() > 0)
        {
            XElement r = rPL.First();
            IEnumerable ftL = el.Elements(W.rFonts);

            if (r.Element(W.b) != null) sd.Add("font-weight", "bolder");
            if (r.Element(W.i) != null) sd.Add("font-style", "italic");
            if (r.Element(W.u) != null) sd.Add("text-decoration", "underline");
            if (r.Element(W.color) != null && HasAttribute(r.Element(W.color), W.val)) sd.Add("color", "#" + GetAttribute(r.Element(W.color), W.val));
            if (r.Element(W.rFonts) != null )
            {
                // 
                if(HasAttribute(r.Element(W.rFonts), W.cs)) sd.Add("font-family", GetAttribute(r.Element(W.rFonts), W.cs));
                else if (HasAttribute(r.Element(W.rFonts), W.hAnsi)) sd.Add("font-family", GetAttribute(r.Element(W.rFonts), W.hAnsi));
            }
            if (r.Element(W.sz) != null && HasAttribute(r.Element(W.sz), W.val)) sd.Add("font-size", GetAttribute(r.Element(W.sz), W.val) + "pt");
        }

        return sd.Keys.Count > 0 ? sd : null;
    }


1 个答案:

答案 0 :(得分:1)

我不知道任何有源代码可用的直接转换器,但是,我的想法是你可能需要从头开始构建一个转换器。幸运的是(我猜),Word的WordprocessingML是最简单的Open XML格式,你可以寻找其他项目的灵感,例如:

  1. TextGlow - Word to Silverlight converter
  2. Word to XAML Converter - Word to XAML转换器(可能非常 类似于上面的TextGlow)
  3. OpenXML-DAISY - 转换为Daisy
  4. ODF Converter - 从/转换为OpenOffice格式和OpenXML
  5. 您已经引用的Eric White的XHTML解决方案。
  6. 商业用途服务器端解决方案,您可以使用Word Automations Services(需要SharePoint)或Apose.NET Words