【问题标题】:How to extract graphics which is not an image如何提取不是图像的图形
【发布时间】:2021-12-19 08:23:02
【问题描述】:

this PDF 的第一页在图像顶部显示以下白色装饰文本。

使用PDFBox utility PrintImageLocations 时,此图形提取为图像,仅提取背景图像,没有白色装饰文本。转换为 Word doc 时,修饰文本被提取为 shape,其属性可以修改,例如填充颜色、边框颜色等等。

是否可以使用 PDFBox 从 PDF 中提取该形状?怎么样?

【问题讨论】:

  • @TilmanHausherr 谢谢!!!我已经修改了 LineCatcher 示例,现在在 Graphics2D 对象上绘制(翻转)形状。如何从 PDFGraphicsStreamEngine 获取绘图(笔触和填充)颜色?
  • getGraphicsState().getStrokingColor()getGraphicsState().getNonStrokingColor()

标签: java pdfbox


【解决方案1】:

提取此类图形的最简单方法是对可以生成 ScaledVectorGraphics 的图形进行逆向工程,因为在这里我必须将颜色从白色更改为洋红色,否则它看起来像雪景。

我不使用 PDFbox,所以不能说这有多么容易。我只是将第 1 页导出为 SVG,使用

MuPDF\mutool.exe convert -o page1.svg -O no-reuse-images Xcel_Energy-AR2018.pdf 1

但是,您将获得所有 SVG 输出,例如下部文本,并注意左上角和左下角页码中像素图形后面不可见的额外标题文本。

注意:所有内容(因此任何常规文本和图像像素都转换为 SVG 对象)没有更简单的方法来提取所有 PostScript Printer 样式的移动和 lineto。所以是的,它是矫枉过正的,因为它需要解析才能获得感兴趣的对象(更容易在 GUI 中完成,例如构造它的 inkscape 或 InDesign)。这不是一种很好的形状识别方法,因为 y x 值被描述为矩形,并且位置和标量很可能因页面而异,因此除了填充外观之外没有其他常量。填充后的对象最好通过重新生成为视觉符号识别的像素来“看到”(很像 OCR)。

【讨论】:

  • 谢谢!好像你的建议不完全符合我的要求。我不想将文本 (Destination 2050...) 与右上角的形状一起提取。文本由另一个流提取到 JSON 对象中。需要进一步分析该形状。
  • 是的,我们这样做。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
  • 2013-03-02
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
相关资源
最近更新 更多