2017-09-29 77 views
-1

給定一個帶有幾個jpg文件(照片)的目錄,我想 想創建一個PDF文件,每頁只有一張照片。 但是,我希望將照片保存在pdf文件中不變;即,我想避免解碼和重新編碼。 理想情況下,我希望能夠使用例如pdfimages等linux命令行從pdf文件中提取原始jpg文件(可能減去元數據)。將jpg圖像以「無損」的方式存儲到pdf文件中

我的想法而已:

  • imagemagick convert。不過,我對壓縮選項感到困惑:如果我選擇100%quality,這是否意味着jpg內部解碼,然後編碼無損? (這顯然不是我想要的?)
  • pdflatexSome people claim表示圖形包中包含圖像無損,而other dispute that。無論如何,pdflatex會稍微麻煩一些(我首先必須找出照片的尺寸,然後相應地設置頁面大小,確保沒有邊距,標題等)。
+0

Imagemagick將解碼,然後包裝在PDF矢量外殼。它不會是無損的。普通JPG的質量100仍然有損。 – fmw42

+0

您可以按照您喜歡的任何方法進行操作,然後*將JPG附加到PDF上。 PDF將提供圖像的可視化,而附件應該是無損的,並且可以下載/提取。 [PDF工具包](https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/)可以提供幫助。 – Werner

回答

1

你可以使用下面的小腳本,依靠HexaPDF(注意:我是HexaPDF的作者)來做到這一點。

注意:確保您安裝了Ruby 2.4,然後運行gem install hexapdf來安裝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

非常感謝你。到目前爲止,我從未使用過ruby,但現在將安裝並嘗試腳本。如果它適合我​​,我會接受答案。 – Jakob

+0

非常棒,非常感謝! 我將修改腳本以禁用縮放等,而是調整每個紙張大小以匹配相應的JPG。 (看來我必須在doc.pages.add這一步做到這一點;我會稍微玩一下) – Jakob

+0

調整頁面的大小可以通過提供一個包含四個值的數組來完成 - 媒體框 - - 到'doc.pages.add'。在你的情況下,你會做'doc.pages.add([0,0,iw,ih])''。然後保留所有內容,直到'page.canvas ...'並將其更改爲'page.canvas.image(image,at:[0,0])''。 – gettalong

相關問題