Kann jemand eine Open-Source-Bibliothek/API zum Extrahieren der Texte und Bilder aus einem PDF empfehlen? Nachfolgend finden Sie die Anforderungen. Ich habe PDF Clown, C# .NET-Version verwendet, hatte aber Probleme beim Erstellen einer Excel-Tabelle damit.
Ihre Anforderung, Tabellen aus PDFs zu extrahieren, ist nicht einfach zu erfüllen.
Standard-PDFs geben keine Hinweise auf die Semantik dessen, was sie auf einer Seite zeichnen: Die einzige Unterscheidung, die die Syntax bietet, ist die Unterscheidung zwischen Vektorelementen (Linien, Füllungen, ...), Bildern und Text.
Ob irgendein Zeichen Teil einer Tabelle oder Teil einer Zeile oder nur ein einsames einzelnes Zeichen in einem ansonsten leeren Bereich ist, lässt sich programmgesteuert nicht einfach durch Analysieren des PDF-Quellcodes erkennen.
Einen Hintergrund dazu, warum das PDF-Dateiformat niemals als geeignet für das Hosten von extrahierbaren, strukturierten Daten angesehen werden sollte , finden Sie in diesem Artikel:
Warum das Aktualisieren von Dollars für Dokumente so schwierig war (ProPublica-Website)
Nachdem ich das oben Gesagte gesagt habe, lassen Sie mich Folgendes hinzufügen:
Für eine erstaunliche Open-Source-Familie von Tools, die von Woche zu Woche besser und besser werden, um tabellarische Daten aus PDFs zu extrahieren (es sei denn, es handelt sich um gescannte Seiten) – im Widerspruch zu dem, was ich in meinen einleitenden Absätzen gesagt habe ! - Siehe TabulaPDF . Siehe diese Links:
Tabula ist in Ruby geschrieben. Sein Quellcode ist auf GitHub offen . Seine Lizenz ist kostenlos und nicht GPL .
Hier würde ich empfehlen, sich bei Poppler umzusehen . Poppler ist eine PDF-Rendering-Bibliothek, die von der xpdf-3.0- Codebasis abgezweigt wurde.
Es wird mit einem Befehlszeilenprogramm geliefert, pdfimages
das in PDF-Dateien eingebettete Bilder auflisten und extrahieren kann. Hier ist ein Beispiellauf, der alle Bilder auflistet, die im Seitenbereich 3-5 enthalten sind:
$ pdfimages -list -f 3 -l 5 some.pdf
page num type width height color comp bpc enc interp objectID x-ppi y-ppi size ratio
----------------------------------------------------------------------------------------
3 0 image 577 645 rgb 3 8 image yes 593 0 152 152 106K 9.7%
3 1 smask 577 645 gray 1 8 image no 593 0 152 152 383B 0.1%
3 2 image 382 419 rgb 3 8 image yes 594 0 110 110 56.7K 12%
3 3 smask 382 419 gray 1 8 image no 594 0 110 110 178B 0.1%
4 4 image 1569 344 rgb 3 8 image yes 534 0 162 162 36.4K 2.3%
5 5 image 719 930 index 1 8 image yes 535 0 146 146 42.6K 6.5%
Wie Sie sehen können, ist die Ausgabe eine Tabelle, die alle möglichen nützlichen Informationen über die eingebetteten Bilder enthält:
Verwenden Sie diesen Befehl, um alle Bilder von Seite 9 als PNG-Dateien zu extrahieren und sie mit einem Präfix zu benennen :images-from-page9---
$ pdfimages -png -f 9 -l 9 some.pdf images-from-page9---
Um weitere Optionen anzuzeigen, führen Sie pdfimages -h
.
Wer das Kommandozeilentool nicht möchte, sondern stattdessen die Poppler API/Library mit eigenem Code nutzt, kann die gleichen Funktionen erreichen...
Dieselbe Poppler-Bibliothek wird auch mit einem Befehlszeilenprogramm zum Extrahieren von Text geliefert: pdftotext
.
Hier ist die kurze Hilfeausgabe :
$ pdftotext -h
pdftotext version 0.32.0
Copyright 2005-2015 The Poppler Developers - http://poppler.freedesktop.org
Copyright 1996-2011 Glyph & Cog, LLC
Usage: pdftotext [options] <PDF-file> [<text-file>]
-f <int> : first page to convert
-l <int> : last page to convert
-r <fp> : resolution, in DPI (default is 72)
-x <int> : x-coordinate of the crop area top left corner
-y <int> : y-coordinate of the crop area top left corner
-W <int> : width of crop area in pixels (default is 0)
-H <int> : height of crop area in pixels (default is 0)
-layout : maintain original physical layout
-fixed <fp> : assume fixed-pitch (or tabular) text
-raw : keep strings in content stream order
-htmlmeta : generate a simple HTML file, including the meta information
-enc <string> : output text encoding name
-listenc : list available encodings
-eol <string> : output end-of-line convention (unix, dos, or mac)
-nopgbrk : don't insert page breaks between pages
-bbox : output bounding box for each word and page size to html. Sets -htmlmeta
-opw <string> : owner password (for encrypted files)
-upw <string> : user password (for encrypted files)
[....]
Wie Sie sehen können, gibt es verschiedene Befehlszeilenschalter, um Koordinaten für Textstellen zu adressieren oder abzurufen.
Es ist nicht immer möglich, Text über aus PDFs zu extrahieren pdftotext
. Die PDF-Dateien sehen zwar ganz gut aus, aber ihre interne Struktur kann fehlerhaft sein, wenn es um die Textextraktion geht.
Siehe zum Beispiel diese aktuellen StackOverflow-Antworten:
Popplers Lizenz ist jedoch GPL....
tabula
bei der Tabellenextraktion.)
Bruno Lowagie