我想知道Microsoft .NET中是否有一些PDF库能够通过给出坐标来提取文本。
例如( in pseudo-code ):
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);
我尝试使用PDFBox for .NET(那个在IKVM上工作的人)没有运气,而且它似乎非常过时且没有文档记录。
也许任何人都有使用PDFBox,iTextSharp或任何其他开源图书馆这样做的好样本,他/她可以给我一个提示。
提前谢谢。
答案 0 :(得分:7)
好的,谢谢你的努力。
我在IKVM编译之上使用Apache的PDFBox,这是最终的代码:
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");
它就像一个魅力。
无论如何,谢谢你,我希望我自己的答案会帮助别人。如果您需要更多详细信息,请在此处注释,我将更新此答案。
答案 1 :(得分:3)
这不是开源的,但希望这可以帮助你(以及其他任何使用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”是要更新的字段的名称。注意我还提供了保存更新字段的示例。
希望至少可以让您了解如何解决这个问题。
答案 2 :(得分:3)
这应该有效:
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);
答案 3 :(得分:2)
iText的RegionTextRenderFilter
正是您所寻找的。 p>
所以你想要这样的东西(原谅我的Java,但翻译应该是微不足道的):
PdfReader reader = new PdfReader(path);
FilteredTextExtractionStrategy regionFilter =
new FilteredTextExtractionStrategy( new SimpleTextExtrationStrategy,
new RegionTextRenderFilter( someRect ) );
String regionText = PdfTextExtractor.getTextFromPage(reader, 0, regionFilter );
答案 4 :(得分:1)
此代码将在itext 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();
答案 5 :(得分:0)
您可能想看看this sample。它使用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}");