我有一个包含数百页的大型 PDF 文件。每个n页面包含相同的特定单词和相同的图像。我将这些称为“特殊页面”。
这些的位置特殊页面是不可预测的。这意味着我的 PDF 可以有 5 个正常页面,然后第 6 页是特殊页面然后是 2 个正常页面,然后是特殊页面,然后 12 正常,然后 2特殊页面等等等等。
我需要一种方法来自动打印这些 PDF 文件,以便所有正常页面都打印在打印机的纸盘 1 上,并且所有特殊页面放入纸盘 2(因为我需要普通纸张和不同纸张的特殊页面)。
有谁知道是否有办法一次打印整个 PDF 文件并将其路由特殊页面根据
- 对文本进行搜索以查找其中包含的特定单词
- 或者有图像
- 甚至页面上的颜色数量(特殊页面图像比其他页面包含更多颜色)
我需要定期(每月一次)这样做。
我愿意接受任何建议。具体软件、Powershell 或其他编程语言。有什么想法吗?
开源解决方案是最好的。Windows、Mac 或 Linux 对我来说都是可行的选择。
到目前为止我已经找到了一个解决方案理光打印与共享但单一许可证加上 5 年的维护费用约为 2500 美元。如果能找到更便宜或开源的解决方案就更好了。
答案1
你可能会定量PDF这是一个用于处理 PDF 文件的开源工具。使用它,您可以将文件拆分成页面,隔离特定页面,然后重新组合这些页面,然后将单独的文件发送到特定的打印机。或者,您可以根据特定属性(例如,如果它们包含图像)或文件或页面长度等来隔离页面。它还可以生成文件特征的 JSON 表示,以便您可以使用另一个程序构建基于这些特征来拆分文件的算法。
该工具可以在 Windows 或 Linux 机器上运行。
为了回应 @MrUpsidown 对我的建议的评论,我在这里提供了一个示例 shell 脚本,该脚本接受一个输入文件,并临时将其拆分,仅用于评估每页的字节大小。然后使用拆分后的页面创建页面列表,其中包含较大的“特殊页面”和较小的“常规页面”,然后创建 cups lpr 命令以将这些页面发送到打印机。可以修改脚本以检查每页的文本字符串(例如使用 pdftotext)或其他一些唯一属性。无论如何,一个列表被发送到托盘 Upper,另一个被发送到托盘 Lower。然后它会自行清理。脚本需要调整以满足您的需求,并强化生产使用,但我认为它应该概述我建议的基本方法。
在 Linux 机器(或 Mac)上安装 qpdf 后,您可以通过创建一个文件(我们称之为“splitpages”)来运行脚本,然后通过 使其可执行chmod 755
,然后通过调用 执行脚本splitpages filename.pdf
。它目前只会打印出可以通过在脚本中将“echo”替换为“eval”来激活的命令。执行脚本的一个例子是,
splitpages samplefile.pdf
samplefile.pdf 有 4 页(3 页正常,第四页特殊),它将打印出这些字符串
lpr -o media=Upper -o page-ranges=1,2,3, samplefile.pdf
lpr -o media=Lower -o page-ranges=4, samplefile.pdf
当然,其他事情需要调整以满足你的需求
#!/bin/bash
# print pages based on page size
# greater than minimumsize goes to tray1
# else goes to tray2
minimumsize=500000
infile=$1
if [ ! -f "$infile" ]; then
echo "no input file"
exit
fi
# location of temporary files used to identify page characteristics
outfile=/tmp/test
rm -f ${outfile}*
# split the file so we can assess lengths
qpdf $infile --split-pages $outfile
pnum=0
bigpage=
smallpage=
for page in ${outfile}*
do
((pnum++))
actualsize=$(wc -c <"$page")
if [ $actualsize -ge $minimumsize ]; then
#echo size is over $minimumsize bytes
bigpage="${bigpage}${pnum},"
else
#echo size is under $minimumsize bytes
smallpage="${smallpage}${pnum},"
fi
done
# replace the echo command with the eval command to actually execute the strings
lprc1="lpr -o media=Upper -o page-ranges=$bigpage $infile"
echo $lprc1
lprc2="lpr -o media=Lower -o page-ranges=$smallpage $infile"
echo $lprc2
rm -f ${outfile}*
答案2
Adobe Acrobat Pro 以及 AutoSplit Pro 插件 (149 美元)就可以做到。更多信息请参阅文章 使用文本搜索从 PDF 文档中提取页面。
您还可以使用安装在 Acrobat 的 JavaScript 文件夹之一中的文档级 JavaScript 并创建执行该 JavaScript 的操作来自行自动执行此操作。
有关示例,请参阅文章 根据内容提取 PDF 页面。