获取图像的极右、左、上、下位置 - Itext
Get the Extreme right , left,top,bottom position of an image - Itext
我正在为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);
}
这更像是对 OP 实际需要的答案,一种检索页面上所有内容的边界框的方法。
OP 已经使用 iText TextMarginFinder
渲染监听器 class 来确定页面上文本的边界框。在 this answer an analogous class MarginFinder 的上下文中开发了它不仅考虑文本而且还考虑其他类型的内容,例如位图图像和矢量图形。
因此,将 TextMarginFinder
的使用替换为 MarginFinder
可以找到页面上任何内容的边界框。
请注意:
考虑任何内容,边距查找器不检查内容是否有所不同。例如。想想白色文本、白色位图区域或白色矩形,所有这些都被视为内容,因此边界框也包含此类不可见内容。尤其是后一个例子,白色矩形,可能是这里或那里的问题,因为某些软件首先在整个页面区域绘制白色矩形。
不考虑剪切路径。因此,即使是从未绘制的内容(因为它被剪掉了)也会使边界框扩展。
也不考虑页面边框。因此,打印标记等页外内容可能会使边界框扩展得更多。
计算矢量图形边界框的代码不正确:它只是 returns 所有控制点的边界框,在贝塞尔曲线的情况下可能是错误的。它忽略线宽和楔形类型也会导致坐标有些偏离。
不考虑注解。因此,如果期望也考虑注释,则生成的边界框可能会太小,例如对于表单。
尽管存在这些缺点,渲染侦听器通常 returns 正确的结果。如果这还不够,可以相应地扩展 class。
PS:对原题感兴趣的朋友可以在MarginFinder
渲染监听器class及其使用中找到答案。
我正在为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);
}
这更像是对 OP 实际需要的答案,一种检索页面上所有内容的边界框的方法。
OP 已经使用 iText TextMarginFinder
渲染监听器 class 来确定页面上文本的边界框。在 this answer an analogous class MarginFinder 的上下文中开发了它不仅考虑文本而且还考虑其他类型的内容,例如位图图像和矢量图形。
因此,将 TextMarginFinder
的使用替换为 MarginFinder
可以找到页面上任何内容的边界框。
请注意:
考虑任何内容,边距查找器不检查内容是否有所不同。例如。想想白色文本、白色位图区域或白色矩形,所有这些都被视为内容,因此边界框也包含此类不可见内容。尤其是后一个例子,白色矩形,可能是这里或那里的问题,因为某些软件首先在整个页面区域绘制白色矩形。
不考虑剪切路径。因此,即使是从未绘制的内容(因为它被剪掉了)也会使边界框扩展。
也不考虑页面边框。因此,打印标记等页外内容可能会使边界框扩展得更多。
计算矢量图形边界框的代码不正确:它只是 returns 所有控制点的边界框,在贝塞尔曲线的情况下可能是错误的。它忽略线宽和楔形类型也会导致坐标有些偏离。
不考虑注解。因此,如果期望也考虑注释,则生成的边界框可能会太小,例如对于表单。
尽管存在这些缺点,渲染侦听器通常 returns 正确的结果。如果这还不够,可以相应地扩展 class。
PS:对原题感兴趣的朋友可以在MarginFinder
渲染监听器class及其使用中找到答案。