2011-09-03 24 views
5

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; 
    } 

 
+0

Ejemplo: http://msdn.microsoft.com/en-us/library/ff628051.aspx – Shrini

Respuesta

1

no sé de cualquier convertidor directo con availabe de código fuente, pero sí, mi pensamiento es que puede que tenga que construir un convertidor de cero. Por suerte (supongo), WordprocessingML de la Palabra es el más simple de los formatos XML abiertos y se puede mirar a otros proyectos para la inspiración, tales como:

  1. TextGlow - Palabra al convertidor de Silverlight
  2. Word to XAML Converter - Palabra al convertidor XAML (probablemente muy similar a TextGlow arriba)
  3. OpenXML-DAISY - conversión a Daisy
  4. ODF Converter - convertir de/a los formatos de OpenOffice y OpenXML
  5. La solución XHTML por Eric White que ya has mencionado.

Para & soluciones de servidor comerciales, puede utilizar cualquiera Word Automations Services (requiere SharePoint) o Apose.NET Words.

+0

Mantuve la automatización de palabras como la final para la salida de PDF. itextsharp hace un trabajo extremadamente pobre de conversión especialmente de HTML. Gracias. – Shrini