1

我正在为 pdf 设置边距并检查页面内容是否超出边距。

如果页面的内容只是文本,我很容易做到这一点。

这就是我正在做的事情:

我正在使用TextMarginFinder. 我将根据书本大小设置pdf的left margin值。并检查finder.getLlx();sincefinder.getLlx();将使我获得该页面中文本的最左侧位置。

TextMarginFinder finder;
if(leftmar>=finder.getLlx())
   {
        errormargin=1; //left margin error
        System.out.println("Page: "+i+"Margin Error:LeftMArginError ");
   }

但是,如果页面包含图像,这将不起作用。尽管图像超出了边距,但我没有收到上述代码的错误,因为该finder.getLlx();函数似乎仅适用于文本。

两个问题:

1)在循环浏览pdf中的页面时,如果该页面中有图像,我如何检查该特定页面是否包含图像?

2)如果它包含一个图像,我怎样才能获得它的极端位置?

mkl建议后更新

     if(leftmar>=finder.getLlx())
{
    errormargin=1; //left margin error
    System.out.println("finder.getLlx() value ="+finder.getLlx()+", leftmar Value="+leftmar);

}



     if(rightmar<= finder.getUrx()){
            errormargin=1; //right margin error
            System.out.println("finder.getUrx() value ="+finder.getUrx()+", rightmar Value="+rightmar);
     }


if(margintop >= finder.getUry()){
    errormargin=3; //top margin error
    System.out.println("finder.getUry() value ="+finder.getUry()+", margintop Value="+margintop);
}


if(marginbottom >= finder.getLly()){
    errormargin=3; //bottom margin error
    System.out.println("finder.getLly() value ="+finder.getLly()+", marginbottom Value="+marginbottom);
}
4

1 回答 1

1

这更像是对 OP 实际想要的答案,一种检索页面上所有内容的边界框的方法。

OP 已经使用 iTextTextMarginFinder渲染侦听器类来确定页面上文本的边界框。在这个答案的上下文中,已经开发了一个类似的MarginFinder类,它不仅考虑文本,还考虑其他类型的内容,例如位图图像和矢量图形。

因此,替换 by 的使用TextMarginFinder允许MarginFinder找到页面上任何内容的边界框。

请注意:

  • 考虑任何内容,边距查找器不检查内容是否有所不同。例如,考虑白色文本、白色位图区域或白色矩形,它们都被视为内容,因此边界框也包含这些不可见的内容。特别是后一个例子,白色矩形,可能在这里或那里是一个问题,因为某些软件首先在整个页面区域上绘制一个白色矩形。

  • 考虑剪切路径。因此,即使是从未绘制的内容(因为它被剪掉了)也会使边界框扩大。

  • 也不考虑页面边框。因此,像打印机标记这样的页外内容可能会使边界框扩大得更多。

  • 计算矢量图形边界框的代码不正确:它只是返回所有控制点的边界框,在贝塞尔曲线的情况下可能为假。它忽略线宽和楔形类型也会导致坐标有些偏离。

  • 考虑注释。因此,如果期望还考虑注释,例如对于表单,则生成的边界框可能会很小。

尽管有这些缺点,渲染侦听器通常会返回正确的结果。如果这还不够,可以相应地扩展类。

PS:任何对原始问题感兴趣的人都可以在MarginFinder渲染侦听器类及其使用中找到答案。

于 2015-09-05T21:34:08.717 回答