Discussion:
PDFs anzeigen und Bildbereiche markieren und speichern
(zu alt für eine Antwort)
Lothar Armbrüster
vor 14 Jahren
Permalink
Hallo NG,
ich suche eine Möglichkeit, aus Delphi heraus PDFs anzuzeigen und
insbesondere Bildbereiche zu markieren und abzuspeichern.
Ich Funktionalität steckt im Adobe Reader 10 drin, ich habe aber in
der ActiveX-API nichts zum Thema Snapshots gefunden. Die "große" API
erfordert die Installation von Acrobat und ist daher keine Option.
Kennt jemand einen Viewer oder gar Delphi-Komponenten, die das
Herauskopieren von Bildteilen per Programm gestatten?
Ich möchte nicht alle Bilder aus dem PDF heraushaben, sondern nur
Teile davon. Es handelt sich um gescannte Zeitschriften, die durch
eine Texterkennung gejagt wurden. Wenn ich alle Bilder exportiere,
bekomme ich immer die ganze Seite, ich möchte aber nur Werbeanzeigen
markieren und deren Bilder exportieren ohne den gescannten Text im
Bild zu haben. Vom Text interessiert mich maximal der Werbeslogan, der
auch markiert und kopiert werden soll (daher die Texterkennung).

Vielen Dank,
Lothar Armbrüster
Hans-Peter Diettrich
vor 14 Jahren
Permalink
Post by Lothar Armbrüster
ich suche eine Möglichkeit, aus Delphi heraus PDFs anzuzeigen und
insbesondere Bildbereiche zu markieren und abzuspeichern.
Ich Funktionalität steckt im Adobe Reader 10 drin, ich habe aber in
der ActiveX-API nichts zum Thema Snapshots gefunden. Die "große" API
erfordert die Installation von Acrobat und ist daher keine Option.
Kennt jemand einen Viewer oder gar Delphi-Komponenten, die das
Herauskopieren von Bildteilen per Programm gestatten?
Das Hauptproblem dürfte die Ermittlung des Rahmens sein. Ich würde dafür
ein transparentes Fenster nehmen, über die Anzeige legen, und dann per
Mouse-Events (down/up) die Koordinaten des Ausschnitts ermitteln. Dann
das Rechteck vom Canvas in eine Datei abspeichern, ggf. über ein
Image-Control.

Ersatzweise könnte auch MouseCapture gehen, um an die Mausereignisse
außerhalb des Programmfensters dranzukommen.

Vielleicht reicht es auch, eine PDF-Komponente in ein Formular
einzubinden und zu disabeln, damit sie die Mausereignisse nicht bekommt.
Oder wie oben ein transparentes Panel o.ä. drüberlegen, das die
Mausereignisse bekommt...

