PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Seitenanzahl einer PDF



Iluvatar
30-08-2010, 12:03
Hallo, für eine kleines Projekt, in dem ich Broschüren und Flyer im PDF Format weiterverarbeite, benötige ich etwas Hilfe.
Bisher habe ich einen ziemlich verwirrenden programmablauf, der sich durch eine einzige automatische Information erheblich vereinfachen würde.

Ganz konkret: Ich muss dafür die Seitenzahl eines zu öffnenden PDF Dokumentes kennen.

Und gerade dabei hapert es. Ich weiß nicht, wie ich an die Metadaten einer PDF Datei herankommen.

Als weitere Information: Das Programm ist mit dem Qt Framework 4.1 unter Visual Studio 2008 geschrieben. Ich möchte gerne Plattformunabhängigkeit bewahren, da ein Einsatz auf Linux Rechnern nicht auszuschließen ist.

Für jede Hilfe, um an diese Metadaten zu kommen, wäre ich dankbar.

John W
30-08-2010, 15:08
Das ist auf Englisch, könnte aber evtl weiterhelfen: http://www.unix.com/shell-programming-scripting/55661-how-get-number-pages-pdf-file.html
Inhalt man kurz zusammengefasst:
- pdf2txt ausführen und nach ^L (Ascii-Wert 12) greppen, die Seitenzahl ist dann 1+<Anzahl>.
- pdf2ps <pdf> | grep -c showpage
- pdftk file.pdf dump_data output | grep -i Num
Das sind jetzt alles Lösungen für ein Linux-Terminal, da die Programme aber alle OpenSource sind, könntest du die Routinen von da übernehmen (dürfte recht plattformunabhängig sein), mit einkompilieren (Copyright-Notiz nicht vergessen) und fertig ist das Programm.

Iluvatar
30-08-2010, 16:40
Einzig brauchbar davon ist pdftk, wie ich finde. Es soll ja vorrangig unter Windows laufen, und halt die Option für Linux offen halten.

Unter Windows gibt es nun sowas schönes wie „| grep -i Num“ nicht und ich erhalte nur den gesamten Output. Und ich bin nicht so firm um aus dem Quelltext des Programms das richtige herauszufinden bzw. es für c++ umzuschreiben.

locus vivendi
30-08-2010, 16:48
Wenn du noch eine externe Bibliothek benutzen kannst, vielleicht diese hier?
http://podofo.sourceforge.net/
Die habe ich selber bisher nie benutzt, aber ein kurzer Blick auf die API-Dokumentation sagt mir, dass es damit gehen müsste.
Ob man das auch mit Qt selber machen kann? Keine Ahnung.

John W
30-08-2010, 16:49
Dann gibbet hier einmal pdftk mit Anleitung zum selberbauen: http://www.pdflabs.com/docs/build-pdftk/
In /pdftk-1.41/pdftk/pdftk.cc gibt es dann ab Zeile 154 die Infos, die du für dein Projekt brauchst (genauer in Zeile 185: "reader->getNumberOfPages()").