2014-11-04 181 views
1

我需要做的是提取二維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); 
+0

您可能想要使用'RegionTextRenderFilter'。 – mkl 2014-11-04 17:00:29

+0

好吧我知道如何使用RegionTextRenderFilter獲取文本,我知道如何獲取圖像信息,但是如何從RegionTextRenderFilter獲取圖像? – Mike 2014-11-04 18:25:53

+1

好的,不是'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

回答

1

iText的(夏普)的解析器命名空間允許的通過使用RenderFilterIRenderListener實施消化信息過濾:

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)實現。

+0

嗨MKL,我得到了很遠,但我有一點損失,想知道如果你可以看看代碼(上面)我可以找到矩形的圖像基礎,但我不知道如何獲得圖像?任何幫助都會很棒。再次感謝 – Mike 2014-11-05 20:30:39

+0

你原來的代碼控制了一個'MyImageRenderListener' - 爲什麼你不繼續使用它或至少是一個可比的圖像監聽器? – mkl 2014-11-06 09:06:59

+0

是的,我昨天晚上做的很好,謝謝! – Mike 2014-11-06 14:02:03