27
1月
2022
19:21

从 Linux 命令行对 PDF 文件进行操作

27 1月 2022 19:21

在工作中,我经常需要处理 PDF 文件 - 合并文件并压缩它们。 为了不重新启动到 Windows(我之前在 Windows 中使用过“PDF 工具免费”实用程序),我通过选择适当的命令来自动执行此过程,以批量转换和处理 PDF 到 JPEG、JPEG 到 PDF、PDF 到 PDF(压缩)。

准备工作:

1)安装必要的包:

sudo apt install poppler-utils imagemagick qpdf

2)配置imagemagick程序的xml文件

否则,运行其中一个命令时会出现错误 "convert-im6.q16: attempt to perform an operation not allowed by the security policy PDF' @ error/constitute.c/IsCoderAuthorized/421."

我们需要编辑policy.xml文件:

  • 打开文件进行编辑 /etc/ImageMagick-6/policy.xml (或-7,取决于版本):
    sudo nano /etc/ImageMagick-6/policy.xml

    sudo nano /etc/ImageMagick-7/policy.xml
  • 查找部分 <policymap> и перейти в его конец перед тегом </policymap>
  • 插入行
    <policy domain="coder" rights="read | write" pattern="PDF" />
  • 保存文件更改 policy.xml

 

准备好的解决方案:

项目 功能 终端命令
1。 合并 几个 PDF 文件 合而为一(将多个 PDF 文件合并为一个文件输出.pdf)
infile1.pdf+infile2.pdf+infile3.pdf = output.pdf
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile='output.pdf' 'infile1.pdf' 'infile2.pdf' 'infile3.pdf'



qpdf --empty --pages infile1.pdf infile2.pdf --output.pdf
合并 几个 页面 来自各种 文件 PDF(将 PDF 文件中的多个页面合并为一个文件)

infile1.pdf(p.1, 12-13)+infile2.pdf(p.1-10)+infile3.pdf(p.44) = output.pdf
qpdf --empty --pages infile1.pdf 1,12-13 infile2.pdf 1-10 infile3.pdf 44 -- 输出.pdf qpdf --empty --pages infile1.pdf 1,12-13 infile2.pdf 1-10 infile3.pdf 44
2。 隔离 从文件第 5-7 和 12 页中,将其保存到一个单独的文件中(将第 5 页、第 7 页和第 12 页拆分为新文件 output.pdf) qpdf input.pdf --pages 。 5-7,12 -- 输出.pdf



qpdf --empty --pages input.pdf 5-7,12 -- 输出.pdf
更改页面顺序 在输入文件中从 1 2 3 4 到 4 3 2 1(页面重新排序为 4,3,2,1),保存到新文件output.pdf(保存到新文件output.pdf) qpdf 'infile.pdf' --pages 。 4,3,2,1 -- 输出.pdf
从一个 17 页的文件中,**删除**first(从包含 16 页的文件中删除第一页) qpdf infile.pdf out.pdf --pages infile.pdf 2-17 --



