【问题标题】:Drawing on a rendered pdf - Swing在渲染的 pdf 上绘图 - Swing
【发布时间】:2013-05-10 12:08:05
【问题描述】:

在对缺乏可以直接在 pdf 上绘图的免费软件感到非常恼火之后,我决定自己编写它。

我的目标是通过在 GUI 中使用某种画布小部件来实现这一点,并在其下方显示 pdf 的内容,并记录(和渲染)绘制到屏幕上的所有内容,并在保存文件时将绘制的所有内容保存为.png(具有透明背景)并将其覆盖到 .pdf 上。

我已经编写了覆盖 pdf 的内容(使用 iText),但我不确定如何处理 GUI 内容。我应该如何继续渲染pdf? 我见过一种方法,涉及将 .pdf 的页面转换为图像(PDF 渲染器)并在 Swing 中处理,但我想这会出现分辨率问题(缩放)。

我的另一个想法是使用 JPedal 的 Viewer 小部件在 swing 元素中呈现 .pdf,但我不确定如何设置画布。

那么,我应该如何处理呢?
我的界面的一般结构应该是什么?
我没有尝试过这些选项中的任何一个(我仍在调查他们的库接口)。我想尽早寻求建议(因为它是关于程序的基本结构)。

【问题讨论】:

  • 缺少免费软件直接绘制到 pdf 上,我拍到了黑暗 == 绘制到 JLayer(Java6 的 JXLayer)或 GlassPane,然后从 JFrame.getRootPane/ContentPane 创建 BufferedImage 或使用Screen Image @camickr 直接
  • GlassPane 听起来不错(我可以把它放在 Viwewer 上)。关于将鼠标单击/拖动实际转换为 GlassPane 上的绘图的任何建议?
  • GlassPane(必须放置任何 JComponent,然后)默认为 consume() 所有 MouseEvents,如果需要,必须将 KeyEvents(将 KeyListener 添加到放置的任何 JComponent)consume()
  • 使用JLayer,更好,新API,新方法,更易管理
  • JLayer 看起来不错。嗯,我对查看器小部件有一个错误的印象;它允许您将他们的 pdf 应用程序嵌入到我不想要的 swing 程序中(以及所有菜单栏等等)。我应该如何渲染pdf? (做图像的事情?)

标签: java swing pdf itext jpedal


【解决方案1】:

渲染 PDF 非常复杂。我们开发 ABCpdf,我猜我们可能在渲染方面投入了 40 多年。

因此,如果您想这样做,您应该从限制您需要做的事情开始。要么您需要确保您的 PDF 来自使用一组受限功能的统一来源,要么您需要接受您的许多 PDF 无法正确呈现。

接下来,您需要解压缩页面内容流,然后将其分解为 PDF 运算符。然后创建一个 System.Drawing.Bitmap 或类似的,并使用每个 PDF 绘图运算符在该绘图表面上绘图。您可以在 Adob​​e 网站上的 PDF 规范中找到运算符的完整详细信息。

如果您的 PDF 源代码一致、简单且统一,您可能会在几周内得到一些明智的结果。快乐编码:-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 2014-02-03
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多