Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi PDF-Eigenschaften auslesen ohne Komponente (https://www.delphipraxis.net/108661-pdf-eigenschaften-auslesen-ohne-komponente.html)

handres 17. Feb 2008 13:54


PDF-Eigenschaften auslesen ohne Komponente
 
Hallo zusammen

Ich versuche (nahe an der Verzweiflung) die PDF-Eigenschaften wie Titel, Subject, Autor auszulesen, ohne dafür eine Komponente einzusetzen (wäre zu langasam, das Auslesen geschieht in einem zeitkritischen Loop). Bisher hab ich's mit StgOpenStorageEx versucht, das scheint aber nur mit Office-Dateien, JPEGs, usw. zu funktionieren. Die PDF-Eigenschaften liegen irgendwie schräg im File.

Hat das schon mal jemand hingekriegt? Ich lese jetzt halt die zwei letzten KBytes des PDF-Docs und parse z.B. nach "/Subject", um die Info herauszuholen. Geht schon, aber vielleicht gibt es einen eleganteren Weg?

Danke für jeden Input,
Herbie

Der_Unwissende 17. Feb 2008 14:23

Re: PDF-Eigenschaften auslesen ohne Komponente
 
Hi und erstmal Herzlich Willkommen in der DP :dp:

Was genau heißt denn in Deinem Fall ohne Komponente? Ich meine an sich ist die Definition des Komponentenbegriffs etwas schwierig (glaube es war sowas wie unabhängig entwickelbar, nur definierte Abhängigkeiten und eine bekannte Schnittstelle, zumindestens sinngemäß, aber kommt auch drauf an nach wem man da gehen möchte).
Wenn es zeitkritisch ist, in welcher Zeit benötigst Du denn diese Informationen?

An sich ist ja die Spezifikation von PDFs offen gelegt. Wenn ich mich an die richtig erinnere, so ist ein Dokument Baumartig aufgebaut, man hat Verweise auf bestimmte Sektionen, ganz unten ist dann immer der Verweis auf das letzte, gültige TOC oder so? Ich würde jedenfalls sagen, dass Dein Ansatz im Prinzip schon richtig ist, ggf. musst Du nur schauen, ob es wirklich immer die letzten 2 Byte sind, in denen der Offset zum TOC stand (gehe mal davon aus, dass Du das schon überprüft hast). Da dann nach den Offsets für die gesuchten Informationen suchen ist definitiv der schnellste und zudem auch noch sauberste Weg. Die Alternative besteht eher darin, dass Du ganz greedy durchs ganze Dokument läufst, was eigentlich nie schneller sein sollte.

Gruß, Der Unwissende

handres 17. Feb 2008 15:15

Re: PDF-Eigenschaften auslesen ohne Komponente
 
Zitat:

Zitat von Der_Unwissende
Hi und erstmal Herzlich Willkommen in der DP :dp:

Was genau heißt denn in Deinem Fall ohne Komponente?

Jo! Hab' mich da wohl nicht ganz klar ausgedrückt: Ich meinte ohne Gnostice, pdfTools und wie die alle heissen, weil die Zeitdauer zum Laden des Files mittels einer solchen Compo in meinem Fall einfach zu gross ist. Ich scrolle durch eine Liste mit Dateinamen von PDFs, die während des Scrollens mit den Eigenschaften des Dokuments ergänzt werden.

Ich machs jetzt Quick&Dirty, lese einfach die letzten zwei kBytes des Files und suche darin nach dem von mir benötigten "/Subject". (In den PDF-Specs schau ich später noch nach dem genauen Offset, damits nur noch Quick und nicht mehr Dirty ist.)

Thx!

omata 17. Feb 2008 16:25

Re: PDF-Eigenschaften auslesen ohne Komponente
 
Auch wenn es dir vermutlich nicht passt, schau dir vielleicht mal das Tool an.

Gruss
Thorsten

ULIK 17. Feb 2008 16:56

Re: PDF-Eigenschaften auslesen ohne Komponente
 
Hallo,

einfach nur die letzten paar KB einlesen und scannen hilft Dir im Allgemeinen nicht viel: Du mußt nämlich schauen, ob das File-Trailer Dictionary einen /Info Eintrag hat. Das ist aber eine indirekte Referenz auf ein Info Dictionary, die Du dann erst mal via XREF-Sections auflösen mußt. (und die Daten stehen nicht unbedingt am Ende des Dokuments!). Wenn Du willst, daß es sicher geht (so das PDF überhaupt diese Daten hat), dann mußt Du wohl externe Komponenten verwenden, die diese daten auslesen und verarbeiten können (oder Du hast vieel Zeit und arbeitest Dich durch die PDF Spezifikation durch und baust Dir deinen eigenen PDF-Parser)

Grüße,
Uli


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz