Linux'ta PDF nasıl damıtılır / rasterlenir


14

Ofisimizde PDF dosyalarını USB çubuğundan yazdıran bir yazıcımız var. Çoğu dosyayı iyi yazdırır, ancak bazılarında, özellikle de Lateks ile oluşturulanlarda sorun vardır. Yalnızca yazdırmayı reddeden bazı PDF'ler, kurye tipi yazı tipiyle yazdırdığı bazı PDF'ler ve denklemler dışında iyi yazdırılan bazı PDF'ler.

PDF'leri yazdırmak için kesin bir biçime "damıtmanın" bir yolunu arıyorum. PDF'yi herhangi bir oluşturucunun doğru şekilde oluşturacağı noktaya kadar basitleştirerek / normalleştirerek veya her sayfayı PDF'de 600 dpi'lik bir raster görüntü haline getirerek. (PDF'yi tek tek raster görüntülere bölebilir ve manuel olarak birleştirebilirim, ancak yazılabilir bir şey istiyorum.)

Çıktı dosyasının boyutu yazdırılacağından emin olduğu sürece A4 kağıt boyutuna (veya orijinaline) ve 300 ~ 600dpi çözünürlüğe sahiptir.


Belki pdf2ps yazıcı postscript destekliyorsa yardımcı olabilir.
frlan

Bir PostScript yazıcı olması gerekiyordu, ancak bu destek PDF'den bile daha kötü (ve PS'yi bir USB çubuğundan yazdırmıyor).
Sampo

Yanıtlar:


23

Yazı tiplerini anahatlar olarak oluşturmak için bazı seçenekleri başarısız bir şekilde denedikten sonra ( bu soru ve pstoedit dahil ), ImageMagick'i kullanarak PDF'yi kolayca rasterleştirilmiş forma dönüştürmenin bir yolunu buldum:

convert -density 600 +antialias input.pdf output.pdf

Bu, kenar yumuşatma özelliği kapalı olarak 600 dpi çözünürlükte oluşturulan bir PDF oluşturur (bu çözünürlükte gereksizdir).

Çıktı dosyaları çok büyük (8 sayfalık bir belge için ~ 30 MB) ve yazdırılması son derece yavaş, ancak yazıcı içeriği oluşturmak için yeterli belleğe sahip olduğu sürece çalışmalıdır.


1
Evet! Bunu PDF'imdeki katmanları büyük başarıya getirmek için kullandım. + antialias gerekli değildi çünkü sadece görüntülerimiz vardı (hiçbir fark yaratmadı) ve çözünürlüğü 150'ye düşürdüm, çünkü bu kadar yer kaplamadan arşivlemek için yeterince iyi görünüyordu. Teşekkürler!
mlissner

2
Doldurmuş convertolabileceğiniz formların içeriğini korumadığını unutmayın . (Form içeriğinin her yerde aynı göründüğünden emin olmak için bir PDF'yi rasterleştirmek istedim, özellikle de her PDF görüntüleyici tarafından ilk etapta görüntülenecek.) Form içeriğini korumak için evince(veya her şeyi formu doldurmak için kullandığınız uygulama) belgeyi "bir dosyaya" yazdırmak için - bu, form içeriğinin aslında normal metnin bir parçası haline geldiği başka bir PDF'dir. O zaman yine de ihtiyaçlarınıza göre bu yeni PDF'yi rasterleştirebilirsiniz.
balu

Bunun kenar yumuşatma özelliğini +antialiaskapatmak yerine ( ) açtığını unutmayın -antialias.
xiii1408

Hayır, +antialiaskenar yumuşatmayı devre dışı bırakır: imagemagick.org/script/command-line-options.php?#antialias
Sampo

1
Bu işi yapmak için imagemagick ( stackoverflow.com/questions/42928765/… ) ayarlamam gerekiyordu .
SteveSong

1

Tecrübelerime göre imagemagick kullanmak, yüksek çözünürlük ve / veya büyük dosyalar ile kararlı değil. Birçok yazıcı 1200 dpi ve üstü yapabilir, bu nedenle rasterleştirilmiş dosya benzer çözünürlüğe sahip olmalıdır. Daha iyi bir çözüm , daha hızlı, daha sağlam ve hatta orijinal PDF'yi 1200 veya 2400 dpi'de rakip olan bir boyutta dosyalar oluşturan pdf2djvu kullanmaktır . Bu dosyalar okular veya evince kullanarak görüntülenebilir ve yazdırılabilir.

Misal:

pdf2djvu -d 2400 file.pdf > rastered.djvu

1

Bence şu anki tercih ettiğim yöntem:

  1. PDF dosyasını bir dizi görüntüye dönüştürmek için pdftoppm kullanın.

    $ pdftoppm source.pdf çıktı -png

  2. Bu resimlerden bir pdf dosyası oluşturmak için img2pdf komutunu kullanın.

    $ img2pdf * .png -o çıktı.pdf

İyi haber şu ki, tüm süreci sizin için otomatikleştirmek için bir bash betiği oluşturabilirsiniz.

İşte bir dizindeki tüm pdf dosyalarını damıtacak ve yeni bir "orijinal" dizindeki orijinalleri koruyacak bir bash betiği.

#!/bin/bash

mkdir "originals";
for filename in ./*.pdf; do
    pdftoppm "$filename" output -png
    mv "$filename" ./originals
    img2pdf *.png "-o" "$filename"
    rm *.png
done

Kredi: img2pdf cevap ve pdftoppm cevap ve bash script yardım: 1 ve 2

(Yan not) img2pdf dosyasını aşağıdakileri kullanarak yükleyebilirsiniz:

$ sudo apt install img2pdf


-1

Başka bir alternatif, resimlere benzer bir şeyle dönüştürmektir.

pdfimages

Man sayfasında "Pdfimages, Taşınabilir Belge Biçimi (PDF) dosyasındaki görüntüleri Taşınabilir Pixmap (PPM), Taşınabilir Bitmap (PBM) veya JPEG dosyaları olarak kaydeder. Pdfimages, PDF dosyasını PDF dosyasını okur, bir veya daha fazla sayfayı tarar ve her resim için bir PPM, PBM veya JPEG dosyası yazar, image-root-nnn.xxx; burada nnn resim numarasıdır ve xxx resim türüdür (.ppm, .pbm, .jpg). "

Sonra PDF'ye dönüştürmek için pdftk kullanın https://www.pdflabs.com/docs/pdftk-cli-examples/

Son olarak, bu dosyayı yazdırın. Açıkçası, anahtar soru bunu nasıl yazacağımızdır.

Bunu, kullanıcılar için bir tür basit bir web sayfası üzerinden otomatikleştirebilirsiniz. Son olarak, dönüştürülen dosyayı yazdırırlar ve daha yüksek performansa ve çalışma çıktısına sahip olmalısınız?


3
pdfimages PDF dosyalarından gömülü raster görüntüleri ayıklar, metin veya vektör grafikleri rasterleştirmez.
Sampo
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.