pdf-Dateien auswerten (Seitenzahlen zählen)

Hallo, ich habe ein System mit extrem vielen pdf-Dateien. Ich muss nun aus logistischen Gründen wissen, wie viel Seiten das insgesamt sind. Um genauer zu werden: wenn ich 3 pdf-Dateien mit 1, 2 und 3 Seiten habe, sind es in Summe als 6 Seiten. Mittels "find | grep -i \.pdf" kann ich mir die Dateien auflisten lassen. Ich habe auch gefunden, dass man mit "pdftk beispiel.pdf dump_data output info.txt" in der erzeugten info.txt "NumberOfPages: 4" findet und ggf. auswerten kann. Bei 3 Seiten ist das evtl. machbar. Aber bei mehreren tausend ist das unschön. Ich habe dann diesen Befehl gefunden "cat *.pdf | grep -c --binary-files=text '/Page'". Allerdings passt das Ergebnis nicht. Ich habe es mit ein paar Dateien probiert und die Seiten händisch addiert. Statt 28 (reell) werden 34 (grep) bei gerade einmal 3 Dateien ausgegeben. Diese Abweichung ist mir deutlich zu groß. Mit "NumberOfPages" funktioniert es leider nicht ... Gibt es dafür ein Tool oder muss ich mir selbst etwas basteln? Fall ich selbst basteln muss, gibt es eine Alternative zu pdftk, mit der man schneller an diese Informationen kommt? Gruß & Dank, Alex -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org

Am 15. Februar 2018 um 12:49 schrieb Alex Winzer <alex.e-mail@gmx.de>:
Summe als 6 Seiten. Mittels "find | grep -i \.pdf" kann ich mir die Dateien
Du meinst find -name \*.pdf :-)
find -name \*.pdf -exec pdfinfo \{\} \;|grep Pages:
Gibt es dafür ein Tool oder muss ich mir selbst etwas basteln?
Shell + sed + awk :-) Gruß Martin -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org

On Thu, Feb 15, 2018 at 12:05:27PM +0000, Martin Schröder wrote:
Suggest pdfinfo(1) from poppler-tools -- "Having a smoking section in a restaurant is like having a peeing section in a swimming pool." -- Edward Burr

Hallo, Am Thu, 15 Feb 2018, Martin Schröder schrieb:
find . -type f -name '*.pdf' -exec pdfinfo {} \; | \ awk -F: '/^Pages:/{s+=$2;} END { print s; };' oder auch find . -type f -name '*.pdf' -exec exiftool -p '$PageCount' {} + | \ awk '{s+=$0;} END{ print s;}'
Gibt es dafür ein Tool oder muss ich mir selbst etwas basteln?
Shell + sed + awk :-)
Wozu sed? Das kann nix, was nicht auch (einfacher) mit awk geht. Dsa ganze findet sich übrigens in einem PDF-Objekt, das z.B. so aussieht: 1 0 obj << /Type /Pages /Count 9 /Kids [8 0 R 10 0 R 27 0 R 30 0 R 34 0 R 37 0 R 39 0 R 41 0 R 43 0 R ] >> endobj Das auszulesen ist etwas hakelig, denn die Leerzeichen und Umbrüche sind egal und können entfallen oder auch die von Win/Mac (CR-LF und CR) sein... HTH, -dnh -- BE MAD! IT HELPS! -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org

Hallo, ich danke Euch für die extrem vielen Impulse! Ausgehend vom Vorschlag von Jan Handwerker habe ich mir Folgendes zusammegebastelt und poste es hier ausnahmsweise mal als TOFU: #!/bin/bash oldIFS=$IFS IFS=$'\n' LC_NUMERIC=de_DE Pages=0 Log="/tmp/pdf_count.log" for f in `find -name \*.pdf` do P=`pdftk $f dump_data | grep NumberOfPages | cut -f2 -d:` IFS=$oldIFS Pages=`expr $Pages + $P` Dummy=`printf "%'.f\n" $Pages` printf "%7s up to [%s (%s Pages)]\n" $Dummy "$f" $P IFS=$'\n' done printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' - Dummy=`printf "%'.f\n" $Pages` printf "%7s Pages at all\n" $Dummy Vieles dient der Optik. Es hat mich aber auch eine gefühlte Ewigkeit gekostet, um das Problem mit Leerzeichen im Dateinamen zu lösen. pdftk ist da ohne Fehlermeldung hängen geblieben. Nachdem ich den Trick mit $IFS gefunden hatte, brauchte es wieder Zeit, bis ich herausbekamt, dass expr damit nicht mehr funktioniert und man es daher immer hin und her schalten muss. Verbesserungsvorschläge sind natürlich weiterhin willkommen :-D Gruß & Dank, Alex On 2/15/2018 5:12 PM, David Haller wrote:
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org

Hallo Axel, zwar bin ich nicht sehr erfahren im Umgang mit pdf-Dateien, aber Du hast doch schon alles beisammen, was man braucht. Ohne jetzt das Skript wirklich probiert zu haben, wie wäre etwa folgendes: #!/bin/bash NTot=0 for f in `find . -iname \*.pdf` do N=`pdftk $f dump_data | grep NumberOfPages | cut -f2 -d:` NTot=`expr $NTot + $N` done echo Zusammen $NTot Seiten. Ha, und nun darf ich endlich mal Donald Knuth zitieren: Be aware of the above code. I only proved it correct, not tested it. Gruß Jan Am 15.02.2018 um 12:49 schrieb Alex Winzer:
-- _________________________________________________________________ Jan Handwerker http://www.imk-tro.kit.edu/jan.handwerker.php

Am Donnerstag, 15. Februar 2018, 12:49:09 CET schrieb Alex Winzer:
man pdftk A handy tool for manipulating PDF damit kann man viel machen PDF splitten, zusammenfügen etc. Zählen sollte so auch gehen Bye Jürgen -- Dr.rer.nat. Jürgen Vollmer, Am Rennbuckel 21, D-76185 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de ------------------------------------------------------------------------------- Diese EMail ist elektronisch mittels GPG / PGP signiert. Diese elektronische Unterschrift ist in einem EMail-Anhang enthalten. Leider kann die Signatur ohne die Installation entsprechender Programme weder geprüft noch angezeigt werden. Mehr dazu unter: http://www.gnupg.org oder auch http://www.pgpi.org -------------------------------------------------------------------------------

Am 15. Februar 2018 um 12:49 schrieb Alex Winzer <alex.e-mail@gmx.de>:
Summe als 6 Seiten. Mittels "find | grep -i \.pdf" kann ich mir die Dateien
Du meinst find -name \*.pdf :-)
find -name \*.pdf -exec pdfinfo \{\} \;|grep Pages:
Gibt es dafür ein Tool oder muss ich mir selbst etwas basteln?
Shell + sed + awk :-) Gruß Martin -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org

On Thu, Feb 15, 2018 at 12:05:27PM +0000, Martin Schröder wrote:
Suggest pdfinfo(1) from poppler-tools -- "Having a smoking section in a restaurant is like having a peeing section in a swimming pool." -- Edward Burr

Hallo, Am Thu, 15 Feb 2018, Martin Schröder schrieb:
find . -type f -name '*.pdf' -exec pdfinfo {} \; | \ awk -F: '/^Pages:/{s+=$2;} END { print s; };' oder auch find . -type f -name '*.pdf' -exec exiftool -p '$PageCount' {} + | \ awk '{s+=$0;} END{ print s;}'
Gibt es dafür ein Tool oder muss ich mir selbst etwas basteln?
Shell + sed + awk :-)
Wozu sed? Das kann nix, was nicht auch (einfacher) mit awk geht. Dsa ganze findet sich übrigens in einem PDF-Objekt, das z.B. so aussieht: 1 0 obj << /Type /Pages /Count 9 /Kids [8 0 R 10 0 R 27 0 R 30 0 R 34 0 R 37 0 R 39 0 R 41 0 R 43 0 R ] >> endobj Das auszulesen ist etwas hakelig, denn die Leerzeichen und Umbrüche sind egal und können entfallen oder auch die von Win/Mac (CR-LF und CR) sein... HTH, -dnh -- BE MAD! IT HELPS! -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org

