很长一段时间以来,我一直在使用 Henry 在一个简单的 Bash 脚本中给出的相同基本命令行,并进行了一些调整。
我的完整脚本使用修改后的命令将多个 JPEG 图像转换为多页 PDF:
gs \
-sDEVICE=pdfwrite \
-o foo.pdf \
/usr/local/share/ghostscript/9.02/lib/viewjpeg.ps \
-c "(1st.jpg) viewJPEG showpage \
(2nd.jpg) viewJPEG showpage \
(3rd.jpg) viewJPEG showpage \
(last.jpg) viewJPEG showpage"
它是这样称呼的:
jpegs2pdf.sh output.pdf file1.jpeg [file2.jpeg [file2.jpeg [...]]]
问题是这个命令将使用与 Ghostscript 相同的(默认)页面大小(通常是纵向模式下的 Letter 或 A4),并且每个 JPEG 图像都将被缩放以适应这个页面宽度和/或页面高度,放置在左下角。
我的脚本使每个 PDF 页面使用与页面的原始 JPEG 相同的页面尺寸。对于 JPEG 尺寸的自动发现,我使用 ImageMagick 的 identify 命令:
identify -format "%[fx:(w)] %[fx:(h)]" some.jpeg
这是完整脚本的代码:
#!/bin/bash
#
#############################################################################
#
# Shellscript to convert a set of JPEG files to a multipage PDF.
#
# Requirements: (1) Ghostscript needs to be installed on the local system.
# (2) ImageMagick needs to be installed on the local system.
#
# Usage: jpegs2pdf.sh output.pdf file1.jpeg [file2.jpeg [file2.jpeg [...]]]
#
# Copyright (c) 2007, <pipitas@gmail.com>
# Use, distribute and modify without any restrictions.
#
# Versions:
# v1.0.0, Jul 12 2007: initial version
# v1.0.1, Jan 07 2011: set viewJPEG.ps path (self-compiled GS 9.02)
#
#############################################################################
outfile=$1
shift
param=""
for i in "$@" ; do
dimension=$(identify -format "%[fx:(w)] %[fx:(h)]" "${i}")
param="${param} <</PageSize [${dimension}]>> setpagedevice (${i}) viewJPEG showpage"
done
gs \
-dNOSAFER \
-sDEVICE=pdfwrite \
-dPDFSETTINGS=/prepress \
-o "$outfile" \
/usr/local/share/ghostscript/9.02/lib/viewjpeg.ps \
-c "${param}"