Ghostscript kullanın, ancak görüntüleri yeniden işlememesini söyleyin.


30

Sıkıştırılmış ve biraz yapay-y görüntüleri olan bir PDF'im var ve bu PDF'ye bir başlık sayfası hazırlamak için Ghostscript kullanıyorum.

Ancak, GS'ye varolan görüntüleri yeniden işleme koymadan olduğu gibi kullanmasını söylemenin herhangi bir yolunu bulamıyorum ve şimdi GS'nin nasıl çalıştığıyla ilgili bir şeymiş gibi hissediyorum, yani PDF'yi yeniden derleyemiyor / bağlayamıyorsunuz görüntülerini yeniden işleme koymadan .. Bu doğru mu?

Ben GS DPI ayarı yükseltebilir, ancak ederken 60MB 5MB gideceğiz yine kötü görünümlü.

GS'ye ihtiyacım olanı yapacak (belki de OS X'te derlenecek) yapacak daha iyi bir alternatif var mı?


Sorunuzu düzenleyebilir ve başlık sayfanızı orijinal PDF'ye hazırlamak için kullandığınız komut satırını alıntılayabilir misiniz? O zaman size resimlerde daha iyi bir sonuç elde etmek için tam olarak neyi değiştireceğini veya ekleyeceğini söyleyebilirim ...
Kurt Pfeifle

Sadece daha iyi görünmesini istemiyorum, yeniden işlemeden birleştirmek istiyorum. Bu, a) daha iyi kaliteyle (kayıpsız dönüşümler) sonuçlanacak ve b) 1000+ sayfamın belgesini işlemek için saatlerce CPU harcayamayacak.
Mahmud Al-Qudsi

1
Hey, sorumu cevaplamadın ve kullandığın tam GS komut satırından alıntı yapmadın. Bu da demek oluyor ki, aradığınız GS ile ilgili yardım alamayacaksınız ...
Kurt Pfeifle

Yanıtlar:


44

