dersblog

Görüntü Dosyaları, PDF, Birleştirme, Kitap

Kağıt halinde olan dokümanları nasıl birleşmiş, kitaplaşmış bir PDF haline çeviririz?

Android bazlı telefon ile görüntüler alınacak, fakat paketten çıkan foto programı istenmeyen, rasgele şekillerde fotoğrafta döndürme yapabiliyor. Çözüm yeni bir uygulama kullanmak, HD Camera. Görüntüler alındıkça DCIM/HDCamera adlı bir dizine yazılır. Her dosya isminde zaman damgası vardır, bu sebeple listelemede en son foto dosyası hep en sondadır.

Çekilmiş tüm fotoları dizüstü bilgisayara aktarmak için önce zip sıkıştırması yapmak lazım, ZArchiver kullanalım.

Dizüstü bilgisayara dosyalar kodlayacağımız yükleme (upload) özelliği ile yapılabilir, ikinci bilgisayarda bir web uygulaması işletiriz, Flask üzerinden, oradaki özellik dosya gönderimi sağlar [1],

@app.route('/upload', methods = ['GET', 'POST'])
def upload_file():
   if request.method == 'POST':
      f = request.files['file']
      print ("uploading", session['upload_dir'] + "/" + f.filename)
      fout =  session['upload_dir'] + "/" + f.filename
      f.save(fout)     
      return 'file uploaded successfully'
   return "OK"

Foto çekimi bitince ZIP dosyası üstteki kodla gönderilir. Son işlem dizüstü ortamında olur, bir Python script zip içindeki tüm dosyaları alıp, küçültüp, PDF haline getirir, yeni bir dizine yazar. Ardından pdftk ile birleştirim yapılır.

z    = zipfile.ZipFile('dosya.zip')
files_orig = list(z.namelist())
for x in files_orig:
    if ".jpg" not in x: continue
    print (x)
    f  = z.open(x)
    content = io.BytesIO(f.read())
    with open("/tmp/out.jpg", "wb") as outfile:
        outfile.write(content.getbuffer())
        outfile.flush()        
    cmd = "convert  -rotate 90 -scale 800 /tmp/out.jpg %s.pdf" % (x)
    os.system(cmd)

Görüntü işlemek için ImageMagick kullandık, her sayfayı 90 derece sağa döndürüyoruz (foto programından öyle geldi), gerekirse ek işlemler bu noktada kodlanabilir. Mesela sayfanın sağında solunda fazla boş bölgeler varsa -shave 50x0 gibi bir seçenek o işlemi yapar, resim üzerinde keskinlik (sharpening) yapılabilir, pek çok diğer kabiliyet mevcut [3].

Üstteki kodda zip dosyasının içeriğinin gezilmesine dikkat, işlemden önce tüm zip dosyasını açıp içindeki dosyaları diske yazmıyoruz, gerekli bilgiyi zip içinde gezerken Python zipfile ile alabiliyoruz. Imagemagick işlemi öncesi ham görüntü dosyası sadece /tmp/out.jpg içinde, yeni görüntü dosyası, ayrı bir dosya olarak gerekli işlemler bittikten sonra yazılıyor. Böylece yerden muhafaza ediyoruz.

Yeni görüntüler oluşunca pdftk ile birleştirmeyi yapıyoruz [2].

Kitaplaşmış PDF dosyası içinde CTRL-F ile arama yapabilmek istiyorsak, ocrmypdf ile bunu da yapabiliriz, gerekli metin bilgisi PDF içine bu program tarafından eklenecektir. Hatta bu sayede doküman herhangi bir indeksleyici program tarafından indekslenebilir hale gelir.

Kaynaklar

[1] Flask ile Web Üzerinden Dizin Gezebilmek - webfilebrowser

[2] PDFTK

[3] ImageMagic


Yukarı