使用XSL-FO在.NET中生成PDF

时间:2009-07-08 17:33:50

标签: c# asp.net pdf-generation

我需要使用XSL-FO在.NET中生成pdf。这样做不缺少库。您会建议我使用哪个库?为什么?

6 个答案:

答案 0 :(得分:6)

这是一个老问题,我知道,但迄今为止没有一个答案实际上解决了OP问题。她询问了使用XSL-FO的选项,而不是“如何使用代码生成PDF?”。

实际问题的主要非商业性答案是:

Apache.org项目的FOP

格式化对象处理器。它需要符合XSL-FO标准的xsl代码和xml,并根据XSL-FO规范生成PDF文件。还有其他几种商业选择:

  • Ibex PDF Creator
  • AntennaHouse
  • RenderX

如果您正在寻找一个可以使用的开源选项,那就是FOP。 FOP本身就是一个Java库,但它已经通过nFOP project中的J#(我知道它有自己的问题)移植到.NET。

答案 1 :(得分:4)

我过去曾使用Ibex PDF generator。我被投入了一个已经获得许可的项目,所以我别无选择。起初我认为这是简单的,但最终我习惯了它是如何工作的。

我建议你也使用一些好的XML / XSL编辑器来测试XSL / XPath。 XML Copy Editor是一个很好的免费开源软件。

答案 2 :(得分:3)

几年前我研究过选项。以下是候选名单:iTextSharp,SharpPDF,Report.NET,NFop和Siberix Report Writer。最终我选择了Siberix,但我现在认为iTextSharp会是更好的选择。如果它有用,您可以找到更多here

答案 3 :(得分:2)

http://fonet.codeplex.com/

FO.NET是你的图书馆

答案 4 :(得分:0)

我大约2年前曾使用过iText(开源)几次,但我不推荐这个。主要原因是缺少文档,我真的不喜欢API,它只是觉得在调用函数之前设置全局变量已经过时了。

您需要使用XSL-FO的原因是什么?我还使用ABC-pdf(商业),它允许用户将HTML页面(包括样式表)转换为pdf文档,或者您可以使用简单的文档API。

答案 5 :(得分:0)

如果可以使用其他功能,则可以尝试对.NET使用PdfSharp + MigraDoc.DocumentObjectModel库(请参见http://www.pdfsharp.net/)。两者都有MIT许可证,可以免费用于商业项目。

您可以从一个nuget软件包(https://www.nuget.org/packages/PDFsharp-MigraDoc/)安装此库。

然后,您可以使用MigraDoc.DocumentObjectModel.Document类定义您的PDF DOM并使用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才能使用此库。