我正在为pdf设置保证金,并检查页面内容是否超出保证金。
如果页面内容只是文本,我很容易就能做到。
这就是我正在做的事情:
我正在使用TextMarginFinder
。我会根据图书大小设置 pdf的left margin
值。并使用finder.getLlx();
进行检查,因为finder.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);
}
答案 0 :(得分:1)
这更像是OP实际需要的答案,是一种检索页面上所有内容的边界框的方法。
OP已经使用iText TextMarginFinder
渲染侦听器类来确定页面上文本的边界框。在this answer的上下文中,已经开发了类似的类MarginFinder,其不仅考虑文本而且考虑其他类型的内容,例如位图图像和矢量图形。
因此,用TextMarginFinder
替换MarginFinder
的使用可以找到页面上任何内容的边界框。
请注意:
考虑任何内容,保证金查询程序不会检查内容是否有所作为。例如。考虑白色文本,白色位图区域或白色矩形,都被认为是内容,因此,边界框也包含这样的不可见内容。特别是后一个例子,白色矩形,在这里或那里可能是一个问题,因为一些软件首先在整个页面区域上绘制一个白色矩形。
剪切路径不。因此,即使是从未绘制的内容(因为它被剪掉)也会使边界框扩展。
页面边框也是不。因此,像打印机标记这样的页外内容可能会使边界框更加扩展。
计算矢量图形边界框的代码不正确:它只返回所有控制点的边界框,如果贝塞尔曲线可能为假。忽略线宽和楔形类型也会导致坐标略微偏离。
注意不。因此,如果预期也考虑注释,则所得到的边界框可以是小的,例如,表格。
尽管存在这些缺点,渲染侦听器通常会返回正确的结果。如果这还不够,可以相应地扩展课程。
PS:对原始问题感兴趣的任何人都可以在MarginFinder
渲染侦听器类及其使用中找到答案。