Linux’ta PDF dosyalarının sayfa sayılarını toplamak
Geçenlerde 5000′den fazla pdf dosyasının sayfa sayılarının bulunması ve toplamda kaç sayfa olduklarının saptanması gibi gerçekten anlamsız bir iş denk geldi. Bunu yapmak için elbette kabuk programlamaya(shell) güvenmek en mantıklısı. Kısa bir arama ardından pdftk – pdf toolkit adında bir uygulamaya denk geldim. Bu uygulama ile pdf dosyalarını birleştirmek, şifrelemek, parçalamak gibi pek çok şeyi yapmak mümkün. Benim işim için gerekli olan, Pdf üstverilerini(metadata) dökmekti öncelikle. Bunun için dump_data seçeneği kullanılıyor, alttaki örneği çalıştırdığınızda girdi pdf dosyanızın tüm üstverilerine ulaşmanız mümkün.
1 | pdftk 1.pdf dump_data output report.txt |
Burada önemli olan kısım NumberOfPages üstverisi, bu satır dökümanda kaç sayfa olduğunu gösteriyor. Bunu da grep kullanarak gereksiz verilerden ayırmak mümkün. Elbette ardından tr kullanarak “NumberOfPages:” kısımlarını da satırlardan kurtarırsak elimizde sadece dökümanın satır sayısı kalıyor. Alttaki komut bu işlemleri ardarda pipe’lar ile gerçekleştiriyor.
1 | pdftk 1.pdf dump_data output | grep -i NumberOfPages: | tr -d "NumberOfPages: " |
Elde 5000′den fazla döküman olduğu için gene de bu komut pek işlevsel olmuyor. Aşağıdaki kabuk betiği(shell script) pdf dizinindeki tüm dosyaları gezerek bir üst dizinde oluşturduğu csv dosyasının içeriğine dosya adı ve sayfa numarasını dökmektedir.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #!/bin/sh #çalıştığımız dizindeki her dosya için for file in * do #csv'mizde pdf.sh diye bir girdi oluşturmaya gerek yok :) if [ "${file}" != "pdf.sh" ] then #x'de sadece sayfa sayısının tamsayı değeri bulunur x=$(pdftk ${file} dump_data output | grep -i NumberOfPages: | tr -d "NumberOfPages: ") # bir üst dizindeki out.csv'ye "dosyaadı.pdf,123" gibi bir satır ekliyoruz(append) echo "${file},$x" >> ../out.csv fi done exit 0 |











