Мне нужно создать pdf в .NET с помощью XSL-FO. Для этого нет недостатка в библиотеках. В какой библиотеке вы бы предположили, что я использую и почему?
Создание PDF в .NET с использованием XSL-FO
Ответ 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 был бы лучшим выбором. Если это полезно, вы можете узнать немного больше здесь.
Ответ 4
FO.NET - это ваша библиотека
Ответ 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, чтобы использовать эти библиотеки.