Подтвердить что ты не робот

Создание PDF в .NET с использованием XSL-FO

Мне нужно создать pdf в .NET с помощью XSL-FO. Для этого нет недостатка в библиотеках. В какой библиотеке вы бы предположили, что я использую и почему?

4b9b3361

Ответ 1

Это старый вопрос, я знаю, но ни один из ответов на сегодняшний день фактически не рассматривал ВОПРОС ОП. Она попросила варианты использования XSL-FO, а не "как сгенерировать PDF с помощью кода?".

Основной некоммерческий ответ на реальный вопрос:

Apache.org Project FOP

Форматирование объектов Процессор. Он использует XSL-FO совместимый xsl-код и xml и создает файлы PDF в соответствии со спецификацией XSL-FO. Существует несколько других коммерческих опций:

  • Создатель иконок PDF.
  • AntennaHouse
  • RenderX

Если вы ищете вариант с открытым исходным кодом, который WORKS, это FOP. FOP является библиотекой Java изначально, но он был перенесен на .NET через J # (у него есть собственные проблемы, которые я знаю) в проекте nFOP.

Ответ 2

В прошлом я использовал генератор Ibex PDF. Я был брошен в проект, у которого уже была лицензия на это, поэтому у меня не было другого выбора. Сначала я подумал, что это круто, но в итоге я привык к тому, как это работает.

Я бы рекомендовал вам использовать хороший XML/XSL-редактор для тестирования XSL/XPath. XML Copy Editor является хорошим бесплатным открытым исходным кодом.

Ответ 3

Я исследовал варианты пару лет назад. Вот список: iTextSharp, SharpPDF, Report.NET, NFop и Siberix Report Writer. В конечном итоге я пошел с Siberix, но теперь я думаю, что iTextSharp был бы лучшим выбором. Если это полезно, вы можете узнать немного больше здесь.

Ответ 5

Ну, я использовал iText (open source) пару раз около 2 лет назад, но я бы не рекомендовал это. Основная причина - отсутствие документации, и я действительно не люблю API, он просто устарел, устанавливая глобальные переменные перед вызовом функций.

В чем причина использования XSL-FO? Я также использовал ABC-pdf (коммерческий), который позволяет пользователю превращать HTML-страницы (включая таблицы стилей) в pdf-документы или вы можете использовать простой и документированный API.

Ответ 6

Если вы можете использовать что-то другое, вы можете попробовать использовать библиотеки PdfSharp + MigraDoc.DocumentObjectModel для .NET (см. http://www.pdfsharp.net/). Оба имеют лицензию MIT и бесплатны для использования в коммерческих проектах.

Вы можете установить эти библиотеки из одного пакета nuget (https://www.nuget.org/packages/PDFsharp-MigraDoc/).

Затем вы можете определить свою PDF DOM с помощью класса MigraDoc.DocumentObjectModel.Document и распечатать его с помощью класса PdfDocumentRenderer. Вот пример кода:

using System;
using System.IO;
using MigraDoc.DocumentObjectModel;
using MigraDoc.Rendering;

namespace MigraDocTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var document = new Document();

            // initial page setup and declare the styles
            document.DefaultPageSetup.Orientation = Orientation.Landscape;

            var mainStyle = document.Styles[StyleNames.Normal];
            mainStyle.Font.Name = "Arial";

            const string TitleStyleName = "Title";

            var titleStyle = document.Styles.AddStyle(TitleStyleName, StyleNames.Normal);
            titleStyle.ParagraphFormat.Font.Size = 12;
            titleStyle.ParagraphFormat.SpaceAfter = "0";
            titleStyle.Font.Bold = true;

            // main page section setup
            var section = document.AddSection();
            section.PageSetup.PageFormat = PageFormat.A4;
            section.PageSetup.Orientation = Orientation.Landscape;
            section.PageSetup.LeftMargin = "15mm";
            section.PageSetup.RightMargin = "15mm";
            section.PageSetup.TopMargin = "12mm";
            section.PageSetup.BottomMargin = "20mm";

            // add content to DOM here
            section.AddParagraph("Hello, world!").Style = TitleStyleName;

            // actually print document to PDF
            var pdfRenderer = new PdfDocumentRenderer(unicode: true) { Document = document };
            pdfRenderer.RenderDocument();
            using (var stream = new MemoryStream())
            {
                pdfRenderer.Save(stream, closeStream: false);
                File.WriteAllBytes(@"_output.pdf", stream.ToArray());
            }
        }
    }
}

Обратите внимание, что MigraDoc nuget поддерживает .NET Framework 2+,.NETStandard не поддерживается. Таким образом, вам нужно нацелиться на полный .NET Framework, чтобы использовать эти библиотеки.