2011-09-03 25 views
5

Sto cercando di trovare un SDK in grado di generare PDF da OpenXml. Ho usato Open Xml Power Tools per convertire XML aperto e html e utilizzando iTextSharp per analizzare l'Html in PDF. Ma il risultato è un PDF dall'aspetto terribile.Generazione di PDF da OpenXml

Non ho ancora provato il parser RTF di iText. Se vado in questa direzione, finirò per aver bisogno di un convertitore RTF rendendo la conversione semplice un incubo a doppio passo.

Sembra quasi che potrei finire per scrivere un convertitore personalizzato basato su strumenti di alimentazione OpenXml al convertitore html. Qualsiasi consiglio è apprezzato. In questo momento non riesco a finire per un convertitore professionale perché le licenze sono troppo costose (Aspose Word/TxText).


ho pensato io metterò un po 'di sforzo in mia indagine. Sono tornato all'utilità di conversione "http://msdn.microsoft.com/en-us/library/ff628051.aspx" e ho esaminato il suo codice. Data la cosa più grande che mancava era leggere gli stili sottostanti e generare un attributo di stile. Il PDF sembrava molto meglio con la limitazione di non gestire il carattere di tipo true personalizzato. Altre indagini domani. Spero che abbia fatto qualcosa del genere/affrontato strani problemi e possa fare luce.

 



    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

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

risposta

1

Non so di alcun convertitore diretto con codice sorgente availabe, ma sì, il mio pensiero è che potrebbe essere necessario per costruire un convertitore da zero. Per fortuna (credo), WordprocessingML di Word è il più semplice dei formati Open XML e si può guardare ad altri progetti per l'ispirazione, come ad esempio:

  1. TextGlow - Parola al convertitore Silverlight
  2. Word to XAML Converter - Parola al convertitore XAML (probabilmente molto simile a TextGlow sopra)
  3. OpenXML-DAISY - conversione a Daisy
  4. ODF Converter - convertire da/a formati OpenOffice e OpenXML
  5. La soluzione XHTML di Eric White hai già fatto riferimento.

Per soluzioni commerciali & lato server, è possibile utilizzare Word Automations Services (richiede SharePoint) o Apose.NET Words.

+0

Ho mantenuto l'automatizzazione delle parole come finale per l'output pdf. itextsharp svolge un lavoro di conversione estremamente scarso, specialmente da HTML. Grazie. – Shrini