pdftk sıkıştırma seçeneği


94

Aşağıdaki komut satırını kullanarak bir pdf sıkıştırmak için pdftk kullanıyorum

pdftk file1.pdf output file2.pdf compress

Dosyamın ağırlığı azaldıkça çalışıyor.

Sıkıştırmayı değiştirmek için [seçenekler] var mı ???

Ya da belki dosyamı sıkıştırmak için başka çözümler? Ağır çünkü bazı grafiklerin çok fazla puanı var . Örneğin bu grafikleri jpg'ye dönüştürmenin ve sıkıştırmayı uyarlamanın bir yolu var mı?


1
Tecrübelerime göre, pdf'nizin içinde ne olduğuna bağlı. Örneğin, çok noktalı bir grafikse, en iyi çözüm grafiği png'ye dönüştürmek ve bu png'yi pdf'ye dahil etmektir.
RockScience

Yanıtlar:


123

Aynı sorunu yaşadım ve iki farklı çözüm buldum ( daha fazla ayrıntı için bu konuya bakın). Her ikisi de sıkıştırılmamış PDF'imin boyutunu önemli ölçüde azalttı.

  • Pikselleştirilmiş (kayıplı):

    convert input.pdf -compress Zip output.pdf
    
  • Pikselsiz (kayıpsız, ancak biraz farklı görüntülenebilir):

    gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH  -dQUIET -sOutputFile=output.pdf input.pdf
    

Düzenleme : Kötü gs komutunu engelleyen başka bir seçenek (kayıpsız sıkıştırma için) keşfettim. qpdf , PDF'leri (sıkıştırma / açma, şifreleme / şifre çözme) dönüştüren ve gs komutundan çok daha hızlı olan temiz bir araçtır:

qpdf --linearize input.pdf output.pdf

3
Harika. gs benim için çalıştı ve 4MB'lik bir dosyayı 339K'ya dönüştürdü. Kalite kaybı oldu ama amacıma yeterince hizmet etti.
Sridhar Sarnobat

27
Daha iyi kalite için "yazıcı" PDF ayarını kullanabilirsiniz:gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
imriss

10
Kaliteyi (ve dolayısıyla boyutu) ayarlamak için PDFSETTINGS değerini değiştirin. Bkz ghostscript.com/doc/current/Ps2pdf.htm#Options
1in9ui5t

6
Yanıttaki gskomutun, gömülü JPG'lerin çözünürlüğünü ve kalitesini düşürdüğü için tam olarak kayıpsız olmadığını unutmayın. Ama kayıpsız yeniden. metin, metin olarak tutarken, convertkomut raster grafiklere dönüştürür.
tanius

14
Seçeneği ayarlama -dPDFSETTINGS=için /ebookaynen, sıkıştırılan ve bazı jpg eserler görülebilir, ancak makul bir boyutu için tamamen okunabilir: Benim için çok güzel bir çıkış verir. Teşekkürler!
Joël

35

bu prosedür oldukça iyi çalışıyor

pdf2ps large.pdf very_large.ps

ps2pdf very_large.ps small.pdf

bir şans ver.


8
Bu genel bir çözüm değil. Çoğu durumda ortaya çıkan pdf daha büyüktür.
rotskoff

4
Bu, benim için belirtilen tüm çözümlerden en iyi şekilde çalıştı. Birkaç büyük görüntü 23MB'den 1.4MB'ye düştü ve en az kalite kaybı oldu.
AerandiR

1
@rotskoff Muhtemelen genel bir çözüm yoktur, çünkü farklı belge türleri vardır. Ancak ne demek istediğini anlıyorum. Bizim için en iyi olanı bulan bir yazılıma sahip olmak güzel olurdu.
tiktak

Teşekkürler, bu benim için çalıştı, ancak qpdf ve gs çıktı dosyasının boyutunu azaltmadı.
sebastian

1
As söz burada bu yöntemin başka bir dezavantajı belgenin içindeki URL bağlantıları kıracak olmasıdır.
ptomato

31

