2017-09-29 13 views
-1

여러 jpg 파일 (사진)이있는 디렉토리가 있다면 페이지 당 하나의 사진으로 하나의 pdf 파일을 만드는 것이 좋습니다. 그러나 사진을 pdf 파일에 변경하지 않고 저장하고 싶습니다. 즉, 디코딩 및 레코딩을 피하고 싶습니다. 이상적으로 pdf 파일에서 원래의 jpg 파일 (메타 데이터 제외)을 추출 할 수 있기를 원합니다. 예를 들어 pdfimages과 같은 Linux 명령 행을 사용하는 것이 좋습니다.jpg 이미지를 "무손실"방식으로 pdf 파일에 저장

내 아이디어 지금까지 :

  • imagemagick convert. 그러나 압축 옵션으로 혼란 스럽습니다. 100 % quality을 선택하면 jpg가 내부적으로 디코딩 된 다음 무손실로 인코딩된다는 의미입니까? (분명히 내가 원하는 것이 아닌가?)
  • pdflatex. Some people claim 그래픽 패키지에는 이미지가 손실되지 않는 것이 포함되어 있으며 other dispute that입니다. 어쨌든, pdflatex는 약간 더 복잡 할 것입니다 (먼저 사진의 크기를 알아 내야합니다. 따라서 페이지 크기를 적절히 설정하고 여백이나 헤더 등이 없는지 확인하십시오).
+0

Imagemagick은 PDF 벡터 셸을 디코딩 한 후 다시 포장합니다. 그것은 무손실되지 않습니다. 일반 JPG의 품질은 여전히 ​​100입니다. – fmw42

+0

원하는 방법을 따라 JPG를 PDF에 첨부 할 수 있습니다. 첨부 파일은 무손실이어야하며 다운로드/추출 할 수 있지만 PDF는 이미지를 시각적으로 보여줍니다. [The PDF Toolkit] (https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/)이 도움이 될 수 있습니다. – Werner

답변

1

HexaPDF (참고 : 저는 HexaPDF의 저자입니다)에 의존하는 다음 소형 스크립트를 사용할 수 있습니다.

참고 : Ruby 2.4가 설치되어 있는지 확인한 다음을 실행하여 hexapdf를 설치하십시오. 여기

스크립트입니다 :

require 'hexapdf' 

doc = HexaPDF::Document.new 

ARGV.each do |image_file| 
    image = doc.images.add(image_file) 
    page = doc.pages.add 
    iw = image.info.width.to_f 
    ih = image.info.height.to_f                                
    pw = page.box(:media).width.to_f 
    ph = page.box(:media).height.to_f 
    rw, rh = pw/iw, ph/ih 
    ratio = [rw, rh].min 
    iw, ih = iw * ratio, ih * ratio 
    x, y = (pw - iw)/2, (ph - ih)/2 
    page.canvas.image(image, at: [x, y], width: iw, height: ih) 
end 

doc.write('images.pdf') 

그냥 명령 행 인수로 이미지를 제공, 출력 파일은 images.pdf을 지정됩니다. 대부분의 코드는 이미지를 센터링하고 크기를 조정하여 페이지에 잘 맞도록 처리합니다.

+0

정말 고마워요. 지금까지 루비를 사용한 적은 없지만 지금 설치하고 스크립트를 사용해 보겠습니다. 그것이 저를 위해 작동하는 경우에 나는 응답을 받아 들일 것이다. – Jakob

+0

위대한 작품, 정말 고마워! 스크립트를 수정하여 크기 조정 등을 사용하지 않고 대신 각 용지 크기를 jpg와 일치하도록 조정합니다. (나는 doc.pages.add 단계에서 그렇게해야만하는 것 같습니다. 조금만 가지고 놀아 보겠습니다.) – Jakob

+0

4 개의 값이있는 배열을 제공하여 페이지의 크기를 조정할 수 있습니다 - 미디어 박스 - -'doc.pages.add'. 귀하의 경우에는'doc.pages.add ([0, 0, iw, ih])'와 같은 것을 할 것입니다. 그런 다음'page.canvas ... '까지 모든 것을 버리고'page.canvas.image (image, at : [0, 0])'로 변경하십시오. – gettalong