Estoy tratando de encontrar un SDK que pueda generar PDF desde OpenXml. He usado Open Xml Power Tools para convertir el XML abierto y html yy usando iTextSharp para analizar el Html a PDF. Pero el resultado es un PDF de aspecto muy terrible.Generando PDF desde OpenXml
Todavía no he probado el analizador RTF de iText. Si voy en esta dirección, terminaré necesitando un convertidor RTF que haga de la simple conversión una pesadilla de doble paso.
Casi parece que podría terminar escribiendo un convertidor personalizado basado en las herramientas eléctricas OpenXml to html converter. Cualquier consejo es apreciado. Realmente, en este momento no puedo terminar buscando un convertidor profesional ya que las licencias son demasiado caras (Aspose Word/TxText).
Pensé que pondría un poco más de esfuerzo en mi investigación. Volví a la utilidad de conversión "http://msdn.microsoft.com/en-us/library/ff628051.aspx" y miré su código. Dado que lo más importante que se perdió fue leer los estilos subyacentes y generar un atributo de estilo. El PDF se veía mucho mejor con la limitación de no manejar la fuente tipográfica personalizada. Más investigación mañana. Espero haber hecho algo como esto/he tenido problemas extraños y puedo arrojar algo de luz.
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;
}
Ejemplo: http://msdn.microsoft.com/en-us/library/ff628051.aspx – Shrini