当前位置: 首页 > 知识库问答 >
问题:

Apache FOP-可以在PDF中滚动吗?

夔博
2023-03-14

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

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

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

共有3个答案

何浩荡
2023-03-14

事实上,这似乎不可能通过FOP实现。

然而,继续挖掘了几天,我确实找到了一个聪明的后处理替代方案,它也是免费的,本质上是使用LaTeX动画包将一个PDF嵌入到另一个PDF中。

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

孔城
2023-03-14

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

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

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

http://www . cloud formatter . com/Resources/Samples/rich media . 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>

请注意,闪存中的许多东西都可以工作,比如链接等等。它只是一个纯粹的交互式闪存,作为容器插入到PDF中。

璩无尘
2023-03-14

在 XSL-FO 建议中,属性溢出滚动值来自相应的 CSS2 定义,其中包括以下说明:

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

由于PDF输出是面向打印的介质,我认为这是对FOP打印溢出内容的确认。

在 PDF 参考第 6 版中,搜索单词“滚动”会返回指向用户界面或交互式表单(文本字段、列表框、组合框)中的滚动条的结果。

没有(或者至少我找不到)一个“静态文本对象,但是有滚动条”的特性(这对于面向打印的格式可能是合理的),所以FOP不能在PDF输出文件中创建它,甚至不能修改源代码。

再看一下你的评论和你附上的截图,我觉得这可能是PDF格式的3D Artwork功能的一个例子,我以前不知道这个功能(除了它的名字,我什么都不知道)。根据参考资料:

可以指定3D艺术品的特定视图,包括初始显示的默认视图和可以选择的其他视图。视图可以具有可以在用户界面中显示的名称。

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

 类似资料:
  • 我曾尝试使用ApacheFop将HTML转换为PDF。(HTML-- 它适用于简单的html文件。 它不适用于带有样式(通过嵌入的css或样式属性)的html文件。PDF已创建,但完全未格式化。我试图转换超文本标记语言文件,我没有太多的样式/内容控制。 在我的用例中,为每个html创建xslt并不实用。 目前,我确实有一个与flyingsaucer一起工作的实现。但是,该要求要求在没有AGPL许可

  • 问题内容: 我希望能够滚动浏览整个页面,但不显示滚动条。 在谷歌浏览器中: 但是Mozilla Firefox和Internet Explorer似乎无法正常工作。 我也在CSS中尝试过: 那确实隐藏了滚动条,但我不能再滚动了。 有什么办法可以删除滚动条,同时仍然可以滚动整个页面? 请仅使用CSS或HTML。 问题答案: 只是测试工作正常。 JavaScript: 由于滚动条的宽度在不同的浏览器中

  • 我试图使用Apache Fop和Java生成PDF,但生成的Pdf总是一个空白页。它都嵌套在一个网络应用程序中,割断器是玻璃鱼。 有人有什么建议吗? 以下是我的xsl: 示例XML文件如下所示: 编辑:应该生成pdf的Java代码。。。 第二次编辑: 我发现我的outputStream有问题。我想显示另存为对话框,以便从web应用程序下载生成的文件。我不明白,我的输出有什么问题。。。

  • 我希望能够滚动通过整个页面,但没有滚动条显示。 在Google Chrome中是: 但Mozilla Firefox和Internet Explorer似乎不是这样工作的。 我也在CSS中尝试过这个: 这确实隐藏了滚动条,但我不能再滚动了。 有没有一种方法,我可以删除滚动条,同时仍然能够滚动整个页面? 请使用CSS或HTML。

  • 问题内容: 我可以在事务中运行动态sql并使用EXEC进行回滚: 将其放入事务中,并在exec语句后使用@@ error进行回滚。 例如。代码 如果存在n条动态sql语句并且错误发生在n / 2中,则将回滚前1到((n / 2)-1)条语句 有关第一个答案的问题 @@ Error最有可能不会拾取错误,这意味着它可能不会拾取错误,这意味着事务可能会提交?达不到目的 SQL Server 2005+中

  • 给定一个带有一些子节点的巨大的是的内容,我如何滚动以使当前视口之外的子节点之一可见?