使用Ruby的Prawn库合并扫描JPEG为PDF的问题求助
使用Ruby Prawn库解决扫描JPEG转PDF的尺寸异常问题
我来帮你搞定这个问题!之前用ImageMagick遇到的页面缩放异常,用Prawn完全可以解决,而且能精准控制每个页面的尺寸。下面给你两种实用方案,按需选择:
方案1:每个PDF页面匹配图片实际尺寸
这个方案会让每张图片对应一个和它实际大小一致的PDF页面,完全避免缩放失真,适合需要保留原始扫描尺寸的场景。
步骤:
先安装依赖:
gem install prawn mini_magick(如果用Bundler,就在Gemfile里加
gem 'prawn'和gem 'mini_magick',然后跑bundle install)编写Ruby脚本:
require 'prawn' require 'mini_magick' # 替换成你的图片路径列表 image_paths = ['image1.jpg', 'image2.jpg', 'image3.jpg'] # 生成PDF,跳过初始页面创建,我们手动为每张图建页面 Prawn::Document.generate('output.pdf', skip_page_creation: true) do |pdf| image_paths.each do |img_path| # 用MiniMagick获取图片的真实像素尺寸(比Prawn自带方法更可靠) img = MiniMagick::Image.open(img_path) pixel_width = img.width pixel_height = img.height # 扫描件通常是300DPI,把像素转换成PDF的点单位(1英寸=72点) dpi = 300 page_width = (pixel_width.to_f / dpi) * 72 page_height = (pixel_height.to_f / dpi) * 72 # 创建对应尺寸的新页面 pdf.start_new_page(size: [page_width, page_height]) # 插入图片,让它刚好填满整个页面 pdf.image(img_path, fit: [page_width, page_height]) end end
方案2:统一所有PDF页面尺寸
如果你希望所有页面大小一致(比如统一用最大的那张图的尺寸),可以用这个方案,图片会自动居中适配页面,保持比例不变。
脚本示例:
require 'prawn' require 'mini_magick' image_paths = ['image1.jpg', 'image2.jpg', 'image3.jpg'] # 先找出所有图片里的最大宽高 max_pixel_width = 0 max_pixel_height = 0 image_paths.each do |path| img = MiniMagick::Image.open(path) max_pixel_width = [max_pixel_width, img.width].max max_pixel_height = [max_pixel_height, img.height].max end # 转换为PDF页面尺寸(同样基于300DPI) dpi = 300 uniform_page_width = (max_pixel_width.to_f / dpi) * 72 uniform_page_height = (max_pixel_height.to_f / dpi) * 72 # 生成统一尺寸的PDF Prawn::Document.generate('output_uniform.pdf', size: [uniform_page_width, uniform_page_height]) do |pdf| image_paths.each do |img_path| # 图片居中显示,自动适配页面,不会拉伸变形 pdf.image(img_path, position: :center, vposition: :center, fit: [uniform_page_width, uniform_page_height]) end end
注意事项:
- 这里用MiniMagick是因为它能精准获取图片的原始像素尺寸,比Prawn自带的图片解析更稳定,尤其是处理扫描件这类可能带有元数据的图片。
- 如果你的扫描件DPI不是300,记得把代码里的
dpi值改成实际的(比如200或600),这样转换后的页面尺寸才会准确。 - 运行脚本后,就能得到没有尺寸异常的PDF了,再也不会出现某页突然变成1/10大小的情况!
内容的提问来源于stack exchange,提问作者nattfodd
相关产品推荐
相关产品推荐

