Я пытаюсь найти SDK, который может генерировать PDF из OpenXml.Я использовал инструменты Open Xml Power для преобразования открытого XML и html, а также с помощью iTextSharp для анализа html в PDF.Но в результате получился очень ужасный PDF.
Я еще не пробовал анализатор RTF iText.Если я пойду в этом направлении, мне в конечном итоге понадобится 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;
}