我想找到一個可以從OpenXml生成PDF的SDK。我已經使用Open Xml Power Tools來轉換開放XML和HTML,並使用iTextSharp將Html解析爲PDF。但結果是一個非常可怕的PDF。從OpenXml生成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;
}
示例:http://msdn.microsoft.com/en-us/library/ff628051.aspx – Shrini