C# iTextSharp区域ExtEnderFilter在宽度不足的情况下不工作

C# iTextSharp区域ExtEnderFilter在宽度不足的情况下不工作,c#,.net,itextsharp,C#,.net,Itextsharp,我正在使用iTextSharp从特定矩形内的pdf获取数据 在高度的情况下获取的数据工作正常,但在宽度的情况下,返回的是整行数据,而不是矩形中的单词 我使用的代码如下: PdfReader reader = new PdfReader(Home.currentInstance.Get_PDF_URL()); iTextSharp.text.Rectangle pageRectangle = reader.GetPageSize(currentPage);

我正在使用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);
我们将非常感谢您的帮助


提前感谢

最后,我能够解决这个问题

我创建了以下类

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));

现在它工作得很好。我希望它也能帮助其他人

可以找到一些解释,其中重点介绍了iText/Java.public void RenderImage(ImageRenderInfo renderInfo){this.textextractionstrategy.RenderImage(renderInfo);}的等效解决方案。这是无用的。文本提取器将忽略此方法。如果确实需要渲染图像,可以实现自定义的RenderListener,而不是自定义的文本提取策略。@Silent Sojourner我不知道上述实现有任何问题,并且在我的一个实时应用程序中运行良好。如果你面临任何问题,请分享,我会尽力解决。