[image] PDF를 PNG로 변환

PDF를 PNG 이미지 (적어도 하나의 표지)로 변환하려고합니다. pdftk로 PDF의 첫 페이지를 성공적으로 추출하고 있습니다. 변환을 위해 imagemagick을 사용하고 있습니다.

convert cover.pdf cover.png

이것은 작동하지만 불행히도 cover.png는 잘못 렌더링되어 제공됩니다 (PDF의 일부 알파 개체가 제대로 렌더링되지 않음). ImageMagick이 GhostScript를 사용하여 변환을 수행한다는 것을 알고 있으며 gs로 직접 수행하면 원하는 결과를 얻을 수 있지만 활용하고 싶은 다른 도구가 있으므로 변환 라이브러리를 사용하고 싶습니다.

GhostScript의이 명령은 원하는 이미지를 수행합니다.

gs -sDEVICE=pngalpha -sOutputFile=cover.png -r144 cover.pdf

Convert to GhostScript를 통해 인수를 전달할 수있는 방법이 있는지 궁금합니다. 아니면 GhostScript를 직접 호출해야합니까?



답변

첫 번째 명령이 출력을 stdout에 쓸 수 있고 두 번째 명령이 stdin에서 입력을 읽을 수있는 경우 파이프를 통해 연결된 두 개의 명령 ( gs, convert) 과 함께 하나의 명령 줄을 사용할 수 있습니다 .

  1. 다행히 gs는 stdout ( ... -o %stdout ...)에 쓸 수 있습니다 .
  2. 운 좋게도 convert는 stdin ( convert -background transparent - output.png) 에서 읽을 수 있습니다 .

문제 해결됨:

  • 특수 이미지를 처리하는 알파 채널에 사용되는 GS,
  • 투명한 배경을 만드는 데 사용되는 변환,
  • 디스크에 임시 파일 쓰기를 방지하는 데 사용되는 파이프입니다.

완벽한 솔루션 :

gs -sDEVICE=pngalpha       \
   -o %stdout              \
   -r144 cover.pdf         \
   |                       \
convert                    \
   -background transparent \
   -                       \
    cover.png

최신 정보

PDF 페이지 당 별도의 PNG를 사용하려면 다음 %d구문을 사용할 수 있습니다 .

gs -sDEVICE=pngalpha -o file-%03d.png -r144 cover.pdf

이것은라는 이름의 PNG 파일을 생성합니다 page-000.png, page-001.png… (주 것을 %d-counting은 제로 – file-000.png대응을 PDF의 페이지 1, 0012 페이지로 …

또는 100 페이지 PDF에 대해 투명한 배경을 유지하려면

for i in {1..100}; do        \
                             \
  gs -sDEVICE=pngalpha       \
     -dFirstPage="${i}"      \
     -dLastPage="${i}"       \
     -o %stdout              \
     -r144 input.pdf         \
     |                       \
  convert                    \
     -background transparent \
     -                       \
      page-${i}.png ;        \
                             \
done


답변

사용 가능한 모든 대안 중에서 Inkscape가 PDF를 PNG로 변환 할 때 가장 정확한 결과를 생성하는 것을 발견했습니다. 특히 소스 파일에 투명 레이어가있을 때 Inkscape는 Imagemagick 및 기타 도구가 실패한 곳에서 성공했습니다.

이것은 내가 사용하는 명령입니다.

inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"

그리고 여기에서는 스크립트로 구현됩니다.

#!/bin/bash

while [ $# -gt 0 ]; do

pdf=$1
echo "Converting "$pdf" ..."
pngfile=`echo "$pdf" | sed 's/\.\w*$/.png/'`
inkscape "$pdf" -z --export-dpi=600 --export-area-drawing --export-png="$pngfile"
echo "Converted to "$pngfile""
shift

done

echo "All jobs done. Exiting."


답변

pdf를 이미지 파일로 변환하려면 다음 명령을 사용하십시오.

PNG의 경우 gs -sDEVICE=png16m -dTextAlphaBits=4 -r300 -o a.png a.pdf

JPG 용 gs -sDEVICE=jpeg -dTextAlphaBits=4 -r300 -o a.jpg a.pdf

여러 페이지가있는 경우 이름 % 03d에 추가 gs -o a%03d.jpg a.pdf

각 옵션의 의미 :

  • sDEVICE = {jpeg, pngalpha, png16m …}-파일 형식
  • -o-출력 파일 (% stdout에서 stdout으로)
  • -dTextAlphaBits = 4-글꼴 앤티 앨리어싱.
  • -r300-300 dpi


답변

poppler-utils패키지에 포함 된 명령 줄 유틸리티를 사용할 수도 있습니다 .

sudo apt-get install poppler-utils
pdftoppm --help
pdftocairo --help

예:

pdftocairo -png mypage.pdf mypage.png


답변

작동에 대한 수락 된 답변을 얻을 수 없습니다. 그런 다음 Ghostscript가 기본적으로 PNG를 지원할뿐만 아니라 여러 다른 “인코딩” 도 지원하므로 실제로 솔루션이 훨씬 더 간단하다는 것을 알게되었습니다 .

  • png256
  • png16
  • pnggray
  • pngmono

나를 위해 작동하는 셸 명령은 다음과 같습니다.

gs -dNOPAUSE -q -sDEVICE=pnggray -r500 -dBATCH -dFirstPage=2 -dLastPage=2 -sOutputFile=test.png test.pdf

pnggray인코딩 및 500 DPI를 사용하여 test.pdf의 2 페이지를 test.png에 저장합니다 .


답변

다음은 SVG 파일에 대해 이와 같은 문제에 대한 독일어 토론입니다.

convert -background transparent

아마도 이것은 당신에게도 효과가 있습니다.


답변

그의 스레드가 오래되었다고 생각하더라도 내 솔루션을 추가합니다. 어쨌든 이것은 누군가를 도울 것입니다.

먼저 PDF를 생성해야합니다. 이를 위해 XeLaTeX 를 사용 합니다.

xelatex test.tex

이제 ImageMagickGraphicMagic은 모두 왼쪽에서 오른쪽으로 매개 변수를 구문 분석 하므로 맨 왼쪽 매개 변수가 먼저 실행됩니다. 최적의 처리를 위해이 순서를 사용했습니다.

gm convert -trim -transparent white -background transparent -density 1200x1200 -resize 25% test.pdf test.png

투명한 배경에 멋진 그래픽을 제공하고 실제로 페이지에있는 내용으로 잘립니다. -density-resize매개 변수는 더 세분화을주고, 전체 해상도를 높일 수 있습니다.

밀도를 줄일 수 있는지 확인하는 것이 좋습니다. 전환 시간이 단축됩니다.