tiff2pdfZip / Deflate ile sıkıştırılmış, PackBits sıkıştırması ile 400ppi tiff'lerle, çoğunlukla 8 bitlik, birkaç 24 bitlik bir PDF'yi sıkıştırmaya çalışıyorum. Bu yöntemlerin her birinde yaşadığım bir sorun: Yukarıdaki yöntemlerden hiçbiri, Acrobat Pro X'te özenle elle oluşturduğum TOC yer imlerini korumadı . Önerilen ebookayar bile değil gs. Elbette, orijinalin bir kopyasını TOC bozulmadan açıp bir tane yapabilirdim, Replace pagesancak maalesef bu yöntemlerden hiçbiri başlangıçta tatmin edici bir iş yapmadı. Ya boyutu o kadar küçülttüler ki kalite kabul edilemez bir şekilde pikselleşti ya da boyutu hiç küçültmediler ve bir durumda kalite kaybına rağmen gerçekten artırdılar.

pdftk compress:

no change in size
bookmarks TOC are gone

gs screen:

takes a ridiculously long time and 100% CPU
errors:
    sfopen: gs_parse_file_name failed.                                 ? 
    | ./base/gsicc_manage.c:1651: gsicc_set_device_profile(): cannot find device profile
74.8MB-->10.2MB hideously pixellated
bookmarks TOC are gone

gs printer:

takes a ridiculously long time and 100% CPU
no errors
74.8MB-->66.1MB
light blue background on pages 1-4
bookmarks TOC are gone

gs ebook:

errors:
    sfopen: gs_parse_file_name failed.
      ./base/gsicc_manage.c:1050: gsicc_open_search(): Could not find default_rgb.ic 
    | ./base/gsicc_manage.c:1651: gsicc_set_device_profile(): cannot find device profile
74.8MB-->32.2MB
badly pixellated
bookmarks TOC are gone

qpdf --linearize:

very fast, a few seconds
no size change
bookmarks TOC are gone

pdf2ps:

took very long time
output_pdf2ps.ps 74.8MB-->331.6MB

ps2pdf:

pretty fast
74.8MB-->79MB
very slightly degraded with sl. bluish background
bookmarks TOC are gone

2
Bu son derece değerli bir araştırma (teşekkür ederim!) Ama aynı zamanda bir an için aşağı oylamayı düşündüğüm bir cevap da değil.
ndemou

3
Nasıl bir cevap değil?
hmj6jmh

22

Dosya boyutu hala çok büyükse, üretilen pdf dosyasının çözünürlüğünü küçültmek için ps2pdf kullanılmasına yardımcı olabilir:

pdf2ps input.pdf tmp.ps
ps2pdf -dPDFSETTINGS=/screen -dDownsampleColorImages=true -dColorImageResolution=200 -dColorImageDownsampleType=/Bicubic tmp.ps output.pdf

İhtiyaçlarınıza uygun bir sonuç elde etmek için -dColorImageResolution seçeneğinin değerini ayarlayın (değer DPI cinsinden görüntü çözünürlüğünü tanımlar). Senin girdi dosyası yerine, gri tonlama olarak ise Renk aracılığıyla Gray yukarıdaki komuta olabilir ayrıca yardım içinde her iki seçeneği kullanılarak veya. -DPDFSETTINGS seçeneğini / default veya / printer olarak değiştirerek daha fazla ince ayar yapmak mümkündür . Olası tüm seçeneklerin açıklamaları için ps2pdf kılavuzuna bakın .


1
Bahşiş için teşekkürler. -DPDFSETTINGS ile taranan PDF'min boyutunu küçültebilirim
eshwar

2
TEŞEKKÜR EDERİM. Herkesin kullanım durumu için genel bir çözüm olduğunu sanmıyorum - ama bu konu üzerinde neredeyse her çözümü denedim ve bu benim için çalışan tek çözüm !!! DColorImageResolution parametresini "ayarlayabilmek" çok önemliydi - belge boyutunu bu hükümet sitesinin kabul etmesi için yeterince küçük, ancak okunaklı olacak kadar büyük olması gerekiyordu. Teşekkürler, Sam Amca, atlamak için başka bir acı çember için :)
Michael Klear

4

Nullglob'un önerdiği gibi gpdf'yi denedikten sonra , sadece cup-pdf yazıcısını kullanarak aynı sıkıştırma sonuçlarını (~ 900mb'lik bir dosya ~ 30mb'ye kadar) aldığımı buldum. Zaten bir belgeyi görüntülüyorsanız ve yalnızca bir veya iki belgeyi sıkıştırmanız gerekiyorsa, bu daha kolay / tercih edilebilir olabilir.