İki PDF dosyasını yalnızca içeriğinin yeniden işlenmesi gerekmeden birleştirmek istiyorsanız, pdftktam size göre. (Mac OS X'te bu, MacPorts veya Fink aracılığıyla erişilebilir olmalıdır, Linux için, tüm büyük dağıtımlar için yerel paketler vardır; Windows için buraya bakın. ) Şunu deneyin:

 pdftk title.pdf content.pdf cat output book.pdf

Bu prepend olacak title.pdf için icerik.pdf ve içine sonucu yazma book.pdf .

pdftk"Aptal", ancak iki (veya daha fazla) PDF dosyasını birleştirmenin çok hızlı bir yoludur. PDF veri akışını pdftkherhangi bir şekilde yorumlamadığı sürece, "dilsiz" sadece dahili nesne numaralarının gerektiği gibi yeniden yerleştirildiğinden ve PDF xrefyapısında göründüğünden emin olur (temelde bir tür PDF ToC'sidir) . ) nesneleri.

Ghostscript:

Ghostscript kullanmak istiyorsanız, aynı iki dosyayı birleştirmek için temel komut olacaktır:

 gs \
  -o book.pdf \
  -sDEVICE=pdfwrite \
   title.pdf \
   content.pdf

Ancak, yaşadığınız gibi, bu basit komut satırı görüntü kalitenizi bozabilir. Bunun nedeni, Ghostscript'in PDF'leri işlerken 'dökümü' olmamasıdır: okurken bunları tamamen yorumlar ve sonucu yazarken tamamen yeni bir dosya oluşturur. Sonuç oluşturmak için, genel işlemdeki birçok ayrıntı için otomatik olarak varsayılan ayarları kullanacaktır. Bu varsayılanlar, aramalarının Ghostscript'e başka şekilde talimat vermediği tüm durumlar için geçerli olacaktır.

Bu yüzden Ghostscript'in yeni kitabı yaratma yöntemi.pdf , yönteminden çok daha "akıllı" (ama aynı zamanda daha yavaş) pdftk. (Bu aynı zamanda Ghostscript'in çoğu durumda b0rken PDF dosyalarını - sınırlamaları dahilinde - "onarabilmesi" veya giriş PDF'lerine gömülü olmayan çıkış PDF'lerine fontları gömmek veya yinelenen görüntüleri kaldırmak için kullanmasının nedenidir. onları sadece referanslar vb.

Çözüm, Ghostscript'in varsayılanlarını kullanmasına izin vermemektir: komut satırına daha fazla özel parametre ekleyerek.

Bu "Ghostscript'in PDF girişini" yorumlaması " ne demek ?

Elde edilen PDF'yi tekrar PDF nesnelerine dökmeden önce tüm dosya ve içerikleri (nesneler, akışlar, fontlar, görüntüler, ...) okunur, kontrol edilir ve kendi iç gösterimi ile tutulur. Bununla birlikte, 'tükürme' yaparken, Ghostscript mevcut olan yüzlerce parametre [*] için dahili varsayılan ayarlarını uygulayacaktır .

Maalesef bu, görüntülerin bu varsayılan ayarlara göre "yeniden işlenmesini" sağlar - bu yalnızca kendi (istenen) komut satırı parametrelerinizi ekleyerek önlenebilir veya geçersiz kılınabilir.

Görüntü sorunlarınız, Ghostscript'in JPEG2000 görüntülerini JPEG kodlamasına yeniden kodlama ihtiyacından (lisans sorunları nedeniyle) kaynaklanıyor olabilir. Bundan kaçınmak istiyorsanız, komut satırınıza aşağıdakileri ekleyin:

-dAutoFilterColorImages=false \
-dAutoFilterGrayImages=false \
-dColorImageFilter=/FlateEncode \
-dGrayImageFilter=/FlateEncode \

Dahil etmek için göz önünde bulundurulması gereken diğer görselle ilgili komut satırı seçenekleri şunlardır:

-dColorConversionStrategy=/LeaveColorUnchanged \
-dDownsampleMonoImages=false \
-dDownsampleGrayImages=false \
-dDownsampleColorImages=false \

Bu yüzden sizi mutlu edebilecek tam Ghostscript komut satırını okumalısınız:

 gs \
  -o book.pdf \
  -sDEVICE=pdfwrite \
  -dColorConversionStrategy=/LeaveColorUnchanged \
  -dDownsampleMonoImages=false \
  -dDownsampleGrayImages=false \
  -dDownsampleColorImages=false \
  -dAutoFilterColorImages=false \
  -dAutoFilterGrayImages=false \
  -dColorImageFilter=/FlateEncode \
  -dGrayImageFilter=/FlateEncode \
   title.pdf \
   content.pdf

Ghostscript NOT'a ayrıca aşağıdaki komut satırını kullanarak görüntüleri çıkış PDF'sinde sıkıştırmasını da söyleyebilirsiniz :

 gs \
  -o book.pdf \
  -sDEVICE=pdfwrite \
  -dColorConversionStrategy=/LeaveColorUnchanged \
  -dEncodeColorImages=false \
  -dEncodeGrayImages=false \
  -dEncodeMonoImages=false \
   title.pdf \
   content.pdf

.


[*]: Ghostscript'in pdfwrite cihazının kullandığı varsayılan ayarların tam listesi
hakkında bilgi edinmek istiyorsanız , aşağıdaki komutu çalıştırın. Size tam listeyi döndürür :

 gs \
   -sDEVICE=pdfwrite \
   -o /dev/null \
   -c "currentpagedevice { exch ==only ( ) print == } forall"

Tüm bu parametrelerin tam olarak ne anlama geldiğiyle ilgili açıklamalar için, Adobe Distiller'de "Distiller Parametreleri" ile ilgili bilgileri okumalısınız . Ghostscript bütün bunları taklit etmek için çok çalışıyor ...


3
(Bilginize) Benim durumumda, bayraklar dEncodeColorImages, dEncodeGrayImages, dEncodeMonoImagesçıkış dosyası neden çok daha büyük olma. Bunları kaldırarak, dosya boyutu 22 MB'tan 3,1 MB'a değiştirildi ve görüntü kalitesi de tam olarak bu bayraklarda olduğu gibi görünüyor. Tüm benzersiz I bayraklar kullanımıdır: dColorConversionStrategy=/LeaveColorUnchanged, dDownsampleMonoImages=false, dDownsampleGrayImages=false, dDownsampleColorImages=false, dAutoFilterColorImages=false, dAutoFilterGrayImages=false, dColorImageFilter=/FlateEncode,dGrayImageFilter=/FlateEncode
Dor

@Kurt Pfeifle Hangi seçeneklere izin verilir -dColorImageFilter? Sadece bulabilirim FlateEncodeve DCTEncode. DCT JPEG yapıyor gibi görünüyor (neden şifrelemişler?). Bence FLATE, Bell Labs'in LZW'deki patenti artık bir sorun olmadığından bugüne kadar resimler için modası geçmiş bir seçenek. Ancak uzunca bir süre aradıktan sonra PNG'yi (veya başka bir şeyi) nasıl kullanacağımı bulamıyorum ... Orijinal görüntülerim PNG ve değişmeden kalmalarını istiyorum. -C seçeneğini denedim, ama bana verdi -c can only be used in a built with POSTSCRIPT included....
Louis Somers
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.