Kolay ve Hızlı PDF Sıkıştırma: Ghostscript Kullanımı
Published: 2023-12-30 18:40:36

Selamlar,

ChatGPT Plus aboneliği aldığımdan beri kendim için birçok Custom GPT oluşturdum :) ancak burada karşılaştığım en büyük sorun PDF dosyalarının boyutları oldu. Bunun için internette birçok araç var ama upload etmek de zaman kaybına yol açıyor. Ee madem zahmetsiz ve kolay bir yol arıyoruz gelin Ghostscript nedir, pdf'leri ghostscript ile nasıl küçültebiliriz buna bakalım.


## Ghostscript Nedir?
Ghostscript, PDF, PostScript ve diğer sayfa tanımlama dilleriyle çalışmak için kullanılan, açık kaynak kodlu bir yazılımdır. Bu araç, PDF'leri dönüştürmek, birleştirmek ve boyutunu değiştirmek gibi çeşitli işlemler için kullanılabilir.

## Ghostscript'i Yükleme
[Ghostscript](https://www.ghostscript.com/index.html) adresinden işletim sisteminize uygun yönergeleri takip ederek Ghostscript'i kurabilirsiniz. Linux makinamda Ghostscript'in başarıyla kurulduğunu şu şekilde anlayabiliyorum:
```bash
╰─❯ gs -v                                                                                                                                                     
GPL Ghostscript 10.01.2 (2023-06-21)
Copyright (C) 2023 Artifex Software, Inc.  All rights reserved.
```

## Komut
```bash
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=mydocsmaller.pdf mydoc.pdf
```

Bu komut, belgenizin boyutunu küçültür. Şimdi bu parametreleri yakından tanıyalım.

`-sDEVICE=pdfwrite`: Çıktı dosyasının PDF formatında olacağını belirtir.
`-dCompatibilityLevel=1.4`: PDF'in uyumluluk seviyesini belirtir.
`-dPDFSETTINGS=/screen`:  Çıktı kalitesini ve çözünürlüğünü belirler. /screen ayarı, düşük çözünürlükte (72 dpi) görüntüler oluşturur, bu da dosya boyutunu küçültür.

> /screen: düşük çözünürlük, 72 dpi görüntüler
> /ebook: biraz daha yüksek çözünürlük, 150 dpi görüntüler
> /printer: yüksek kaliteli baskılar için, 300 dpi görüntüler
> /prepress: basın kalitesi çıktı, 300 dpi görüntüler
> /default: bir dizi parametreyi varsayılan ayarlara sıfırlar


`-dNOPAUSE, -dQUIET, -dBATCH`: İşlem sırasında herhangi bir duraksama veya mesaj gösterilmemesini sağlar.
`-sOutputFile`: Oluşturulacak dosyanın adını belirtir.
`mydoc.pdf`: Küçültmek istediğiniz PDF dosyasının adıdır.


Bu ayrıntıları sürekli hatırlamak zor olabilir, değil mi? O zaman gelin, bunu bir betiğe dönüştürelim.


## Betiğe Dönüştürme
Aşağıdaki betik, yukarıda bahsedilen işlemi basitleştirir:
```bash
#!/bin/bash

usage() {
  echo "Usage: $0 -i <input_file> -o <output_file>" 1>&2;
  exit 1;
}

while getopts ":i:o:" opt; do
  case ${opt} in
    i )
      input_file=$OPTARG
      ;;
    o )
      output_file=$OPTARG
      ;;
    \? )
      echo "Invalid option: -$OPTARG" 1>&2
      usage
      ;;
    : )
      echo "Invalid option: -$OPTARG requires an argument" 1>&2
      usage
      ;;
  esac
done
shift $((OPTIND -1))

if [ -z "${input_file}" ] || [ -z "${output_file}" ]; then
  usage
fi

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile="${output_file}" "${input_file}"
```

Yukarıdaki betikte aslında çok bir şey yapmadık. Yaptığımız tek şey o çirkin görüntüyü ortadan kaldıracak 2 parametre eklemek oldu. Bu kodları `gsPDF.sh` olarak veya istediğiniz herhangi bir isimle kaydedin. Ardından `chmod +x gsPDF.sh` komutu ile gerekli izinleri verin. 

Artık `./gsPDF.sh -i mydoc.pdf -o mydocsmaller.pdf` şeklinde kullanabileceğiniz kullanışlı bir betiğiniz var, burada `-i` girdi (input) ve `-o` çıktı (output) anlamına gelir.

Umarım bu bilgiler sizin için yararlı olmuştur. Başka bir yazıda görüşmek üzere :).