Ubuntu 12.04'te, bunu şu şekilde yükleyebilirsiniz:

sudo apt-get install cups-pdf

Kurulumdan sonra, Sistem Araçları > Yönetim > Yazdırma'yı kontrol ettiğinizden emin olun > 'PDF'yi sağ tıklayın ve' etkinleştir 'olarak ayarlayın

Varsayılan olarak çıktı, ana dizininizde PDF adlı bir klasöre kaydedilir .


4

Tek satırlık pdf2ps seçeneği (Lee tarafından) aslında pdf boyutunu artırdı. Ancak, iki adım daha iyi yaptı. Ve & 'den standart giriş / çıkışa ve borulara yönlendirme kullanılarak tek bir yerde birleştirilebilir:

pdf2ps large.pdf - | ps2pdf - small.pdf

xsane tarafından oluşturulan PDF'yi 18 Mo'dan 630 ko'ya düşürdü!

Bağlantılar kayboldu, ancak mevcut örnek için bu bir endişe değil ... ve istenen sonucu elde etmenin en kolay yoluydu.


Bunun ps2pdfyerine deneyebilirsiniz , @ Lee'nin cevabına yaptığım yorumu görebilirsiniz .
myrdd

3

pdf2ps large.pdf small.pdf iki adım yerine yeterli

pdf2ps large.pdf very_large.ps 
ps2pdf very_large.ps small.pdf

Ancak ps2pdf large.pdf small.pdfdaha iyi bir seçimdir.

  • ps2pdf çok daha hızlı
  • ek parametreler belirtilmeden pdf2psbazen daha büyük dosyalar üretir.

Bu seçeneği nerede buldunuz? Yeni bir sürümde bulunan bir özellik mi? Benim için işe yaramadı. Çıktı dosyasını adlandırmama rağmen out.pdf, bir PS dosyası oldu ( mimetype out.pdfdiyor out.pdf: application/postscript).
myrdd

benimki en son sürüm 9.xx. emin değilim.
Lee

9.25 olan debian'ın kararlı ("streç") paketlenmiş sürümünü kullanıyorum. Yazarak gerçekten bir pdf dosyanız olup olmadığını kontrol edebilir misiniz mimetype small.pdf?
myrdd

çıkış mimetype small.pdfIS small.pdf: application/pdf. Programın dosya tipini son eke göre otomatik olarak belirleyebileceğini düşünüyorum.
Lee

1
@myrdd evet, testler yaptım. ps2pdfdaha iyi.
Lee

1

Qpdf kullanırken dosya boyutunda çok fazla azalma görmedim. Bulduğum en iyi yol, pdftk yapıldıktan sonra ghostscript'i kullanarak pdf'yi postscript'e ve ardından tekrar pdf'ye çevirmek. PHP'de exec kullanırsınız:

$ps = $save_path.'/psfile.ps';
exec('ps2ps2 ' . $pdf . ' ' . $ps);
unlink($pdf);
exec('ps2pdf ' .$ps . ' ' . $pdf);
unlink($ps);

Bunu birkaç dakika önce pdftk çıktısını 490k'den 71k'ye almak için kullandım.


2
PHP tamamen gereksiz bir karmaşıklık ekler ve bu cevabın uygulanabilirliğini daraltır
ndemou

-2

Aynı sorunu yaşadım ve bu işlevi tek tek sayfaları sıkıştırmak için kullandım, bu da dosya boyutunun orijinal boyutun 1 / 3'ü kadar sıkıştırılmasına neden oldu.

for (int i = 1; i <= theDoc.PageCount; i++)
{
       theDoc.PageNumber = i;
       theDoc.Flatten();
}

1
pdftk'nin C ++ kitaplığını kullanıyor musunuz?
RockScience

-3

Çok sayıda seçilebilir metin içeren bir PDF dosyasını sıkıştırmak istiyorsanız, Windows'ta NicePDF Compressor'ı kullanabilirsiniz - "Flate" seçeneğini seçin. Her şeyi (cpdf, pdftk, gs) denedikten sonra nihayet 1360 sayfalık PDF'mi 500 MB'tan 10 MB'a sıkıştırmama yardımcı oldu.

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.