Hallo, ich danke Euch für die extrem vielen Impulse! Ausgehend vom Vorschlag von Jan Handwerker habe ich mir Folgendes zusammegebastelt und poste es hier ausnahmsweise mal als TOFU: #!/bin/bash oldIFS=$IFS IFS=$'\n' LC_NUMERIC=de_DE Pages=0 Log="/tmp/pdf_count.log" for f in `find -name \*.pdf` do P=`pdftk $f dump_data | grep NumberOfPages | cut -f2 -d:` IFS=$oldIFS Pages=`expr $Pages + $P` Dummy=`printf "%'.f\n" $Pages` printf "%7s up to [%s (%s Pages)]\n" $Dummy "$f" $P IFS=$'\n' done printf '%*s\n' "${COLUMNS:-$(tput cols)}" '' | tr ' ' - Dummy=`printf "%'.f\n" $Pages` printf "%7s Pages at all\n" $Dummy Vieles dient der Optik. Es hat mich aber auch eine gefühlte Ewigkeit gekostet, um das Problem mit Leerzeichen im Dateinamen zu lösen. pdftk ist da ohne Fehlermeldung hängen geblieben. Nachdem ich den Trick mit $IFS gefunden hatte, brauchte es wieder Zeit, bis ich herausbekamt, dass expr damit nicht mehr funktioniert und man es daher immer hin und her schalten muss. Verbesserungsvorschläge sind natürlich weiterhin willkommen :-D Gruß & Dank, Alex On 2/15/2018 5:12 PM, David Haller wrote:
-- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org

Hallo Axel, zwar bin ich nicht sehr erfahren im Umgang mit pdf-Dateien, aber Du hast doch schon alles beisammen, was man braucht. Ohne jetzt das Skript wirklich probiert zu haben, wie wäre etwa folgendes: #!/bin/bash NTot=0 for f in `find . -iname \*.pdf` do N=`pdftk $f dump_data | grep NumberOfPages | cut -f2 -d:` NTot=`expr $NTot + $N` done echo Zusammen $NTot Seiten. Ha, und nun darf ich endlich mal Donald Knuth zitieren: Be aware of the above code. I only proved it correct, not tested it. Gruß Jan Am 15.02.2018 um 12:49 schrieb Alex Winzer:
-- _________________________________________________________________ Jan Handwerker http://www.imk-tro.kit.edu/jan.handwerker.php

Am Donnerstag, 15. Februar 2018, 12:49:09 CET schrieb Alex Winzer:
man pdftk A handy tool for manipulating PDF damit kann man viel machen PDF splitten, zusammenfügen etc. Zählen sollte so auch gehen Bye Jürgen -- Dr.rer.nat. Jürgen Vollmer, Am Rennbuckel 21, D-76185 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de ------------------------------------------------------------------------------- Diese EMail ist elektronisch mittels GPG / PGP signiert. Diese elektronische Unterschrift ist in einem EMail-Anhang enthalten. Leider kann die Signatur ohne die Installation entsprechender Programme weder geprüft noch angezeigt werden. Mehr dazu unter: http://www.gnupg.org oder auch http://www.pgpi.org -------------------------------------------------------------------------------
participants (6)
-
Alex Winzer
-
David Haller
-
Dr. Jürgen Vollmer
-
Dr. Werner Fink
-
Handwerker, Jan (IMK)
-
Martin Schröder