Создание PDF из OpenXml - PullRequest
       9

Создание PDF из OpenXml

5 голосов
/ 03 сентября 2011

Я пытаюсь найти 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;
    }


1 Ответ

1 голос
/ 04 сентября 2011

Я не знаю ни одного прямого конвертера с доступным исходным кодом, но да, я думаю, что вам может понадобиться создать конвертер с нуля. К счастью (я полагаю), WordprocessingML Word - самый простой из форматов Open XML, и вы можете найти другие проекты для вдохновения, такие как:

  1. TextGlow - Конвертер Word в Silverlight
  2. Конвертер Word в XAML - Конвертер Word в XAML (возможно, очень аналогично TextGlow выше)
  3. OpenXML-DAISY - преобразование в Daisy
  4. ODF Converter - конвертировать из / в форматы OpenOffice и OpenXML
  5. Решение XHTML от Эрика Уайта, на которое вы уже ссылались.

Для коммерческих и серверных решений вы можете использовать Word Automations Services (требуется SharePoint) или Apose.NET Words .

...