변환을 사용하여 .png를 .pdf로 일괄 변환하는 데 문제가 있습니다.

변환을 사용하여 .png를 .pdf로 일괄 변환하는 데 문제가 있습니다.
convert /home/bill/TempScan/*.png  myfile.pdf

오류 메시지가 나타납니다:

convert-im6.q16: not authorized `myfile.pdf' @ error/constitute.c/WriteImage/1037.

어떤 도움이라도 주시면 감사하겠습니다!

답변1

convert그래픽을 변환하는 강력한 명령줄 도구입니다. PDF에 대한 지원은 Ghostscript에서 제공됩니다. 중요한 이유로Ghostscript의 보안 허점버전 9.24 이전에는 convert임시방편으로 PDF 파일 사용이 차단되었습니다. 이 문제는 Ghostscript 버전 9.24부터 해결되었습니다. Ghostscript 버전은 지원되는 모든 Ubuntu 버전(현재 Ubuntu 16.04 이상)에서 보안 버전으로 업데이트되지만 사용 제한은 여전히 ​​적용될 수 있습니다.

정책 파일은 /etc/ImageMagick-6/policy.xml. 해당 파일을 루트 사용자로 편집하여 정책을 변경할 수 있습니다.

모든 사용 제한 제거

웹 서버를 실행하지 않는 데스크톱 사용자의 경우 이러한 제한 사항을 제거하는 것만으로도 충분할 수 있습니다. 이를 위해 파일을 삭제할 수도 있지만 이름을 바꾸어 "파일을 다른 곳으로 이동"하는 것이 더 좋습니다. 이 명령을 사용하면 파일 이름이 변경됩니다. 결과적으로 모든 정책이 해제되지만 필요한 경우 되돌릴 수 있습니다.

sudo mv /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xmlout

원래 상황으로 되돌리려면 원래 이름으로 다시 이름을 바꾸면 됩니다.

sudo mv /etc/ImageMagick-6/policy.xmlout /etc/ImageMagick-6/policy.xml

정책 파일을 다른 곳으로 옮기면 시스템 보안이 저하된다는 점에 유의하세요.

PDF로 결합하는 제한사항만 제거

특정 사례의 경우, gene_wood는 댓글에서 한 줄을 주석 처리하여 PDF 파일 작업에 대한 정책을 선택적으로 완화할 수 있는 가능성을 지적했습니다.

<policy domain="coder" rights="none" pattern="PDF" />

파일을 편집하고 이 줄 주위에 주석 표시를 배치하여 이 규칙을 비활성화합니다.

<!-- <policy domain="coder" rights="none" pattern="PDF" /> -->

모든 보안 정책을 제거하고 싶지 않다면 이 방법을 사용하세요.

답변2

처럼바나듐 게시, ImageMagick 정책을 변경해야 합니다.

sudo vim /etc/ImageMagick-6/policy.xml

그리고 라인 교체

<policy domain="coder" rights="none" pattern="PDF" />

~와 함께

<policy domain="coder" rights="read|write" pattern="PDF" />

읽기만 허용하고 읽기는 허용하지 않으려면 read|위 줄의 해당 부분을 지울 수도 있습니다.


그런데 ImageMagick 취약점에 관심이 있는 분들을 위해 다음 2개의 정보 링크를 참조하세요.

답변3

ImageMagick의 보안 제한을 다시 풀기보다는 그냥 사용하겠습니다.img2pdf.

이러한 종류의 사용 사례를 위해 특별히 설계되었습니다.

우선 순위가 다음과 같은 경우 img2pdf를 사용해야 합니다.

  • 항상 무손실:PDF에 포함된 이미지는 항상 입력과 모든 픽셀에 대해 정확히 동일한 색상 정보를 갖습니다.
  • 작은:가능하다면 입력 이미지와 출력 PDF 간의 파일 크기 차이는 PDF 컨테이너 자체의 오버헤드일 뿐입니다.
  • 빠른:가능하다면 입력 이미지는 CPU를 사용하지 않고 픽셀 데이터를 다시 인코딩하지 않고 있는 그대로 PDF 문서에 붙여넣습니다.

ImageMagick과 같은 기존 변환 소프트웨어는 다음 중 하나를 수행합니다.

  1. JPEG로 손실이 있는 재인코딩이므로 무손실이 아닙니다.
  2. 원시 픽셀 데이터의 낭비적인 플랫 인코딩을 사용하므로 작지 않습니다.
  3. 입력 데이터가 다시 인코딩되므로 빠르지 않습니다.

대부분의 일반적인 상황에서 입력을 다시 인코딩할 필요가 없다는 또 다른 이점은 원시 픽셀 데이터를 메모리에 로드할 필요가 없기 때문에 img2pdf가 다른 소프트웨어보다 훨씬 더 큰 입력을 처리할 수 있다는 것입니다.

이는 동등한 명령이어야 합니다.

img2pdf --out myfile.pdf /home/bill/TempScan/*.png 

어떤 이유로 그렇게 할 수 없는 경우(예: 새 패키지를 설치할 수 없는 경우) 무손실 변환을 위한 또 다른 잠재적인 방법은 convert이미지를 다중 페이지 TIFF 파일로 변환한 다음 tiff2pdflibtiff 도구에서 사용하는 것입니다.

답변4

다음은 자동으로policy.xml 파일의 위치를 ​​가져오고 모든 파일에 대해 검색/바꾸기를 수행하는 훨씬 더 편리한 방법입니다.

for file in `convert -list policy | grep "Path:" | grep -v built | sed 's/Path: \(.*\)/\1/g'`; do sed -i 's/domain="coder" rights="none" pattern="PDF"/domain="coder" rights="read|write" pattern="PDF"/g' $file; done

관련 정보