【问题标题】:iTextSharp RegionTextRenderFilter not working in case of widthiTextSharp RegionTextRenderFilter 在宽度的情况下不起作用
【发布时间】:2014-03-01 05:46:53
【问题描述】:

我正在使用 iTextSharp 从特定矩形内的 pdf 中获取数据

在高度的情况下获取的数据工作正常,但在宽度的情况下,它返回整行而不是矩形中的单词。

我使用的代码如下:

  PdfReader reader = new PdfReader(Home.currentInstance.Get_PDF_URL());
            iTextSharp.text.Rectangle pageRectangle = reader.GetPageSize(currentPage);
            float selection_x = ((float)(selectionRectangle.RenderTransform.Value.OffsetX) / (float)canvas.Width) * pageRectangle.Width;
            float selection_y = pageRectangle.Height - (((float)(selectionRectangle.RenderTransform.Value.OffsetY) / (float)canvas.Height) * pageRectangle.Height);
            float selection_height = ((float)(selectionRectangle.Height) / (float)canvas.Height) * pageRectangle.Height;
            float selection_width = ((float)(selectionRectangle.Width) / (float)canvas.Width) * pageRectangle.Width;
            selection_y -= selection_height;
            RectangleJ rect = new RectangleJ(selection_x,selection_y,selection_width,selection_height);
            RenderFilter[] filter = { new RegionTextRenderFilter(rect) };
            ITextExtractionStrategy strategy;
            strategy = new FilteredTextRenderListener(
           new LocationTextExtractionStrategy(), filter
         );
String pageText = PdfTextExtractor.GetTextFromPage(reader, currentPage, strategy);

我们将不胜感激。

提前致谢

【问题讨论】:

    标签: c# .net itextsharp


    【解决方案1】:

    终于可以解决问题了

    我创建了以下类

    public class LimitedTextStrategy : iTextSharp.text.pdf.parser.ITextExtractionStrategy
        {
    
            public readonly ITextExtractionStrategy textextractionstrategy;
    
            public LimitedTextStrategy(ITextExtractionStrategy strategy)
            {
                this.textextractionstrategy = strategy;
            }
            public void RenderText(iTextSharp.text.pdf.parser.TextRenderInfo renderInfo)
            {
              foreach (TextRenderInfo info in renderInfo.GetCharacterRenderInfos())
            {
                this.textextractionstrategy.RenderText(info);
            } 
            }
            public string GetResultantText()
            {
                return this.textextractionstrategy.GetResultantText();
            }
    
            public void BeginTextBlock() {
                this.textextractionstrategy.BeginTextBlock();
    
            }
            public void EndTextBlock() {
                this.textextractionstrategy.EndTextBlock();
    
            }
            public void RenderImage(ImageRenderInfo renderInfo) {
                this.textextractionstrategy.RenderImage(renderInfo);
            }
        }
    

    然后将提取行改为

    String pageText = PdfTextExtractor.GetTextFromPage(reader, currentPage, new LimitedTextStrategy(strategy));
    

    现在它工作正常。我希望它也可以帮助其他人

    【讨论】:

    • 一些解释可以在this answer 中找到,它侧重于 iText / Java 的等效解决方案。
    • public void RenderImage(ImageRenderInfo renderInfo) { this.textextractionstrategy.RenderImage(renderInfo);这是没用的。文本提取器将忽略此方法。如果确实需要渲染图像,可以实现自定义 RenderListener,而不是自定义文本提取策略。
    • @Silent Sojourner 我不知道上述实现有任何问题,并且在我的一个实时应用程序中运行良好。如果您遇到任何问题,请分享,我会尽力解决。
    猜你喜欢
    • 2015-07-22
    • 2010-12-21
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2013-04-30
    相关资源
    最近更新 更多