xsl -fo 转pdf

Convert xsl - fo to pdf

我有一个 XSL-FO 文件,数据以 xml/json 格式提供。我想使用这个 xsl 结构创建一个 pdf。

谁能推荐任何开源库进行转换?我希望它在 C# 级别完成。

注意:我尝试转换为 html,但由于它是 xsl-fo 文件,我无法对齐。

您可以使用 Apache FOP (https://xmlgraphics.apache.org/fop/) 工具。它可以从 XSL-FO 输入生成 PDF 文档。

可以从 C# 启动 Apache FOP 进程,将其指向 XSL-FO 文件(或使用标准输入,因此您不必使用任何临时文件)。进程存在后,您将获得 PDF 文件(在磁盘文件或标准输出中)。

首先,您可以让 Apache FOP 读取 XSL-FO 文件并将 PDF 文件写入磁盘,为此使用 Process class (https://docs.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();

我尝试使用 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();