DoDi
Lothar Armbrüster
vor 14 Jahren
Permalink
...
Den Rahmen könnte ich evtl. auch direkt in das Fenster zeichnen. Mein
Hauptproblem ist erstmal, eine Komponente zu finden, die das Kopieren
von Bildteilen erlaubt.
Wenn ich eine PDF-Komponente auf dem Fenster disable, kann ich den
Text nicht mehr kopieren. Ich habe ja PDFs, die den erkannten über der
Grafik liegen haben. Am liebsten wäre es mir, wenn ich den Adobe
Reader dazu bringen könnte, seine Snapshotfunktion per ActiveX
ansteuern zu lassen. Aber das scheint nicht zu klappen. (Oder ich bin
zu blind, um zu sehen, wie's geht.)

Lothar
Hans-Peter Diettrich
vor 14 Jahren
Permalink
Post by Lothar Armbrüster
Den Rahmen könnte ich evtl. auch direkt in das Fenster zeichnen. Mein
Hauptproblem ist erstmal, eine Komponente zu finden, die das Kopieren
von Bildteilen erlaubt.
Das ist doch nicht notwendig, kann man direkt vom Screen abholen.
Post by Lothar Armbrüster
Wenn ich eine PDF-Komponente auf dem Fenster disable, kann ich den
Text nicht mehr kopieren.
Du wolltest doch nur die Bilder?
Post by Lothar Armbrüster
Ich habe ja PDFs, die den erkannten über der
Grafik liegen haben.
Das ist natürlich schlecht.
Post by Lothar Armbrüster
Am liebsten wäre es mir, wenn ich den Adobe
Reader dazu bringen könnte, seine Snapshotfunktion per ActiveX
ansteuern zu lassen.
Manche PDFs wehren sich gegen jegliches Kopieren.
Post by Lothar Armbrüster
Aber das scheint nicht zu klappen. (Oder ich bin
zu blind, um zu sehen, wie's geht.)
Komfort gibt's nur im richtigen (teuren) Acrobat.

DoDi
Lothar Armbrüster
vor 14 Jahren
Permalink
Post by Hans-Peter Diettrich
Post by Lothar Armbrüster
Den Rahmen könnte ich evtl. auch direkt in das Fenster zeichnen. Mein
Hauptproblem ist erstmal, eine Komponente zu finden, die das Kopieren
von Bildteilen erlaubt.
Das ist doch nicht notwendig, kann man direkt vom Screen abholen.
Das ist vielleicht eine Idee. Ich müsste die Bilder dann aber in
Originalgröße anzeigen, was bei 300dpi schon mit etwas Scrollen
verbunden ist.
Post by Hans-Peter Diettrich
Post by Lothar Armbrüster
Wenn ich eine PDF-Komponente auf dem Fenster disable, kann ich den
Text nicht mehr kopieren.
Du wolltest doch nur die Bilder?
Im Wesentlichen geht's um eine Werbemarktbeobachtung, bei der die
Anzeigenmotive für die Kunden abrufbar sein sollen. (Daher die
Bilder). Aber ich muss auch einzelne Texte (z.B. den Werbeslogan)
kopieren können.
Post by Hans-Peter Diettrich
Post by Lothar Armbrüster
Ich habe ja PDFs, die den erkannten über der
Grafik liegen haben.
Das ist natürlich schlecht.
An sich ist das gar nicht verkehrt. Mit dem Adobe Reader kann man die
Texte kopieren und wahlweise auch Ausschnitte aus den Bildern
kopieren. Nur leider eben nicht per ActiveX steuerbar. Ich hätte beim
Markieren von Bildern gerne noch die Größe im Verhältnis zur ganzen
Seite, o.ä. Dann kann man bei der Erfassung der Anzeige direkt den
Preis für z.B. eine 1/3 Seite in der Preisliste ermitteln, bzw.
erstmal feststellen, dass es sich überhaupt um eine drittel Seite
handelt. Die Erfasserinnen haben dafür inzwischen zwar einen Blick
entwickelt, aber hier besteht noch Automatisierungspotential.
Post by Hans-Peter Diettrich
Post by Lothar Armbrüster
Am liebsten wäre es mir, wenn ich den Adobe
Reader dazu bringen könnte, seine Snapshotfunktion per ActiveX
ansteuern zu lassen.
Manche PDFs wehren sich gegen jegliches Kopieren.
Die, die ich habe, stammen aus dem Scanner bzw. aus Omnipage Pro, so
dass ich hier mit dem Kopieren keine Rechteprobleme habe.
Post by Hans-Peter Diettrich
Post by Lothar Armbrüster
Aber das scheint nicht zu klappen. (Oder ich bin
zu blind, um zu sehen, wie's geht.)
Komfort gibt's nur im richtigen (teuren) Acrobat.
DoDi
Es scheint wohl so. Das Witzige ist, dass man die AcroRd32.dll als
Typbiliothek importieren kann, ohne Acrobat installiert zu haben. Der
Reader reicht. Aufrufen kann man die Funktionen aber nur, wenn Acrobat
installiert ist (vermute ich mal). Sonst gibt's immer "Klasse nicht
registriert".

Anyway,
danke für die Denkanstöße.

Lothar
Perlsau
vor 14 Jahren
Permalink
...
Bei Ebay werden regelmäßig ältere Acrobat-Versionen günstig angeboten.
Hab mir letztes Jahr Acrobat 7 für 105 Euro ersteigert.
Steffen Christgau
vor 14 Jahren
Permalink
Hallo Lothar,
Post by Lothar Armbrüster
ich suche eine Möglichkeit, aus Delphi heraus PDFs anzuzeigen und
insbesondere Bildbereiche zu markieren und abzuspeichern.
Du könntest z.B. MuPDF [1] verwenden. Das ist allerdings nicht in Delphi
geschrieben sondern in C. Du könntest eine Wrapper-DLL um die benötigte
Funktionalität basteln, was natürlich etwas Aufwand ist. Dafür kostet es
nix.
Post by Lothar Armbrüster
Ich möchte nicht alle Bilder aus dem PDF heraushaben, sondern nur
Teile davon. Es handelt sich um gescannte Zeitschriften, die durch
eine Texterkennung gejagt wurden. Wenn ich alle Bilder exportiere,
bekomme ich immer die ganze Seite, ich möchte aber nur Werbeanzeigen
markieren und deren Bilder exportieren ohne den gescannten Text im
Bild zu haben.
So wie ich das Problem verstehe, würde es doch ausreichen, die gescannte
Seite (Bild) anzuzeigen und den entsprechenden Ausschnitt auswählen zu
lassen. Das würde das Problem auf die Anzeige eines Bildes und Auswahl
eines Rechtecks reduzieren. Und das wurde schon öfter gelöst ;-)

Zur Extraktion der Bilder könnte man pdfshow aus dem MuPDF-Paket [2]
verwenden. Das holt u.a. auch alle Bilder aus einem PDF. Das Programm
könntest du aus deiner Anwendung in einem zunächst leeren
Arbeitsverzeichnis starten, danach über die extrahierten Dateien
iterieren, schauen obs ein Bild (und hoffentlich nur eins mit der
gesamten Seite drin) ist, in deiner Delphi-Anwendung anzeigen, ROI
auswählen lassen, und Ende alle Dateien löschen. Nur so als Idee...

Gruß Steffen

[1] http://www.mupdf.com/
[2] http://mupdf.googlecode.com/files/mupdf-0.8.165-windows.zip
Lothar Armbrüster
vor 14 Jahren
Permalink
Post by Steffen Christgau
Hallo Lothar,
Post by Lothar Armbrüster
ich suche eine Möglichkeit, aus Delphi heraus PDFs anzuzeigen und
insbesondere Bildbereiche zu markieren und abzuspeichern.
Du könntest z.B. MuPDF [1] verwenden. Das ist allerdings nicht in Delphi
geschrieben sondern in C. Du könntest eine Wrapper-DLL um die benötigte
Funktionalität basteln, was natürlich etwas Aufwand ist. Dafür kostet es
nix.
Das werde ich mir mal ansehen.
...
Ich hätte gerne in einer Anwendung die Möglichkeit, sowohl den erkannten
Text als auch Teile des Bildes zu markieren und kopieren.
Eine Möglichkeit war da die gescannten PDFs durch die Texterkennung zu
jagen und mit dem Ergebnis weiterzuarbeiten.
Als Alternative teste ich gerade die APIs von Omnipage und
FineReader. Hier könnte man ähnliches erreichen, aber die Teile kosten
richtig Geld. Für eine Entwicklerlizenz könnte ich auf vier oder fünf
Arbeitsplätzen das große Acrobat installieren...
...
Wir sind hier bzgl. des genauen Vorgehens noch in der
Entscheidungsfindung. Mal sehen, was am Ende dabei rauskommt.

Lothar

Loading...