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

bjg7j2ky  于 2023-05-02  发布在  .NET
关注(0)|答案(7)|浏览(230)

我需要生成一个PDF。NET中使用XSL-FO.这样做的图书馆并不缺乏。你会建议我使用哪个图书馆,为什么?

bwntbbo3

bwntbbo31#

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

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

www.example.com 项目的FOP

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

  • Ibex PDF Creator
  • 天线屋
  • RenderX

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

eoxn13cs

eoxn13cs2#

我以前用过Ibex PDF generator。我被扔在一个已经有许可证的项目中,所以我真的没有其他选择。起初我认为这是cumboersome,但最终我习惯了它是如何工作的。
我建议您也使用一些好的XML/XSL编辑器来测试XSL/XPath。XML Copy Editor是一个很好的免费开源软件。

kninwzqo

kninwzqo3#

几年前我研究过期权。以下是入围名单:iTextSharp、SharpPDF、报告。NET、NFop和Siberix报告编写器。最终我选择了Siberix,但我现在认为iTextSharp会是更好的选择。如果有用的话,你可以找到更多的here

hts6caw3

hts6caw35#

嗯,大约2年前我用过几次iText(开源),但我不会推荐这样做。主要原因是缺乏文档,我真的不喜欢API,它只是觉得过时的设置全局变量之前,调用函数。
你需要使用XSL-FO的原因是什么?我还使用了ABC-pdf(商业版),它允许用户将HTML页面(包括样式表)转换为PDF文档,或者您可以使用简单的文档化API。

abithluo

abithluo6#

如果你可以使用不同的东西,你可以尝试使用PdfSharp + MigraDoc。的DocumentObjectModel库。NET(参见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来使用这些库。

k4ymrczo

k4ymrczo7#

我已经创建了一个运行在.Net Core中的Apache FOP version 2.8纯端口。它几乎是即插即用的,所以它超级容易使用。查看详情:
https://github.com/sorcerdon/FOP.NetCore
以下是Nuget:

由于这是一个纯端口,这意味着它可以做Apache FOP可以做的任何事情。

相关问题