我想将一些文件从jpeg转换为pdf。我正在使用以下命令。
$ convert image1.jpg image1.pdf
但是我有100张图片。我应该如何将它们全部转换为相应的pdf?
我试过了
$ convert image*.jpg image*.pdf
没用
我想将一些文件从jpeg转换为pdf。我正在使用以下命令。
$ convert image1.jpg image1.pdf
但是我有100张图片。我应该如何将它们全部转换为相应的pdf?
我试过了
$ convert image*.jpg image*.pdf
没用
Answers:
在bash中:
for f in *.jpg; do
convert ./"$f" ./"${f%.jpg}.pdf"
done
-
带来问题,否则。
mogrify
打字要少得多。看我的答案。
您可以mogrify
为此使用命令。通常,它会就地修改文件,但是在转换格式时,会写入一个新文件(只需更改扩展名以匹配新格式)。从而:
mogrify -format pdf -- *.jpg
(就像enzotib的一样./*.jpg
,--
防止将任何奇怪的文件名解释为开关。大多数命令识别--
为“此时停止寻找选项”。)
*.jpg
和*.png
文件,以一个单一的*.pdf
?请注意,它们是编号文件(例如1.jpg 2.png 3.png 4.jpg
),并且应在pdf输出中维护/保留顺序。
*.jpg
为*.png
,并在步骤2中执行与您的答案相同的结果……
更快但不寻常的语法:
parallel convert '{} {.}.pdf' ::: *.jpg
并行运行(使用https://www.gnu.org/software/parallel/)。我还没有注意到任何多线程convert
,这会限制有效的并行化。如果您对此有所关注,请参阅下面的注释,以获取确保不发生多线程的方法。
parallel
通过设置环境变量来禁用此功能(如果使用应用程序级并行化功能,例如与GNU一起使用)MAGICK_THREAD_LIMIT=1
。
https://gitlab.mister-muffin.de/josch/img2pdf
在所有涉及ImageMagick的建议解决方案中,JPEG数据都得到了完全解码和重新编码。这导致发电量损失,性能也比差“十到一百”倍img2pdf
。
pip img2pdf
如果您具有依赖项(例如apt-get install python python-pil python-setuptools libjpeg-dev
或yum install python python-pillow python-setuptools
),可以与一起安装。
convert some.jpg -format pdf -compress jpeg generated.pdf ; pdfimages -j generated.pdf generated.pdf ; diff -sq some.jpg generated.pdf-000.jpg
。恕我直言,这个答案值得更多的投票。确实,convert
这里失败了,img2pdf
通过了这样的测试,甚至包括许多选项来设置图片大小,页面大小等,以根据您的需要微调生成的pdf。
img2pdf
在Ubuntu 16.04常规存储库中可用,无需在pip
那里进行手动操作,因此您可以受益于更新。
这是将以上建议中的最佳建议组合到一个简单,高效,健壮的命令行中的方法:
find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +
对于以a开头-
或包含空格的文件名,它可以正常工作。请注意,使用的-iname
是不区分大小写的版本,-name
因此它.JPG
和一样适用.jpg
。
这用于find
获取文件列表,而不是使用*.jpg
通配符对shell进行遍历,这在某些系统上可能导致“参数列表过长”错误。尽管正如@enzotib指出的那样,在for循环中使用globlob的行为与命令的arguments有所不同。
同样,find
它将处理子目录,而除非您碰巧具有**/*jpg
zsh中的递归glob语法(例如递归glob语法),否则Shell glob不会处理。
编辑:我想find
在阅读@IlmariKaronen的有关重新运行命令并仅转换自首次运行以来已更改的文件的评论后,会想到另一个有用的功能。
第一次touch
完成转换后,您可以获取一个时间戳文件。
find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +; touch timestamp
然后添加-newer timestamp
到find
表达式中,以对最后修改时间比时间戳文件新的文件子集进行操作。每次运行后继续更新时间戳文件。
find /path/to/files -iname '*.jpg' -newer timestamp -exec mogrify -format pdf {} +; touch timestamp
这是避免使用Makefile的简便方法(除非您已经在使用Makefile),这也是值得find
在任何可能的情况下使用的另一个很好的理由...它具有通用的表现力,同时又保持简洁。
您可以convert
直接使用。这可以在ImageMagicks网站底部有关命令行处理的位置找到。
convert *.jpg +adjoin page-%d.pdf
convert *.jpg -adjoin output.pdf
合并的pdf
我使用以下makefile做类似的事情:
SVG = $(wildcard origs/*.svg)
PNG = $(patsubst origs/%.svg,%.png,$(SVG))
all: $(PNG)
%.png: origs/%.svg
convert -resize "64x" $< $@
clean:
rm $(PNG)
现在,我可以运行了,make
并且每个周围的svg文件都会得到png文件。
编辑
按照要求:
origs/foo.svg
变成foo.png
)。all: $(PNG)
定义目标“全部”取决于所有PNG%.png: origs/%.svg
定义,文件$ X.png取决于origs / $ X.svg,可以通过调用生成convert ... $< $@
。
$<
是依赖项,并且 $@
是目标名称make
再次键入将重新转换那些PDF ,并且仅转换那些已更改的PDF。
make
当使用简单的单缸衬套即可解决问题时,诉诸于似乎有些复杂。
一个小脚本就能解决问题。 (在Solaris 10上用ksh88测试)
脚本
#!/bin/ksh
[[ $# != 1 ]] && exit 255 # test for nr of args
pdfname=$(sed -e 's/\(.*\)\.jpg/\1\.pdf/' <(echo $"1")) #replace *.jpg with *.pdf
convert "$1" $pdfname
然后,您可以运行find
以执行脚本:
find dir -name image\*.jpg -exec /bin/ksh script.ksh {} \;
请注意,这两个命令script.ksh
以及find
我给您的命令在使用的OS和Shell上都有不同的语法。
pdfname=${1%.*}.pdf
用替换文件的扩展名pdf
。该方法简单得多,即使文件名包含特殊字符也可以使用。在相关说明中,在变量替换处添加双引号。
MacOS实用程序SIPS
在MacOS(Sierra)下,Apple的内置命令行实用程序sips
提供对Apple所有光栅图像实用程序的全面访问。事实证明这包括转换jpg
到pdf
。
例如,从现有的低分辨率/小尺寸jpg
图像'cat.jpg'
(大小为8401字节)中,以下命令行创建'cat.pdf'
,而光栅分辨率没有变化,并且文件大小的扩展最小:
$ sips -s format pdf cat.jpg --out 'cat.pdf' 1>/dev/null 2>&1
$ ls -l cat.*
-rw-r--r--@ 1 <user redacted> <group redacted> 8401 Jun 18 07:06 cat.jpg
-rw-r--r--+ 1 <user redacted> <group redacted> 10193 Jun 18 07:22 cat.pdf
转换为Adobe的PSD
栅格图像格式 类似的sips
用法可以创建Adobe兼容的*.psd
文件
$ sips -s format psd cat.jpg --out 'cat.psd' 1>/dev/null 2>&1
$ ls -l cat.jpg cat.psd
-rw-r--r--@ 1 Administration staff 8401 Jun 18 07:06 cat.jpg
-rw-r--r--+ 1 Administration staff 350252 Jun 18 07:37 cat.psd
但是请注意,使用Adope psd
栅格格式会带来30倍的文件大小扩展。
书籍制作 在进行大规模书籍制作时,涉及数百种以多种格式提供的图像,对我而言,一种方便的命令行习惯用法是使用ImageMagick
实用程序来创建png
格式纯的光栅图像文件(所有元数据和颜色配置文件剥离出),然后使用sips
还原一套统一的颜色配置文件和/或评论,并使用sips
也产生最终的输出文件(最常见的*.png
,*.psd
或*.pdf
文件)。
不幸的是,convert
在此之前更改了图像,以使jpg
您需要使用的原始图像的质量损失最小img2pdf
,我使用以下命令:
1)这样可以pdf
从每张jpg
图像制作文件,而不会降低分辨率或质量:
ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf
2)这样可以将pdf
页面串联成一个页面:
pdftk *.pdf cat output combined.pdf
3)最后,我添加了一个OCRed文本层,该层不会更改pdf中扫描的质量,因此可以搜索它们:
pypdfocr combined.pdf
我用imagemagick解决了转换问题,并通过并行处理加快了转换过程:
ls *.JPEG |parallel convert -density 200 -resize 496X646 -quality 100 {} ../{.}.PDF
转换多个文件的最简单方法之一是进入linux终端中的文件目录并键入:
$ convert *.png mypdf.pdf
如果仅使用图像文件,而不是使用漫画书存档(.cbr,.cbz,.cbt,.cba,.cb7)
这比PDF灵活得多。
Under Linux you can use software like Comix, Evince, Okular and QComicBook.
https://secure.wikimedia.org/wikipedia/zh/wiki/Comic_book_archive