PDF Information auslesen?
-
- Beiträge: 370
- Registriert: Di 6. Feb 2007, 09:29
- OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
- CPU-Target: 32bit i386, ARM
- Wohnort: Oberösterreich
PDF Information auslesen?
Hallo Leute,
ich bastel gerade ein kleines Werkzeug, das uns hier im Büro die Arbeit ein klein wenig erleichtern soll.
Dazu müsste ich allerdings Informationen aus PDF Dateien auslesen. Alle PDFs haben nur eine Seite und ich bräuchte von dieser Seite das Papierformat und andere Metadaten. Ich muss also nicht mal auf den "Inhalt der Datei" zugreifen.
Kennt jemand zufällig eine Komponente oder ein Package, welches in der Lage ist, das zu bewerkstelligen?
Ich habe schon einige Schlagwörter auf die Suchmaschinen losgelassen, bin aber nicht fündig geworden.
Für jeden Hinweis dankbar,
ich bastel gerade ein kleines Werkzeug, das uns hier im Büro die Arbeit ein klein wenig erleichtern soll.
Dazu müsste ich allerdings Informationen aus PDF Dateien auslesen. Alle PDFs haben nur eine Seite und ich bräuchte von dieser Seite das Papierformat und andere Metadaten. Ich muss also nicht mal auf den "Inhalt der Datei" zugreifen.
Kennt jemand zufällig eine Komponente oder ein Package, welches in der Lage ist, das zu bewerkstelligen?
Ich habe schon einige Schlagwörter auf die Suchmaschinen losgelassen, bin aber nicht fündig geworden.
Für jeden Hinweis dankbar,
Re: PDF Information auslesen?
bembulak hat geschrieben:Für jeden Hinweis dankbar,
Auf Linux löst man sowas gerne mit einem externen Programm. z.B. mit den "poppler-tools"
Code: Alles auswählen
>pdfinfo ~/Dokumente/DE_2005.pdf
Title: Media_Heft_2006
Author: Sponner
Creator: QuarkXPress Passport™: AdobePS 8.8.0 (301)
Producer: Acrobat Distiller 6.0.0 for Macintosh
CreationDate: Mon Jul 31 07:05:01 2006
ModDate: Mon Jul 31 07:15:52 2006
Tagged: no
Pages: 16
Encrypted: no
Page size: 595.276 x 841.89 pts (A4)
File size: 306181 bytes
Optimized: yes
PDF version: 1.5
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: PDF Information auslesen?
Am besten sucht man im MemoryStream nach /MediaBox [ 0 0 596 842 ] das ist die Seitengröße im Beispiel A4!
Mal eben kurz und schmutzig hin programmiert aber es klappt zumindest mit meinen getesteten 5 PDF Dateien !
Ach so da fällt mir noch ein, wenn Du die Werte in Millimeter brauchst einfach mal 0.3527 rechnen!
Mal eben kurz und schmutzig hin programmiert aber es klappt zumindest mit meinen getesteten 5 PDF Dateien !
Code: Alles auswählen
function GetMediaBox(const Stream: TMemoryStream): string;
var
What: RawByteString;
aPtr: PChar;
len, i: Int64;
begin
Result := '';
What := '/MediaBox [';
Stream.Seek(0, soFromBeginning);
len := Length(What);
i := 0;
while Stream.Position+len < Stream.Size do
begin
aPtr := Stream.Memory;
inc(aPtr, Stream.Position);
if CompareMem(aPtr, PChar(What), Length(What)) then
begin
SetString(Result, aPtr, 50);
Result := Copy(Result, 1, Pos(']', Result));
Exit;
end;
inc(i);
Stream.Seek(i,0)
end;
end;
var
Stream: TMemoryStream;
s: string;
begin
Stream := TMemoryStream.Create();
Stream.LoadFromFile('c:\test.pdf');
s := GetMediaBox(Stream);
WriteLn(s);
Stream.Free;
end;
Ach so da fällt mir noch ein, wenn Du die Werte in Millimeter brauchst einfach mal 0.3527 rechnen!
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
-
- Beiträge: 370
- Registriert: Di 6. Feb 2007, 09:29
- OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
- CPU-Target: 32bit i386, ARM
- Wohnort: Oberösterreich
Re: PDF Information auslesen?
Auf Linux löst man sowas gerne mit einem externen Programm. z.B. mit den "poppler-tools"
Sowas hatte ich auch schon überlegt, aber mit poppler sieht's unter Windows nicht so gut aus. Ausserdem wollte ich das Aufrufen externer Prozesse sparen. Danke trotzdem.
Neuer Beitragvon gocher » Do 5. Jul 2012, 21:56 Re: PDF Information auslesen?
Am besten sucht man im MemoryStream nach /MediaBox [ 0 0 596 842 ] das ist die Seitengröße im Beispiel A4!
Von der 'MediaBox' hatte ich schon gelesen, meine Ergebnisse waren aber alles andere als zufriedenstellend. Deine Lösung funktioniert aber hier bei mir, ich musste nur den RawByteString durch einen AnsiString ersetzen. Das hat hier nicht funktioniert - ich nehme an, es liegt an meiner FPC Version.
Danke, ich nehme an, das dürfte so nun funktionieren. Ich teste das jetzt mal mit unseren Dokumenten (die teilweise als Druckvorlagen dienen und daher ganz komische Größen aufweisen).
Danke!
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: PDF Information auslesen?
bembulak hat geschrieben: ich musste nur den RawByteString durch einen AnsiString ersetzen. Das hat hier nicht funktioniert - ich nehme an, es liegt an meiner FPC Version.
RawByteString ist definiert in fpc/rtl/inc/systemh.inc seit dem 17. September 2011 (FPC Revision:19099)
aber AnsiString macht in diesem Fall keinen Unterschied!
Code: Alles auswählen
{$ifdef FPC_HAS_CPSTRING}
RawByteString = type AnsiString(CP_NONE);
{$else FPC_HAS_CPSTRING}
RawByteString = ansistring;
{$endif FPC_HAS_CPSTRING}
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
-
- Beiträge: 370
- Registriert: Di 6. Feb 2007, 09:29
- OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
- CPU-Target: 32bit i386, ARM
- Wohnort: Oberösterreich
Re: PDF Information auslesen?
... aber AnsiString macht in diesem Fall keinen Unterschied!
Gut, dann bin ich mal froh, dass ich hier das offenbar Richtige gemacht habe.
Mein Problem ist jetzt eigentlich nur, dass manche PDFs einfach nicht erkannt werden. PDFs aus LibreOffice scheinen teilweise kein "\MediaBox" Tag zu haben und auch die hauseigenen Illustrator-PDFs funktionieren nur teilweise, bzw. dauert es ziemlich lange, diese riesen-PDFs auszulesen.
Ich muss mir das noch ein wenig ansehen und hoffe, noch eine Lösung finden zu können.
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: PDF Information auslesen?
Ich würde als Alternative auch noch nach '/CropBox' suchen, dann bist Du sicherlich wieder ein Stück weiter!
Zuletzt geändert von gocher am Mo 9. Jul 2012, 21:34, insgesamt 1-mal geändert.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
-
- Beiträge: 290
- Registriert: Mo 24. Dez 2007, 13:14
- OS, Lazarus, FPC: WinXP-Pro-Sp3, Xubuntu 12.04, (Laz 1.1-SVN Mai2012, FPC 2.6.1 / 2.6.0-Linux)
- CPU-Target: AMD64X2
Re: PDF Information auslesen?
Schaumal hier vielleicht ist das für dich gut:
http://www.lazarus.freepascal.org/index.php/topic,17192.0.html
Da hat jemand ein Pdf-Bibliothek erstellt.
http://www.lazarus.freepascal.org/index.php/topic,17192.0.html
Da hat jemand ein Pdf-Bibliothek erstellt.
Re: PDF Information auslesen?
Bora4d hat geschrieben:Schaumal hier vielleicht ist das für dich gut:
http://www.lazarus.freepascal.org/index.php/topic,17192.0.html
Da hat jemand ein Pdf-Bibliothek erstellt.
Ich glaube das ist nur zum schreiben, nicht zum lesen von PDF.
Re: PDF Information auslesen?
Danke für die Anleitung. Arbeite aber immer mit dem PDF-Xchange Tool.
Hat ne Menge mehr freie Funktionen als der Adobe: http://www.pdf-xchange.de/pdf-xchange-v ... worten.htm
Hat ne Menge mehr freie Funktionen als der Adobe: http://www.pdf-xchange.de/pdf-xchange-v ... worten.htm