Cách chưng cất / rasterize PDF trong Linux


13

Chúng tôi có một máy in tại văn phòng của chúng tôi in các tệp PDF từ thẻ nhớ USB. Nó in hầu hết các tập tin ổn, nhưng nó có vấn đề với một số, đặc biệt là những tập tin được tạo bằng latex. Một số tệp PDF đơn giản là từ chối in, một số tệp PDF được in bằng phông chữ chuyển phát nhanh và một số tệp được in tốt ngoại trừ các phương trình.

Tôi đang tìm cách "chưng cất" các tệp PDF thành định dạng chắc chắn để in. Bằng cách đơn giản hóa / bình thường hóa PDF đến mức bất kỳ trình kết xuất nào sẽ hiển thị chính xác hoặc chỉ bằng cách tạo cho mỗi trang một hình ảnh raster 600dpi trong PDF. (Tôi có thể chia PDF thành các hình ảnh raster riêng lẻ và kết hợp chúng theo cách thủ công, nhưng tôi muốn một cái gì đó có thể viết được.)

Kích thước tệp đầu ra không quan trọng, miễn là nó chắc chắn được in, có kích thước giấy A4 (hoặc bản gốc) và độ phân giải 300 ~ 600dpi.


Có lẽ pdf2ps có thể giúp nếu máy in hỗ trợ postcript.
frlan

Nó được coi là một máy in PostScript, nhưng sự hỗ trợ đó thậm chí còn tệ hơn cả PDF (và nó sẽ không in PS từ thẻ nhớ USB).
Sampo

Câu trả lời:


22

Sau khi thử không thành công một số tùy chọn để hiển thị phông chữ dưới dạng phác thảo (bao gồm câu hỏi này và pstoedit), tôi đã tìm ra một cách để dễ dàng chuyển đổi PDF thành dạng rasterized bằng ImageMagick:

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

Điều này tạo ra một tệp PDF được hiển thị ở mức 600 dpi, với các antialias bị tắt (không cần thiết ở độ phân giải đó).

Các tệp đầu ra rất lớn (~ 30 MB cho tài liệu 8 trang) và in rất chậm, nhưng sẽ hoạt động miễn là máy in có đủ bộ nhớ để hiển thị nội dung.


1
Đúng! Tôi đã sử dụng điều này để làm phẳng các lớp trong tệp PDF của mình để thành công lớn. + antialias không cần thiết vì chúng tôi chỉ có hình ảnh (nó không có gì khác biệt) và tôi đã giảm độ phân giải xuống 150 vì điều đó dường như đủ tốt để lưu trữ mà không chiếm quá nhiều không gian. Cảm ơn!
mlissner

2
Lưu ý rằng convertkhông lưu giữ nội dung của các biểu mẫu bạn có thể đã điền. (Tôi muốn rasterize một tệp PDF để đảm bảo rằng nội dung biểu mẫu trông giống nhau ở mọi nơi, đặc biệt là chúng sẽ được hiển thị bởi mọi người xem PDF ở vị trí đầu tiên.) Để giữ nội dung biểu mẫu, hãy sử dụng evince(hoặc bất cứ điều gì ứng dụng bạn đã sử dụng để điền vào biểu mẫu) để in tài liệu "vào một tệp" - đây là một tệp PDF khác trong đó nội dung biểu mẫu đã thực sự trở thành một phần của văn bản thông thường. Sau đó, bạn vẫn có thể rasterize PDF mới này, tùy thuộc vào nhu cầu của bạn.
balu

Lưu ý rằng điều này bật khử răng cưa trên ( +antialias) thay vì tắt nó ( -antialias).
xiii1408

Không, +antialiasvô hiệu hóa khử răng cưa: fantemagick.org/script/command-line-options.php?#antialias
Sampo

1
Tôi cần phải điều chỉnh hình ảnh ( stackoverflow.com/questions/42928765/ ) để thực hiện công việc này.
SteveSong

1

Theo kinh nghiệm của tôi, sử dụng hình ảnh là không ổn định với độ phân giải cao và / hoặc các tệp lớn. Nhiều máy in có thể thực hiện 1200 dpi trở lên, vì vậy tệp rasterized nên có độ phân giải tương tự. Một giải pháp tốt hơn là sử dụng pdf2djvu , nhanh hơn, mạnh hơn và thậm chí tạo các tệp có kích thước thường cạnh tranh với PDF gốc ở 1200 hoặc 2400 dpi. Những tập tin này có thể được xem và in bằng okular hoặc evince.

Thí dụ:

pdf2djvu -d 2400 file.pdf > rastered.djvu

1

Tôi nghĩ rằng cách ưa thích hiện tại của tôi để làm điều đó là:

  1. Sử dụng pdftoppm để chuyển đổi tệp PDF thành một loạt hình ảnh.

    $ pdftoppm source.pdf đầu ra -png

  2. Sử dụng img2pdf để tạo tệp pdf trong số những hình ảnh đó.

    $ img2pdf * .png -o output.pdf

Tin tốt là bạn có thể tạo một tập lệnh bash để tự động hóa toàn bộ quá trình cho bạn.

Dưới đây là một tập lệnh bash sẽ chắt lọc tất cả các tệp pdf trong một thư mục và giữ nguyên bản gốc trong một thư mục mới "bản gốc".

#!/bin/bash

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

Tín dụng: câu trả lời img2pdf & câu trả lời pdftoppm & bash script trợ giúp: 1 & 2

(Lưu ý bên cạnh) Bạn có thể cài đặt img2pdf bằng cách sử dụng:

$ sudo apt cài đặt img2pdf


-1

Một cách khác là chuyển đổi thành hình ảnh thông qua một cái gì đó như

hình ảnh

Từ trang man, "Pdfimages lưu hình ảnh từ tệp Định dạng tài liệu di động (PDF) dưới dạng Pixmap di động (PPM), Bitmap di động (PBM) hoặc tệp JPEG. Pdfimages đọc tệp PDF tệp PDF, quét một hoặc nhiều trang và quét ghi một tệp PPM, PBM hoặc JPEG cho mỗi hình ảnh, image-root-nnn.xxx, trong đó nnn là số hình ảnh và xxx là loại hình ảnh (.ppm, .pbm, .jpg). "

Sau đó, sử dụng pdftk để chuyển đổi trở lại PDF https://www.pdflabs.com/docs/pdftk-cli-examples/

Cuối cùng, in tập tin này. Rõ ràng, câu hỏi quan trọng là làm thế nào để kịch bản này.

Bạn có thể tự động hóa việc này thông qua một trang web đơn giản dành cho người dùng. Cuối cùng, họ in ra tệp đã chuyển đổi và bạn sẽ có hiệu suất cao hơn và bản in hoạt động?


3
pdfimages trích xuất hình ảnh raster nhúng từ các tệp PDF, không rasterize văn bản hoặc đồ họa vector.
Sampo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.