batch-file - 使用 cPDF 生成横向文件的批处理脚本?

标签 batch-file pdf cmd command-line forfiles

看看有没有人可以帮助我。 例如:

我有一个 4 页的 .pdf 文档。

使用下面的命令,我可以使这个 .pdf 文档有两页,即同一张纸上的两页“横向”格式

cpdf -twoup-stack in.pdf -o out.pdf

但我需要使其适用于同一文件夹中的多个文件。我尝试了下面的命令,但没有成功。如果有人有解决方案,我将不胜感激,我是初学者。

这只会打印文件夹中的一个文件。

cpdf -twoup-stack 路径\*.pdf -o out.pdf

最佳答案

看起来您使用的是 Windows 版本,因此从 cmd 提示符处理当前文件夹中的所有多页文件,您可以使用更简单的方法

forfiles/m *.pdf/c "cmd/c cpdf -twoup-stack in.pdf -o out-@file"

所以 in1.pdf 变成 out-in1.pdf

类似的是

对于 (*.pdf) 中的 %f 执行 cpdf -twoup-stack in.pdf -o "out-%f"

使用具有不同for结构的batch.cmd文件会更方便,其中包含一些变量以允许拖放或指定默认文件夹等。

因此,如果将以下 2up.cmd 放置在包含多个 pdf 的工作文件夹中,它将在 cmd 提示符下输入 2up简单的双击 在该 cmd 文件上,然后处理该工作文件夹中的所有 pdf 文件。

请注意,批处理文件需要 %%,而命令行只需要一个,但括号内的单个 %~ 是正确的!还定义 cpdf 的文件夹,以确保它是唯一访问的 cpdf 命令,并且通常“双引号”以避免空格问题。

@echo off
REM ensure we only run in this file.cmd dir not any system dir
cd /d "%~dp0"

for %%F in ("%~dp0*.pdf") do "c:\path to\cpdf.exe" -twoup-stack "%%F" -o "%%~dpnF-out.pdf"

与源页面相比,结果将是旋转拼版,因此下一步通常是在末尾添加第二个命令来旋转 those-out.PDF。

for %%F in ("%~dp0*-out.pdf") do "c:\path to\cpdf.exe"-rotate 90 "%%F"-o "%%~dpnF -2up.pdf"

如果您要为 4-up 运行两次,则更需要删除工作文件,因此在这种情况下,请考虑是否使用第 3) del "%~dp0*-out.pdf" 4) ...*-2up.pdf ...-out.pdf 和 5) -out.pdf 到 -4up.pdf 之前也需要

4-up 通常是 2-up 两次,所以我在上面给出了关于在末尾添加额外行的提示,在您尝试过的评论中,发现只有 3 个步骤作为您所需用途所需的循环:-

这可能不是最有效的方式(但现在是一个 for 循环,因此保留了逻辑),它可以用作不同可执行文件和不同函数序列的模板。
4-up.cmd

@echo off
REM we will be changing % values % during ! runtime !
setlocal ENABLEDELAYEDEXPANSION

REM ensure we only run in this file.cmd dir not any system dir
cd /d "%~dp0"

REM we can set a work directory here from command line or drag and drop and use it later
REM but that's a further customization based on user choices

REM set mode to -twoup or -twoup-stack (see cpdf manual)
set "mode=-twoup-stack"

REM set cpdf command location
set "theExe=C:\Users\WDAGUtilityAccount\Desktop\SandBox\apps\PDF\cpdf\New folder\cpdf.exe"

REM using current folder and restricting file set to *.pdf

for %%F in ("%~dp0*.pdf") do (
  set "name=%%~nF"
      echo processing !name!

  "%theExe%" %mode% "!name!.pdf" -o "%temp%\!name!-tmp1.pdf" 2>nul
      dir /b "%temp%\!name!-tmp1.pdf"

  "%theExe%" %mode% "%temp%\!name!-tmp1.pdf" -o "%temp%\!name!-tmp2.pdf" 2>nul
      dir /b "%temp%\!name!-tmp2.pdf"

  "%theExe%"  -rotate 180 "%temp%\!name!-tmp2.pdf" -o "%~dp0!name!-4up.pdf" 2>nul

  REM lets remove the temporary files to ensure no mix-up on runs
  del "%temp%\!name!-tmp?.pdf"
      echo deleted tmp files

  echo "%~dp0!name!-4up.pdf" done
)
pause

如果您想要更安静的运行,则可以删除那些回显进度的 dir 行,然后双击运行 cmd 文件就不需要暂停。

要将输出保存在不同的文件夹中,最简单的方法是更改​​最后一个
-o "%~dp0!name!-4up.pdf"
指向不同的文件夹但保留文件名
-o "c:\文件夹名称\!name!.pdf"

适应远程文件夹或拖放超出了这个问题,因此请尝试 FOR/? 以查看许多其他选项,包括适应使用子目录。对于单个文件拖放变体,修改类似于 https://github.com/GitHubRulesOK/MyNotes/blob/master/AppNotes/SumatraPDF/Addins/N-Up-PDF/2-Up-PDF.cmd

关于batch-file - 使用 cPDF 生成横向文件的批处理脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73532904/

相关文章:

pdf - 如何仅使用 Adob​​e PDF 插件强制在谷歌浏览器中显示 PDF

java - 静态变量与命令行一起使用

windows - 无法将pnputil.exe识别为内部或外部命令

batch-file - 令人困惑的 Windows 命令行为(for/F...)

c++ - Qt5:使用 QProcess::startDetached 调用 .bat 文件在 System32 中找不到程序

pdf - Puppeteer:如何生成只有一页且该页包含网页所有内容的PDF

mysql - 如何使用 pdftk fill_form 而不写入临时文件

batch-file - 如何使用批处理脚本解析 csv 文件?

file - 批处理文件杀死并重新启动没有响应的程序

windows - 如何防止 XCOPY 询问目标是文件)还是目录)?