Linux’ta PDF dosyalarının sayfa sayılarını toplamak

pdf_icon

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
Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
This entry was written by yaksari , posted on Salı Haziran 09 2009at 12:06 am , filed under Programlama and tagged , , , , . Bookmark the permalink . Post a comment below or leave a trackback: Trackback URL.

Leave a Reply