qpdf 'infile.pdf' --pages 。 2-17 -- 输出.pdf
从一个 17 页的文件中,**删除**最后(从包含 16 页的文件中删除最后一页) qpdf infile.pdf out.pdf --pages infile.pdf 1-16 --
从一个 17 页的文件中,删除 指定页数:第6页和第10-12页(从包含17页的文件中删除第6页和范围10-12) qpdf infile.pdf out.pdf --pages infile.pdf 1-5,7-9,13-17 --
3。 旋转 所有页面 180度 (将所有页面旋转 180 度) qpdf in.pdf out.pdf --rotate=+180 qpdf in.pdf out.pdf --rotate=+180 qpdf in.pdf out.pdf --rotate=+180
旋转页面 #1 和 #2 **90度**顺时针 qpdf in.pdf' out.pdf --rotate=+90:1-2 qpdf in.pdf' out.pdf --rotate=+90:1-2
将第 3 页翻至 **90度**逆时针 qpdf in.pdf' out.pdf --rotate=-90:3 qpdf in.pdf' out.pdf --rotate=-90:3
将当前目录下的所有PDF文件旋转到 90度 顺时针 for f in $(ls ./*.pdf);执行 qpdf $f $f.out --rotate=+90; rm$f; mv $f.out $f;完成
4。 按页面拆分 PDF,将每个页面保存为单独的 PDF 文件(拆分页面):infile.pdf -> out-1.pdf、out-2.pdf、...、out-n.pdf qpdf infile.pdf out.pdf --split-pages qpdf infile.pdf out.pdf --split-pages qpdf infile.pdf out.pdf --split-pages qpdf infile.pdf out.pdf
5. 按页面拆分 PDF,保存每一页 到一个单独的 PDF 文件 (使用输出文件掩码在页面上拆分 PDF) 指示面具 文件:infile.pdf -> out01.pdf、out02.pdf、...、outNN.pdf(使用文件掩码 %d 分割页面) qpdf --split-pages=1 infile.pdf out%d.pdf qpdf --split-pages=1 infile.pdf out%d.pdf
6。 将 PDF 转换为 JPG 像素密度为300 dpi,JPEG质量q=30(高压缩),将每页图像放入文件夹“图片”,带有前缀“pg-”页码 pg-01.jpg、pg-02.jpg 等的文件 mkdir -p 图像 && pdftoppm -jpeg -r 300 -jpegopt 质量 = 30 'infile.pdf' 图像/pg
7. 将 *.jpg 文件转换为 PDF 文件而不合并它们 (批量将JPG转换为PDF文件,无需合并) for f in $(ls images/*.jpg);转换 $f $f.pdf ;完成
8。 将图像目录中的所有 PDF 文件合并为单个 PDF 文件“output.pdf” (将“images”文件夹中的所有 PDF 合并为单个 PDF 文件) qpdf --empty --pages ./images/*.pdf -- 输出.pdf
9。 夹具 one file infile.pdf tocompressed.pdf (重新压缩单个PDF文件) (注意:执行此命令有时不会减小文件大小:这取决于源文件的压缩率) gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -dNOPAUSE -dQUIET -dBATCH -sOutputFile=compressed.pdf infile.pdf
10. 一键压缩当前目录下所有out*.PDF文件 (重新压缩当前文件夹中的所有 PDF 文件并将结果放入“压缩”文件夹中)。 将结果放在压缩目录中。

参见。 请注意上面。
mkdir -p 压缩 && for f in $(ls out*.pdf);做 gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -dNOPAUSE -dQUIET -dBATCH -sOutputFile=./compressed/$f $f;完成
11. 使用一个命令对 PDF 文件执行强压缩 (对PDF文件进行超压缩) mkdir -p images && pdftoppm -jpeg -r 96 -jpegoptquality=30 'infile.pdf' images/pg && for f in $(ls images/pg-*.jpg);转换 $f $f.pdf ;完成 && qpdf --empty --pages ./images/*.pdf -- outfile.pdf && rm -R 图像
12. 将 JPG 分辨率降低至 25%, 做 重新编号 按顺序保存到文件 具有 JPEG 质量的 JPG q=50 (高压缩),将图像放在文件夹“图片 mkdir -p 图像 && i=1 ; for f in $(ls *.jpg);转换 -resize 25% -quality 50 $f ./images/img$i.jpg ;设i=i+1;完成
13. 将 JPG 分辨率降低至 700x525,应用自动色阶 亮度(自动调平),一点 锐化 (锐化),做 重新编号 按顺序保存到文件 具有 JPEG 质量的 JPG q=50 (高压缩),将图像放在文件夹“图片 mkdir -p 图像 && i=1 ; for f in $(ls *.jpg);转换 -resize 700x525 -auto-level -unsharp 0.65x0.65+1+0.9+0.04 -quality 50 $f ./images/img$i.jpg ;设i=i+1;完成
14. 新功能:将自动级别应用于 JPEG 文件,将 JPG 压缩比提高到 40 (强压缩),以原名保存文件( 覆盖文件)" mogrify -auto-level -quality 40% *.jpg
15. 一次操作:将所有 *.PDF 文件压缩为 outPDF,参数为:分辨率 150 ppi,Q=37%,应用亮度自动级别 (通过一项操作压缩所有 PDF 文件,并应用自动级别,并将结果放置在名称为 out*.pdf 的同一文件夹中) 对于 p in $(ls *.pdf); mkdir -p images && pdftoppm -jpeg -r 150 -jpegoptquality=100 $p images/pg && for f in $(ls images/pg-*.jpg);执行 mogrify -auto-level -quality 37% $f;转换 $f $f.pdf ;完成 && qpdf --empty --pages ./images/*.pdf -- 'out'$p && echo $p && echo $p && rm -R 图像;完成
16。 一次操作:将所有文件“*.PDF”压缩为 outPDF,参数为:分辨率 120 ppi、Q=30%、转换为黑白、应用自动亮度级别并锐化 15% (通过一项操作压缩所有 PDF 文件 *.pdf,并应用自动级别和锐化,并将结果放置在名称为 out*.pdf 的同一文件夹中) shopt -s nocaseglob && for p in $(ls *.pdf); mkdir -p images && pdftoppm -jpeg -r 150 -jpegoptquality=100 $p images/pg && for f in $(ls images/pg-*.jpg);执行 mogrify -colorspace 灰色 -auto-level -sharpen 15% -quality 30% $f;转换 $f $f.pdf ;完成 && qpdf --empty --pages ./images/*.pdf -- 'out'$p && echo $p && rm -R 图像;完成
17. 一次操作:使扫描[标记]变暗[/标记] - 将所有文件“*.PDF”压缩为 outPDF,参数为:分辨率 200 ppi、Q=37%、应用自动色阶、颜色转换为灰色调色板和 gamma=0.5 (通过一个操作压缩所有 PDF 文件 *.pdf,使它们[标记]变暗[/标记] - 应用自动色阶和灰度以及 gamma=0.5,并将结果放在名称为 out*.pdf 的同一文件夹中) shopt -s nocaseglob && for p in $(ls pvk.pdf); mkdir -p images && pdftoppm -jpeg -r 200 -jpegoptquality=100 $p images/pg && for f in $(ls images/pg-*.jpg);执行 mogrify -auto-level -gamma 0.5 -colorspace Gray -quality 37% $f;转换 $f $f.pdf ;完成 && qpdf --empty --pages ./images/*.pdf -- 'out'$p && echo $p && echo $p && rm -R 图像;完成
18. 一次操作:压缩所有文件“*.PDF”,参数为:分辨率 120 ppi,Q=30%,应用亮度自动级别,将结果放入“压缩”文件夹中 (通过一个操作压缩所有 PDF 文件,应用自动级别和锐化,放置在名为“压缩”的文件夹中) mkdir 压缩 && shopt -s nocaseglob && for p in $(ls *.pdf); mkdir -p images && pdftoppm -jpeg -r 150 -jpegoptquality=100 $p images/pg && for f in $(ls images/pg-*.jpg);执行 mogrify -auto-level -quality 37% $f;转换 $f $f.pdf ;完成 && qpdf --empty --pages ./images/*.pdf -- './compressed/'$p && echo $p && rm -R 图像;完成

最后更改:2024 年 6 月 25 日 - 添加了第一部分“准备”。



相关出版物