如何以最小的内存占用直接将大内容流式传输为 PDF?

2024-04-18

我正在尝试以最小的内存占用(例如每个客户端/线程 20 MB)将格式化数据的大内容(例如 200 MB)流式传输为 PDF。 PDF结构是用Adobe postscript编写的,直接用PDF postscript格式编写比较复杂。我一直在使用以下 API 将内容流式传输为 PDF。

  • 贾斯珀报告
  • iText

我在使用 Jasper 报告时面临的问题是,它需要将所有输入数据放入内存中,并且仅支持 OutputStream。 Jasper Reports中有一个支持数据InputStream的函数,但是在后端Jasper将整个InputStream数据加载到内存中并有效地耗尽了内存。

iText 的问题在于它是商业性的。我现在正在寻找编写自己的 Java API 来将格式化数据(包括表格、图像)直接传输到 PDF。我参考了以下书籍来了解PDF结构:

  • Adobe 的 PDF 结构
  • PDF 解释 (O'REILLY)

上述书籍仅涵盖基本的 PDF 格式,例如文本和 2D 图形。如何将我能够使用 HTML/CSS 生成的表格、图标和所有其他格式绘制到 PDF 中?

我需要一些关于深入理解 PDF 结构的指导。或者,是否已经有一个 Java API 支持将输入内容直接流式传输到 PDF,而无需将整个数据保存在内存中?

注意:无头浏览器(PhantomJS、wkhtmltopdf)、Apache FOP、Apache PdfBox 通过将整个数据加载到内存中来呈现 PDF。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以最小的内存占用直接将大内容流式传输为 PDF? 的相关文章

随机推荐

  • React 无状态组件 this.refs..value?

    我不知道我这样做是否正确 如果我想从输入中获取值 我使用 this refs whatever value trim 但如果该输入是无状态函数组件 我如何检索 onSubmit 的值 经过研究 我知道现在这是不正确的 但是您应该如何从这些输
  • 未找到源,但无法搜索部分或全部事件日志。无法访问的日志:安全性[重复]

    这个问题在这里已经有答案了 我收到错误 未找到源 但无法获取部分或全部事件日志 搜索过 无法访问的日志 安全 当我运行下面的代码来捕获 Win 2K12 R2 服务器 IIS 8 5 上的错误时 EventLog elog new Even
  • 在 iOS 中添加/连接两个文本字段到一个标签中

    我有两个文本字段 在一个视图控制器中显示名称和首字母缩写 我想在另一个视图控制器中将两者显示为一个标签 我怎样才能做到这一点 要将数据从一个页面发送到另一页面 请查看所以在这里回答 https stackoverflow com quest
  • 使用 Sql Server 表中的值的 C# 枚举

    目前我有一个 SQL Server 2005 表 看起来有点像 ID name desc 1 ONE Value One 3 THREE Value Three 5 FIVE Value Five 该表对应于 C 中的枚举 如下所示 enu
  • win32com(python)错误

    我正在尝试在记事本中为我正在处理的程序自动执行操作 但我无法弄清楚我收到的错误消息 import os import win32com object win32com client Dispatch Notepad Application
  • 如何在 Javascript 中创建动态文件+下载链接? [复制]

    这个问题在这里已经有答案了 通常 HTML 页面可以包含可从服务器下载的文档 PDF 等 的链接 假设有一个启用 Javascript 的网页 是否可以从用户浏览器中动态创建一个文本文档 例如 并添加一个链接来下载该文档 而无需往返服务器
  • MAMP MySQL 无法连接:设置无效。

    我在 MAMP 灌输中遇到了问题 我没有改变它刚刚发生的任何事情 我完美地启动了 MAMP 它为 MySQL 服务器启动提供了绿灯 我可以使用 mysql 命令从终端连接到它 但是 当我尝试打开 phpMyAdmin 时 出现此错误 错误
  • 如何消除“最后一个语句应该返回一个值”警告?

    Sun Studio 12 1 打印警告 Warning The last statement should return a value 经常用于这样的功能 int f some code that may return if we en
  • HttpPost 适用于 Java 项目,但不适用于 Android 项目

    我为我的 Android 设备编写了一些代码 用于通过 HTTPS 登录网站并从结果页面中解析一些数据 一个HttpGet首先获取登录所需的一些信息 然后HttpPost执行实际的登录过程 下面的代码在 Eclipse 中的 Java 项目
  • 禁用 LINQ to SQL 中的触发器

    我们创建了一个带有触发器的表 每次有 UPDATE INSERT 时都会更新其中的 ModifiedDate 字段 不过 对于我们应用程序中的特定交易 我们希望暂时禁用此触发器 可以直接从 LINQ 执行此操作吗 直接 不调用存储过程 不使
  • 仅获取 git 远程存储库的标签/引用

    是否可以在不下载对象 文件的情况下获取存储库 例如 GitHub 的标签 引用 我的用例是打包某些软件的最新测试版 这些软件具有悠久的历史 因此很难克隆 理想情况下 在确定我希望使用的标签后 我可以 git clone b tag dept
  • 在 Python 中使用 Rasterbar libtorrent 加载 Magnet LINK

    如何通过 rasterbar libtorrent python 绑定加载 Magnet 链接 import libtorrent as lt import time ses lt session params save path home
  • PHP 中的位掩码设置?

    位和位掩码是我一段时间以来一直难以理解的东西 但我想学习如何在 PHP 中使用它们进行设置和类似的操作 我终于找到了一个声称可以做到这一点的课程 据我所知 它似乎有效 但我不确定这是否是最好的方法 我将在下面发布带有示例代码的类文件 以显示
  • Apache Camel/ActiveMQ 优先级路由

    我有两个具有相同消费者的 AMQ 队列 第一个队列 Q1 处理 97 的消息 另一个队列 Q2 仅处理 3 问题是 Q2 中的消息需要在排队后立即处理 所以我的问题是 当第二季度有消息可用时 我需要以某种方式暂停第一条路线以吸引其消费者 a
  • 在 Windows 资源管理器中打开一个文件夹并选择一个文件,仅第二次有效

    使用中描述的代码这个答案 https stackoverflow com a 696144 107625SO 发布的 打开文件夹并选择文件 https stackoverflow com questions 334630 open fold
  • 在perl脚本中调用带有输入参数和输出光标的存储过程

    尝试在 perl 脚本中执行过程 Proceure gt 创建或替换 PROCEDURE Getproc v catg IN CHAR DEFAULT NULL v cursor OUT SYS REFCURSOR 执行程序 my sth
  • 为什么大多数 RNG 中上限都是独有的?

    大多数编程语言都提供 伪 随机数生成器 其中许多都有方便的方法来生成特定范围内的整数 到目前为止 在我见过的所有实现中 范围的下限是包含的 而上限是排除的 这有具体的技术或历史原因吗 我可以想象 在使用索引或长度时它很方便 但我找不到任何有
  • 如何查明当前安装的 webdeploy/msdeploy 版本是什么?

    我正在寻找类似 Powershell 脚本的东西来检查 msdeploy 是否已安装 如果是 是什么版本 我考虑过检查 c Program Files IIS 并检查那里的 MSDeploy 安装 但这总是保证是安装位置吗 我需要它在任何给
  • GAE:模型失去了父子关系的踪迹

    我在谷歌应用程序引擎数据存储中的实体关系中遇到了一个非常奇怪的问题 我正在开发一个 Python GAE Web 应用程序 学习练习 完整的代码可以在来源锻造 http rhs galleries svn sourceforge net v
  • 如何以最小的内存占用直接将大内容流式传输为 PDF?

    我正在尝试以最小的内存占用 例如每个客户端 线程 20 MB 将格式化数据的大内容 例如 200 MB 流式传输为 PDF PDF结构是用Adobe postscript编写的 直接用PDF postscript格式编写比较复杂 我一直在使