【问题标题】:Apache FOP - Scrolling in PDF possible?Apache FOP - 可以在 PDF 中滚动吗?
【发布时间】:2023-03-12 14:47:01
【问题描述】:

我正在使用 Apache FOP 通过 XML 和 XSL-FO 生成 PDF。我在生成的 PDF 中有一个单元格,如果内容溢出,我需要能够滚动浏览它。 XSL-FO 有一个 overflow="scroll" 特性,但根据我对该主题的研究,Apache FOP 似乎不支持这个选项。

例如,这是我需要复制的大型 CAD 公司使用的 PDF 中的可滚动区域:

有什么方法可以在 Apache FOP 中启用此功能?是否可以在源代码中启用它(我一直无法找到这样做的方法)?还有其他方法可以解决这个问题吗?

【问题讨论】:

  • 我想我从未见过任何可以滚动一个单元格的 pdf 文件,是吗?
  • 是的,here 是我需要复制的大型 CAD 公司使用的 PDF 中的可滚动区域。
  • 有趣...它是表格的一部分吗?另一种可能的解释是 javascript 操作。
  • 我目前只有一个截图,并假设它只是一个普通的 PDF,但如果你说这在标准 PDF 中是不可能的,那么它可能是一个交互式 PDF 表单——我会确认这一点稍后。

标签: pdf pdf-generation xsl-fo apache-fop


【解决方案1】:

不,这是不可能的。

从 FO 的角度来看:

XSL-FO Recommendation 中,属性overflowscroll 值来自相应的CSS2 定义,其中包括以下说明:

当指定此值且目标介质为“打印”时,应打印溢出内容。

由于 PDF 输出是一种面向打印的媒体,我将其阅读为确认 FOP 在打印溢出内容方面是正确的。

从 PDF 的角度来看:

PDF Reference 6th edition 中,搜索“scroll”一词会返回涉及用户界面交互式表单(文本字段)中的滚动条的结果、列表框、组合框)。

没有,或者至少我找不到它,“静态文本对象,但带有滚动条”功能(这对于面向打印的格式可能是明智的),因此 FOP 无法在 PDF 输出中创建它文件,甚至没有修改源代码

再次查看您的评论和您包含的屏幕截图让我觉得这可能是 PDF 格式的3D Artwork 功能的一个示例,这是我以前不知道的功能(除了它之外我仍然一无所知姓名)。根据参考:

可以指定 3D 图稿的特定视图,包括最初显示的默认视图和可以选择的其他视图视图的名称可以显示在用户界面中

所以,我认为您的屏幕截图显示了与 3D 对象关联的不同视图;它不是可用于提供可滚动文本的通用功能。

【讨论】:

  • 好的。那么我是否可以手动将 FOP 生成的 PDF 后处理为交互式 PDF 表单以将字段更改为可滚动框?自动 - 你知道的任何方式都可以做到这一点?
  • @Gerk 我用您的屏幕截图的可能解释更新了答案。但是,这一点仍然有效:据我所知,PDF 中没有可滚动的文本。
  • 这可能是一个 RichMedia PDF 注释,它是由 XML 驱动的 Flash,可以存储在 PDF 中。我将本着“他们是否还有其他方式......”的精神提供单独的答案
【解决方案2】:

嗯,有可能……

这是可能的,但据我所知,Apache FOP 没有。在没有看到有问题的 PDF 并从屏幕截图中猜测的情况下,它看起来就像一个插入到 PDF 中的 Flash 小部件。这在 PDF 术语中是 RichMedia 注释(需要带有扩展名的 PDF 1.7 版),您可以在其中插入 Flash 小部件以及其他控制文件(如 XML、要显示的其他图像等)并将它们关联在一起。

AFAIK,只有 RenderX XEP(我为之工作)支持通过 XSL FO 通过此处记录的 rx:rich-media-object 扩展将此类 RichMedia 注释插入 PDF:http://www.renderx.com/reference.html#Rich Media

我相信,支持带有 RichMedia 注释的 PDF 的唯一查看器是 Adob​​e Reader,因此需要查看此类文件。这是一个示例,其中包括一些交互式 Flash 小部件,一些交互式图表都在很久以前生成的几页 PDF 中。注意:我确信文档中的某些链接不会出现在任何地方,这是多年前的贸易展。 请记住,您需要下载此文件并在 Adob​​e Reader 中查看并安装 Flash 播放器才能看到它的功能。

http://www.cloudformatter.com/Resources/Samples/RichMedia.pdf

您不能使用常见的基于 PDF 浏览器的查看器,例如 Chrome 或 Firefox,因为它们不支持此类注释。

此处第一页的屏幕截图显示了一个交互式滚动小部件。第 4 页包含一个类似于您在示例中显示的小部件。

第 4 页滚动小部件与您的要求非常相似:

最后一页上的小部件是使用滚动 SWF 创建的,该 SWF 采用图像参数和 XML 设置/配置文件。 RenderX 扩展对象将这些作为参数并将它们全部嵌入到交互式 Flash 小部件的文档中,以便它在 PDF 中完全独立。执行此操作的 XSL FO 是:

    <rx:rich-media-object name="Sample HTML Widget" scaling="non-uniform" width="611.92pt"
        height="74.99pt" content-width="scale-to-fit" src="url('rx-scroller\dockmenu.swf')"
        transparency="true" activate-condition="page_visible">
        <rx:flash-var name="setupXML" value="rx-dock-settings.xml"/>
        <rx:flash-var name="contentXML" value="rx-dock-contents.xml"/>
        <rx:rich-media-resource name="rx-dock-settings.xml"
            src="url('rx-scroller\rx-dock-settings.xml')"/>
        <rx:rich-media-resource name="rx-dock-contents.xml"
            src="url('rx-scroller\rx-dock-contents.xml')"/>
        <rx:rich-media-resource name="style.css" src="url('rx-scroller\css\style.css')"/>
        <rx:rich-media-resource name="customer1.png" src="url('rx-scroller\images\customer1.png')"/>
        <rx:rich-media-resource name="customer2.png" src="url('rx-scroller\images\customer2.png')"/>
        <rx:rich-media-resource name="customer3.png" src="url('rx-scroller\images\customer3.png')"/>
        <rx:rich-media-resource name="customer4.png" src="url('rx-scroller\images\customer4.png')"/>
        <rx:rich-media-resource name="customer5.png" src="url('rx-scroller\images\customer5.png')"/>
        <rx:rich-media-resource name="customer6.png" src="url('rx-scroller\images\customer6.png')"/>
    </rx:rich-media-object>

请注意,flash 中的许多内容都可以使用,例如链接等。它只是作为容器插入到 PDF 中的纯交互式 Flash。

【讨论】:

  • 感谢您的建议,凯文。这个产品看起来很酷而且很有前途,但我认为我的公司不会愿意花费数千美元来让 PDF 中的可滚动区域正常工作。
【解决方案3】:

确实,这似乎无法通过 FOP 实现。

不过,继续挖掘了几天,我确实找到了一个聪明的post-processing alternative,它也是免费的,本质上是使用 LaTeX animate 包将 PDF 嵌入到另一个 PDF 中。

这种方法的一个缺点是无法在可滚动区域内嵌入链接,这对我来说是一个主要问题。但该方法确实可以在现有 PDF 中插入可滚动区域,让我非常接近我想要实现的目标。

【讨论】:

    猜你喜欢
    • 2017-06-03
    • 2017-06-02
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    相关资源
    最近更新 更多