Linux에서 PDF를 증류 / 래스터 화하는 방법


14

사무실에는 USB 스틱에서 PDF 파일을 인쇄하는 프린터가 있습니다. 대부분의 파일은 정상적으로 인쇄하지만 일부, 특히 라텍스로 생성 된 파일에는 문제가 있습니다. 일부 PDF는 단순히 인쇄를 거부하고, 일부 PDF는 택배 글꼴로 인쇄하며, 일부는 수식을 제외하고는 잘 인쇄됩니다.

PDF를 Dead-sure 형식으로 "증류"하여 인쇄 할 수있는 방법을 찾고 있습니다. 렌더러가 올바르게 렌더링 할 수있는 수준으로 PDF를 단순화 / 정규화하거나 각 페이지를 PDF에서 600dpi 래스터 이미지로 만들면됩니다. (PDF를 개별 래스터 이미지로 분할하여 수동으로 결합 할 수는 있지만 스크립트 가능한 것을 원합니다.)

출력 파일 크기는 확실하게 인쇄하는 한 A4 용지 크기 (또는 원본) 및 300 ~ 600dpi 해상도를 갖는 것이 중요하지 않습니다.


프린터가 포스트 스크립트를 지원하는 경우 pdf2ps가 도움이 될 수 있습니다.
frlan

PostScript 프린터로되어 있지만 PDF보다 지원이 더 나쁩니다 (USB 스틱에서 PS를 인쇄하지 않습니다).
Sampo

답변:


23

글꼴을 개요 ( 이 질문 및 pstoedit 포함)로 렌더링하는 몇 가지 옵션을 성공적으로 시도한 후 ImageMagick을 사용하여 PDF를 래스터 화 된 형식으로 쉽게 변환하는 방법을 찾았습니다.

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

이렇게하면 앤티 앨리어싱이 해제 된 상태에서 600dpi로 렌더링 된 PDF가 생성됩니다 (해당 해상도에서는 필요 없음).

출력 파일은 크기가 크며 (8 페이지 문서의 경우 최대 30MB) 인쇄 속도가 매우 느리지 만 프린터에 내용을 렌더링하기에 충분한 메모리가있는 한 작동해야합니다.


1
예! 나는 이것을 사용하여 PDF의 레이어를 평평하게 만들었습니다. + antialias는 이미지 만 있었기 때문에 필요하지 않았으며 (차이가 없었습니다), 너무 많은 공간을 차지하지 않고 보관하기에 충분 해 보였으므로 해상도를 150으로 떨어 뜨 렸습니다. 감사!
mlissner

2
작성한 convert양식의 내용은 보존하지 않습니다. (양식 내용이 모든 곳에서 동일하게 보이도록, 특히 모든 PDF 뷰어에서 처음에 표시되도록 PDF를 래스터 화하고 싶었습니다.) 양식 내용을 보존하려면 evince(또는 문서를 "파일로"인쇄하기 위해 양식을 작성하는 데 사용한 응용 프로그램 – 양식 내용이 실제로 일반 텍스트의 일부가 된 또 다른 PDF입니다. 그런 다음 필요에 따라이 새 PDF를 래스터화할 수 있습니다.
balu

앤티 앨리어싱을 +antialias끄지 않고 ( ) 켜기 ( -antialias)합니다.
xiii1408

아니요, +antialias앤티 앨리어싱을 비활성화합니다. imagemagick.org/script/command-line-options.php?#antialias
Sampo

1
이 작업을 수행하기 위해 imagemagick ( stackoverflow.com/questions/42928765/… ) 를 조정 해야했습니다.
SteveSong

1

내 경험상 imagemagick 사용은 고해상도 및 / 또는 큰 파일에서 안정적이지 않습니다. 많은 프린터가 1200dpi 이상을 수행 할 수 있으므로 래스터 화 된 파일의 해상도는 비슷해야합니다. 더 나은 솔루션은 더 빠르고 강력하며 종종 1200 또는 2400dpi에서 원본 PDF와 필적하는 크기의 파일을 생성 하는 pdf2djvu 를 사용 하는 것입니다. 이러한 파일은 okular 또는 evince를 사용하여보고 인쇄 할 수 있습니다.

예:

pdf2djvu -d 2400 file.pdf > rastered.djvu

1

내 현재 선호하는 방법은 다음과 같습니다.

  1. pdftoppm을 사용하여 PDF 파일을 일련의 이미지로 변환하십시오.

    $ pdftoppm source.pdf 출력 -png

  2. 이미지에서 pdf 파일을 만들려면 img2pdf를 사용하십시오.

    $ img2pdf * .png -o output.pdf

좋은 소식은 bash 스크립트를 만들어 전체 프로세스를 자동화 할 수 있다는 것입니다.

다음은 디렉토리 내의 모든 pdf 파일을 추출하고 새 디렉토리 "originals"에 원본을 보존하는 bash 스크립트입니다.

#!/bin/bash

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

크레딧 : img2pdf answer & pdftoppm answer & bash script help : 1 & 2

(측면 참고) 다음을 사용하여 img2pdf를 설치할 수 있습니다.

$ sudo apt 설치 img2pdf


-1

다른 대안은 다음과 같은 것을 통해 이미지로 변환하는 것입니다.

pdfimages

맨 페이지에서 "Pdfimages는 PDF (Portable Document Format) 파일의 이미지를 PPM (Portable Pixmap), PBM (Portable Bitmap) 또는 JPEG 파일로 저장합니다. Pdfimages는 PDF 파일 PDF 파일을 읽고 하나 이상의 페이지를 스캔합니다. 각 이미지 image-root-nnn.xxx에 대해 하나의 PPM, PBM 또는 JPEG 파일을 작성합니다. 여기서 nnn은 이미지 번호이고 xxx는 이미지 유형 (.ppm, .pbm, .jpg)입니다. "

그런 다음 pdftk를 사용하여 다시 PDF로 변환 하십시오 https://www.pdflabs.com/docs/pdftk-cli-examples/

마지막으로이 파일을 인쇄하십시오. 분명히 중요한 질문은 이것을 스크립팅하는 방법입니다.

사용자를위한 간단한 웹 페이지를 통해이를 자동화 할 수 있습니다. 마지막으로, 그들은 변환 된 파일을 인쇄하고 더 높은 성능과 작업 출력을 가져야합니까?


3
pdfimages는 PDF 파일에서 포함 된 래스터 이미지를 추출하며 텍스트 또는 벡터 그래픽을 래스터 화하지 않습니다.
삼포
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.