为什么我要从ITEXT7c#中提取重复的页面?

为什么我要从ITEXT7c#中提取重复的页面?,c#,pdf,itext,itext7,C#,Pdf,Itext,Itext7,我正在从PDF中提取文本,但在从连续页面返回相同文本时遇到问题。我已经使用iTextSharper编写了一些PDF解析器,并根据有缺陷的假设将以下代码从iTextSharper移植到了iText7这只是一个iTextSharper问题: var pdfDocument = new PdfDocument(new PdfReader(@"C:\Temp\MyForm.pdf")); for (int page = 1; page <= p

我正在从PDF中提取文本,但在从连续页面返回相同文本时遇到问题。我已经使用iTextSharper编写了一些PDF解析器,并根据有缺陷的假设将以下代码从iTextSharper移植到了iText7这只是一个iTextSharper问题:

        var pdfDocument = new PdfDocument(new PdfReader(@"C:\Temp\MyForm.pdf"));

        for (int page = 1; page <= pdfDocument.GetNumberOfPages(); page++)
        {
            var strategy = new SimpleTextExtractionStrategy();
            var pdfPage = pdfDocument.GetPage(page);
            var currentText = PdfTextExtractor.GetTextFromPage(pdfPage, strategy);

            // Process this page
            Console.WriteLine("PAGE {0}", page);
            Console.WriteLine(currentText);
        }
var pdfDocument=newpdfdocument(newpdfReader(@“C:\Temp\MyForm.pdf”);

对于(int page=1;page实际上,它不是从连续页面返回的相同的文本

  • 提取第1页时第1页的文本
  • 提取第2页时第1页和第2页的文本
  • 提取第3页时,第1、2和3页中的文本
这种情况经常发生在对多个页面重复使用文本提取策略的代码中。但在您的代码中并非如此,您正确地为每个页面创建了一个新的策略对象。因此,原因必须在PDF本身中

事实上,文档的每一页都包含了之前所有页面的内容,只是在裁剪框之外。要仅提取相应页面裁剪框中的文本,您必须进行过滤,例如:

string SRC=@“285187.pdf”;
PdfDocument pdfDoc=新PdfDocument(新PDF阅读器(SRC));
Console.WriteLine(“\n285187已过滤\n=================\n”);

对于(int i=1;很遗憾,您没有共享测试PDF。一个想法是:默认情况下,iText文本提取忽略文本是在页面裁剪框内还是在页面裁剪框外。某些PDF在同一内容流上有多个页面的内容,只有通过不同的裁剪框才能选择相应PDF页面对象的内容。对于你的PDF。如果是的话,对裁剪框应用过滤器应该可以解决问题。如果不是,请共享PDF进行分析。感谢mkl的回复。我将不得不调查你的过滤器/裁剪框方法(我不熟悉)这里是PDF(在公共域中顺便说一句):非常感谢mkl解决了我的问题。我需要阅读有关裁剪框的资料。只有SEC可以回答你的问题!“我需要阅读裁剪框的资料”-作为阅读框的起点。