2011-09-03 9 views
5

OpenXml'den PDF oluşturabilen bir SDK bulmaya çalışıyorum. Açık XML ve html'yi dönüştürmek için Open Xml Power Tools'u ve Html'yi PDF'ye ayrıştırmak için iTextSharp'ı kullandım. Ama sonuç çok korkunç bir PDF dosyasıdır.OpenXml'den PDF oluşturma

Henüz iText'in RTF çözümleyicisini denemedim. Bu yöne gidersem, basit dönüşümü çift adımlı bir kabus haline getiren bir RTF dönüştürücüsüne ihtiyacım olur.

Neredeyse, html dönüştürücüsüne OpenXml araçlarından oluşan özel bir dönüştürücü yazabilirim gibi görünüyor. Herhangi bir tavsiye takdir edilmektedir. Ben gerçekten bu anda lisanslar çok pahalı (Aspose Word/TxText) gibi profesyonel bir dönüştürücü için gidiş sona eremez.


Araştırmam için biraz daha çaba harcayacağımı düşündüm. "Http://msdn.microsoft.com/en-us/library/ff628051.aspx" dönüşüm programına geri döndüm ve kodunu inceledim. Kaçırdığı en büyük şey, temel stilleri okumak ve bir stil özelliği oluşturmaktı. PDF, özel gerçek yazı tipinin işlenmemesi sınırlamasıyla çok daha iyi görünüyordu. Yarın daha fazla araştırma. Umarım bu gibi/yüzlü garip konular gibi bir şey yapmış ve biraz ışık tutabilir.

 



    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

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

cevap

1

Ben kaynak kodu availabe ile herhangi bir doğrudan konvertör bilmiyorum, ama evet, benim düşüncem, sıfırdan bir dönüştürücü oluşturmak gerekebilir olmasıdır. Neyse ki (sanırım), Word'ün WordprocessingML Açık XML biçimleri basit olanı ve gibi ilham için diğer projeler için bakabilirsiniz:

  1. TextGlow - Kelime Silverlight dönüştürücü
  2. Word to XAML Converter - XAML dönüştürücü Word'e Daisy
  3. ODF Converter dönüşüm - - arasından/OpenOffice biçimlere dönüştürmek ve açık XML
  4. XHTML çözeltisi
  5. OpenXML-DAISY (muhtemelen çok benzer yukarıda TextGlow için) Eric White tarafından zaten başvuruyorsunuz. Ticari & sunucu tarafı çözümleri için

, ya Word Automations Services veya Apose.NET Words (SharePoint gerektirir) kullanabilir.

+0

Word otomasyonunu pdf çıkışı için son olarak tuttum. itextsharp özellikle HTML'den çok zayıf dönüşüm işi yapar. Teşekkürler. – Shrini