按坐标提取PDF文本

本文关键字:文本 PDF 提取 坐标 | 更新日期: 2023-09-27 18:08:23

我想知道微软。net中是否有一些PDF库能够通过给出坐标来提取文本。

例如(伪代码中的):

PdfReader reader = new PdfReader();
reader.Load("file.pdf");
// Top, bottom, left, right in pixels or any other unit
string wholeText = reader.GetText(100, 150, 20, 50);

我尝试过使用。net的PDFBox(在IKVM之上工作的那个),但没有运气,而且它似乎非常过时且没有文档。

也许有人有PDFBox, iTextSharp或任何其他开源库的好例子,他/她可以给我一个提示。

提前感谢。

按坐标提取PDF文本

好了,谢谢大家的努力。

我使用Apache的PDFBox在IKVM编译之上得到它,这是最终的代码:

PDDocument doc = PDDocument.load(@"c:'invoice.pdf");
PDFTextStripperByArea stripper = new PDFTextStripperByArea();
stripper.addRegion("testRegion", new java.awt.Rectangle(0, 10, 100, 100));
stripper.extractRegions((PDPage)doc.getDocumentCatalog().getAllPages().get(0));
string text = stripper.getTextForRegion("testRegion");

效果很好

无论如何,谢谢你,我希望我自己的回答能帮助别人。如果你需要更多的细节,请在这里评论,我会更新这个答案。

它不是开源的,但希望这对您(以及可能使用ABCPDF的其他任何人)有所帮助

我今天早些时候通过循环遍历PDF中的可用字段完成了这一点。这意味着您正在使用的PDF需要正确创建,并且您需要知道您想要获取文本的字段名(您可以通过添加断点并遍历可用字段来解决这个问题)。

WebSupergoo.ABCpdf6.Doc newPDF = new WebSupergoo.ABCpdf6.Doc();
newPDF.Read("existing_file.pdf");
foreach ( WebSupergoo.ABCpdf6.Objects.Field field in newPDF.Form.Fields )
{
    if ( field.Name == "Text1" )
    {
        // update "Text1"
        field.Value = "new value for Text1";
    }
}
newPDF.Save("new_file.pdf");
newPDF.Clear();

在示例中,"Text1"是要更新的字段名。注意,我还提供了一个保存更新字段的示例。

希望这至少能给你一个如何处理这个问题的想法

应该可以:

RenderFilter[] filters = new RenderFilter[1];
LocationTextExtractionStrategy regionFilter = new LocationTextExtractionStrategy();
filters[0] = new RegionTextRenderFilter(new Rectangle(llx,lly,urx,ury));
FilteredTextRenderListener strategy = new FilteredTextRenderListener(regionFilter, filters);
String result = PdfTextExtractor.GetTextFromPage(pdfReader, i, strategy);
Console.WriteLine(result);

ittext的RegionTextRenderFilter正是您所要寻找的。

所以你想要这样的东西(原谅我的Java,但它应该是微不足道的翻译):

PdfReader reader = new PdfReader(path);
FilteredTextExtractionStrategy regionFilter = 
  new FilteredTextExtractionStrategy( new SimpleTextExtrationStrategy, 
                                      new RegionTextRenderFilter( someRect ) );
String regionText = PdfTextExtractor.getTextFromPage(reader, 0, regionFilter );

此代码将在文本7

PdfReader reader = new PdfReader("D:/Sample2.pdf");
PdfDocument pdfDoc = new PdfDocument(reader);
Rectangle rect = new Rectangle(208, 508, 235, 519);
TextRegionEventFilter regionFilter = new 
TextRegionEventFilter(rect.SetBbox(208, 508, 235, 519));
ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
FilteredEventListener listener = new FilteredEventListener();
LocationTextExtractionStrategy extractionStrategy = listener.AttachEventListener(new LocationTextExtractionStrategy(), regionFilter);
new PdfCanvasProcessor(listener).ProcessPageContent(pdfDoc.GetPage(1));
String text = extractionStrategy.GetResultantText();

您可能想看看这个示例。它使用itextsharp

var pdfFilename = @"PathToYourPDF'random.pdf";
var textToFind = "Lombok";
var pageNumber = 1;
var point = PdfTools.GetTextCoordinate(textToFind, pdfFilename , pageNumber);
Console.WriteLine($"{point.X},{point.Y}");