【问题标题】:ITextSharp - get image at a particular locationITextSharp - 在特定位置获取图像
【发布时间】: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


【解决方案1】:

iText(Sharp) 的解析器命名空间允许使用 RenderFilter 过滤由 IRenderListener 实现消化的信息:

public abstract class RenderFilter {

    /**
     * @param renderInfo
     * @return true if the text render operation should be performed
     */
    public virtual bool AllowText(TextRenderInfo renderInfo){
        return true;
    }

    /**
     * 
     * @param renderInfo
     * @return true is the image render operation should be performed
     */
    public virtual bool AllowImage(ImageRenderInfo renderInfo){
        return true;
    }
}

对于按区域进行过滤,已经有一个文本渲染过滤器,RegionTextRenderFilter

对于您的任务,只需复制它并添加类似于现有 AllowText(TextRenderInfo renderInfo) 方法的 AllowImage(ImageRenderInfo renderInfo) 实现。

【讨论】:

  • 嗨,MKL,我走得很远,但我有点茫然,想知道你是否可以看一下代码(上面)我可以找到矩形上的图像,但我不能弄清楚如何获取图像?任何帮助都会很棒。再次感谢
  • 您的原始代码延续了MyImageRenderListener - 为什么不继续使用它或至少使用类似的图像侦听器?
  • 是的,我昨天晚些时候所做的工作非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-24
  • 1970-01-01
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多