【发布时间】:2014-11-04 16:33:03
【问题描述】:
我需要做的是提取 2D DataMatrix(位图)条形码并读取它。我可以完成这项工作,但是我必须遍历每一页上的所有图像。当我有 1000 页时,这需要很长时间,所以我想知道是否可以定义图像(条形码)所在的位置(矩形)并提取该图像?
条形码总是在同一个位置。 注意:我正在使用来自 e-IceBlue 的 Spire.Barcode
感谢您的帮助。
CODE RenderFilter sn-p:
public class MyRegionTextRenderFilter : RenderFilter {
/** the region to allow text from */
private RectangleJ filterRect;
public PdfImageObject image;
/**
* Constructs a filter
* @param filterRect the rectangle to filter text against. Note that this is a java.awt.Rectangle !
*/
public MyRegionTextRenderFilter(RectangleJ filterRect) {
this.filterRect = filterRect;
}
/**
* Constructs a filter
* @param filterRect the rectangle to filter text against.
*/
public MyRegionTextRenderFilter(iTextSharp.text.Rectangle filterRect)
{
this.filterRect = new RectangleJ(filterRect);
}
/**
* @see com.itextpdf.text.pdf.parser.RenderFilter#allowText(com.itextpdf.text.pdf.parser.TextRenderInfo)
*/
public override bool AllowImage(ImageRenderInfo renderInfo)
{
var matrix = renderInfo.GetImageCTM();
float left = matrix[6];
float top = matrix[7];
float width = matrix[0];
float height = matrix[4];
return filterRect.IntersectsLine(left, top, width, height);
}
}
代码调用:
RectangleJ rect = new RectangleJ(518.0f, 18.0f, 23.0f, 23.0f);
PdfReaderContentParser parser2 = new PdfReaderContentParser(pdfReader);
RenderFilter[] renderFilter = new RenderFilter[1];
renderFilter[0] = new MyRegionTextRenderFilter(rect);
FilteredTextRenderListener listener2 = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), renderFilter);
parser2.ProcessContent(3, listener2);
【问题讨论】:
-
您可能想使用
RegionTextRenderFilter。 -
好的,我知道如何使用 RegionTextRenderFilter 获取文本,也知道如何获取图像信息,但是如何从 RegionTextRenderFilter 获取图像?
-
好吧,不是
RegionTextRenderFilter,而是图像的等价物。只需复制RegionTextRenderFilter 并添加类似于现有AllowText(TextRenderInfo renderInfo)方法的AllowImage(ImageRenderInfo renderInfo)实现。 -
好吧,你为什么不把它作为答案,我会接受 ii。再次感谢
-
修改后的代码备注:您的
float top = matrix[7]通常是bottom。
标签: image itextsharp extract