我正在尝试找到一个可以从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;
}
答案 0 :(得分:1)
我不知道任何有源代码可用的直接转换器,但是,我的想法是你可能需要从头开始构建一个转换器。幸运的是(我猜),Word的WordprocessingML是最简单的Open XML格式,你可以寻找其他项目的灵感,例如:
商业用途服务器端解决方案,您可以使用Word Automations Services(需要SharePoint)或Apose.NET Words。