我需要做的是提取二维DataMatrix(位图)条形码并读取它。然而,我可以使这项工作,我必须遍历每个页面上的所有图像。当我有1000页的页面时,这需要很长时间,所以我想知道是否可以定义图像(条形码)的位置(矩形)并提取该图像?ITextSharp - 在特定位置获取图像
条形码总是我在同一个位置。 注意:我使用的是来自e-IceBlue的Spire.Barcode
谢谢你的帮助。
CODE RenderFilter片段:
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'。 – mkl 2014-11-04 17:00:29
好吧我知道如何使用RegionTextRenderFilter获取文本,我知道如何获取图像信息,但是如何从RegionTextRenderFilter获取图像? – Mike 2014-11-04 18:25:53
好的,不是'RegionTextRenderFilter',而是图像的等价物。只需复制[RegionTextRenderFilter](https://svn.code.sf.net/p/itextsharp/code/trunk/src/core/iTextSharp/text/pdf/parser/RegionTextRenderFilter.cs)并添加一个'AllowImage(ImageRenderInfo renderInfo)类似于现有的'AllowText(TextRenderInfo renderInfo)'方法的实现。 – mkl 2014-11-05 08:29:03