使用 QPDF.exe 创建批处理或 .bat 文件以线性化和合并 PDF

使用 QPDF.exe 创建批处理或 .bat 文件以线性化和合并 PDF

我正在尝试创建一个批处理或 .bat 文件,它将线性化多个 PDF 文件。我已经有一个我征用的脚本,它使用 PDFTK 将 PDF 发送到“sendto”文件夹,在那里将它们合并。我想对 qpdf 执行相同的操作,但使用命令--linearize

主要问题是,我无法先使用 PDFTK 将文件合并为一个 PDF,然后再线性化该文件 - 文件仍然太大。最好的方法是将每个单独的文件线性化,然后合并它们。如果我也可以使用 qpdf 将它们合并,那可能最好,这样我就不必使用两个不同的程序了。

总结:

这是我目前拥有的运行良好的 bat 文件(如下)-> 我可以选择多个 PDF 文件,将它们放入 bat 文件中,然后弹出一个名为 Combined_PDFs.pdf 的新 PDF 文件。我想对 qpdf 执行相同的操作,除了线性化,然后合并文件。我无法正确理解语法,我只是对 bat 文件了解不够。

当前工作脚本:

@echo off
PUSHD "%~dp0"
setlocal enabledelayedexpansion
FOR %%A IN (%*) DO (set command=!command! %%A)
pdftk.exe %command% cat output "%~dp1Combined_PDFs.pdf" compress

该脚本有效,但每次只能对一个文件起作用:

@echo off
PUSHD "%~dp0"
setlocal enabledelayedexpansion
FOR %%A IN (%*) DO (set command=!command! %%A)
qpdf.exe --linearize %command% "%~dpn1_Reduced%~x1"

我需要上述脚本来处理多个输入。

答案1

我相信你需要做的是改变为了第二个批处理文件中的循环。第一个批处理文件创建一个名为“命令“将传递给批处理文件的所有文件保存在一个字符串中,并以空格分隔。

但是,在第二个批处理文件中,您需要实际运行执行文件为每个文件单独编写程序。为此,请更改为了循环执行执行文件在每个循环中编程:

@echo off
PUSHD "%~dp0"
setlocal enabledelayedexpansion
FOR %%A IN (%*) DO qpdf.exe --linearize %%A "%%~dpnA_Reduced%%~xA"

简而言之,这将运行对于传递给批处理文件的每个字符串,执行一次。


另外,作为未来调试的提示,尝试将快速眼动 (REM)在......面前@echo 关闭暂不表态。 快速眼动 (REM)用于注释代码,可以提高可读性。它将在批处理文件执行时显示其中的每一行,这样您就可以更好地了解运行时发生的情况。

REM @echo off

相关内容