.net 将xsl - fo转换为pdf

jutyujz0  于 2023-05-01  发布在  .NET
关注(0)|答案(3)|浏览(150)

我有一个XSL-FO文件,数据以xml/json格式提供。我想用这个xsl结构创建一个pdf。
有谁能推荐一些开源库来进行转换吗?我希望它能在C#级别完成。
注意:我尝试转换为html,但因为它是xsl-fo文件,我不能得到对齐。

mwkjh3gx

mwkjh3gx1#

您可以使用Apache FOP(https://xmlgraphics.apache.org/fop/)工具。它可以从XSL-FO输入生成PDF文档。
从C#可以启动Apache FOP进程,将其指向XSL-FO文件(或使用stdin,因此不必使用任何临时文件)。进程存在后,您将获得PDF文件(在磁盘上的文件或标准输出中)。
首先,你可以让Apache FOP读取XSL-FO文件并将PDF文件写入磁盘,为此使用Process类(https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.process?view=netframework-4.8):
草稿代码片段(可能包含错误,但对您来说应该是一个良好的开端):

Process.Start("C:\\path\\to\\fop input_xsl-fo.xml output.pdf").WaitForExit();
7ajki6be

7ajki6be2#

我尝试使用fo.net,它为我工作,这里是示例代码

string lBaseDir = System.IO.Path.GetDirectoryName("e:\thermalpdf.xsl");
            XslCompiledTransform lXslt = new XslCompiledTransform();
            lXslt.Load("e:\thermalpdf.xsl");
            lXslt.Transform("e:\billingData1.xml", "books1.fo");
            FileStream lFileInputStreamFo = new FileStream("books1.fo", FileMode.Open);
            FileStream lFileOutputStreamPDF = new FileStream("e:\response2.pdf", FileMode.Create);
            FonetDriver lDriver = FonetDriver.Make();
            lDriver.BaseDirectory = new DirectoryInfo(lBaseDir);
            lDriver.CloseOnExit = true;
            lDriver.Render(lFileInputStreamFo, lFileOutputStreamPDF);
            lFileInputStreamFo.Close();
            lFileOutputStreamPDF.Close();
o7jaxewo

o7jaxewo3#

不确定你的项目是否是.Net Core项目,但我已经创建了一个纯Apache FOP version 2.8端口,它在.Net Core中运行。查看详情:
https://github.com/sorcerdon/FOP.NetCore
以下是Nuget:

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

相关问题