以“无损”方式将jpg图像存储到pdf文件中

Jak*_*kob 7 pdf jpeg pdf-generation pdflatex imagemagick-convert

给定一个包含多个 jpg 文件(照片)的目录,我想创建一个 pdf 文件,每页一张照片。但是,我希望照片原封不动地存储在 pdf 文件中;即,我想避免解码和重新编码。因此,理想情况下,我希望能够使用 linux 命令行等从 pdf 文件中提取原始 jpg 文件(可能减去元数据)pdfimages

到目前为止我的想法:

  • imagemagick convert。但是,我对压缩选项感到困惑:如果我选择 100% quality,是否意味着 jpg 会在内部解码,然后进行无损编码?(这显然不是我想要的?)
  • pdflatex有些人声称图形包包含无损图像,而其他人则对此提出异议。无论如何,pdflatex会稍微麻烦一些(我首先必须找出照片的尺寸,然后相应地设置页面大小,确保没有边距、标题等)。

Ger*_*mia 11

img2pdfPyPI 页面):

将光栅图像无损转换为 PDF,无需重新编码 PNG、JPEG 和 JPEG2000 图像。这可以实现 PNG、JPEG 和 JPEG2000 图像的无损转换,唯一增加的文件大小来自 PDF 容器本身。其他光栅图形格式使用与 PNG 相同的编码进行无损存储。由于 PDF 不支持透明图像,并且 img2pdf 的目标是永不有损,因此不支持具有 alpha 通道的输入图像。

pdfimages -all效果恰恰相反。)


get*_*ong 2

您可以使用以下依赖于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')
Run Code Online (Sandbox Code Playgroud)

只需在命令行上提供图像作为参数,输出文件将被命名为images.pdf. 大多数代码涉及居中和缩放图像以很好地适应页面。