gpt4 book ai didi

html - Apache FOP 可以用于将任意 HTML 转换为 PDF 吗?

转载 作者:可可西里 更新时间:2023-11-01 13:24:12 29 4
gpt4 key购买 nike

我曾尝试使用 Apache FOP 将 HTML 转换为 PDF。 (HTML -->XHTML--> XSL-FO --> PDF)。我使用 Antenna House 的 xhtml2fo.xsl 进行 xhtml --> XSL-FO 转换。

它适用于简单的 html 文件。

适用于带有样式的 html 文件(通过嵌入的 css 或样式属性)。 PDF 已创建但完全未格式化。我正在尝试转换我对样式/内容没有太多控制的 HTML 文件。

为每个 html 创建一个 xslt 在我的用例中不切实际。

目前,我确实有一个使用 flyingsaucer 的工作实现。但是,该要求要求在没有 AGPL 许可的情况下实现。

我的问题是:这可以通过 FOP 实现吗?

感谢任何帮助

最佳答案

tl;dr 版本:

在最一般的情况下,,您不能使用 FOP 转换任何保留原始样式的 html(并且更改格式化程序不会解决问题)。

但是,您可以使用 FOP(或任何其他格式化程序)来尝试合理地处理大量 html 文档;这可能需要一些 XSLT 调整。


为什么不能正常工作

HTML --> XHTML --> XSL-FO --> PDF

您对必要的转换链的描述是正确的。

然而,FOP 仅涉及最后一步:除了尚未实现的功能外,最终的 PDF 文件应遵循 FO 文件中表达的排版特征。 p>

I used the xhtml2fo.xsl from Antenna House for the xhtml --> XSL-FO conversion[...]

A PDF is created but completely unformatted

是您正在使用的样式表this one from the AntennaHouse site

快速看一下,它似乎应该转换 style="..." 属性在 FO 输出中生成单独的属性,但是它不处理外部 CSS 文件

因此,使用外部 CSS 设置样式的 HTML 文件将被转换为没有任何格式属性(font-familyfont-size文本对齐, ...).

Can this be achieved with FOP ?

如果情况确实如此,格式化程序只能使用默认值,其中一些(想到font-family)是依赖于应用程序的.

因此,根据您使用的格式化程序,您将得到一个略微不同的结果,但仍然是一个“未格式化”的结果。

您需要的要么是一个“合并”html 和 css 文件的工具,内联样式以便 XSLT 可以处理它们,要么是一个能够考虑外部 css 的不同样式表文件(但我怀疑编写一个在一般情况下工作的文件并不容易)。

不费吹灰之力就能解决的问题

在处理 html 表格时,链接的 XSLT 使用 fo:table-and-caption 元素,FOP 不支持该元素,因此表格从输出中“消失”。

这可以通过 XSLT 中的小改动来解决,或者(可能是更清晰的解决方案)使用自定义样式表导入另一个:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:html="http://www.w3.org/1999/xhtml">

<xsl:include href="xhtml2fo.xsl"/>

<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>

<xsl:template match="html:table" priority="2">
<fo:table xsl:use-attribute-sets="table">
<!-- warning: table caption is not processed! -->
<xsl:call-template name="process-table"/>
</fo:table>
</xsl:template>

</xsl:stylesheet>

您实际使用的样式表可能需要一些类似的调整才能更好地与 FOP 结合使用。

披露:我是一名 FOP 开发人员,虽然现在不是很活跃。

关于html - Apache FOP 可以用于将任意 HTML 转换为 PDF 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41728428/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com