我需要使用XSL-FO在.NET中生成pdf。这样做不缺少库。您会建议我使用哪个库?为什么?
答案 0 :(得分:6)
这是一个老问题,我知道,但迄今为止没有一个答案实际上解决了OP问题。她询问了使用XSL-FO的选项,而不是“如何使用代码生成PDF?”。
实际问题的主要非商业性答案是:
格式化对象处理器。它需要符合XSL-FO标准的xsl代码和xml,并根据XSL-FO规范生成PDF文件。还有其他几种商业选择:
如果您正在寻找一个可以使用的开源选项,那就是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)
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才能使用此库。