Windows 10 从命令行打印到 PDF

Posted

技术标签:

【中文标题】Windows 10 从命令行打印到 PDF【英文标题】:Windows 10 Print to PDF from command-line 【发布时间】:2017-11-21 01:00:30 【问题描述】:

我现在正在纠正我的学生的作业,我想自动执行一个我一直需要做的烦人的步骤。 在注释他们的 PDF 解决方案后,我需要将它们打印到 PDF 文件中,以便将我的注释烘焙到 PDF 中,以便它们可以包含在 LaTeX 中。现在我必须手动选择“Microsoft Print to PDF”并输入带有前导下划线的 PDF 名称(这是我自动生成的 LaTeX 文件所期望的)。这对于 30 多个文件来说很烦人。 所以我想在一个批处理脚本中自动为所有 PDF 发布这个,以尽量减少我对简单双击的工作。我已经看到这是可能的,例如C# (Here),但我想要一个带有简单批处理脚本的解决方案。 这个可以吗?

编辑: 我发现的 C# 代码实际上并没有完成工作。您不能以这种方式打印现有 PDF。我需要使用 Spire.PDF 来做到这一点。但是,免费版会弄乱 PDF;我可以在 NuGet 中下载“完整”版本,但这会在任何 PDF 的开头生成免责声明,它仍然无法处理我在 Adob​​e Reader DC 中绘制的内容。所以 C# 真的不是一个选项,我需要一个命令行解决方案。

【问题讨论】:

我的意思是从技术上讲,您可以为您发布的 C# 代码的 PowerShell 包装器编写批处理包装器。 技术上,但我宁愿单独编写那个 C# 应用程序。 【参考方案1】:

我认为使用 PowerShell 应该很容易,但我遇到了与this post 中描述的相同的问题。 here 的 PowerShell 解决方案只为我创建空白 PDF 文件。

可能存在更好的解决方案,但我设法将PDFtoPrinter 和this post 结合起来。

批处理脚本可能如下所示:

for /R %%f in (*.pdf) do (
    (echo with createobject^("wscript.shell"^)
    echo .run "<path to PDFtoPrinter.exe> ""%%f"""
    echo wscript.sleep 3000
    echo .sendkeys """%%~df%%~pf%%~nf_correction.pdf"""
    echo .sendkeys "enter"
    echo wscript.sleep 3000
    echo end with) > %temp%\sk.vbs
    start /w %temp%\sk.vbs
)

此脚本使用Microsoft Print to PDF 来创建&lt;filename&gt;_correction.pdf 格式的对应文件。

批处理脚本在%temp% 中创建一个sk.vbs 脚本并运行它。 然后sk.vbs 脚本处理Microsoft Print to PDF 的文件保存对话框。

此外,此解决方案的缺点是在脚本运行时您无法使用计算机,因为sk.vbs 脚本必须将键发送到焦点窗口。

【讨论】:

【参考方案2】:

你最好安装pdfcreator

并使用commandline options

【讨论】:

这看起来很有希望,不幸的是,当我尝试按照链接中所述通过命令行运行它时,我总是收到错误消息“无法转换以下文件 [...]”。跨度> 好的,我通过 not 使用 pdfcreator 的命令行选项,但使用 Acrobat Reader DC 的命令行选项,我指定了我使用 pdfcreator 创建的自定义打印机。该打印机只是自动保存带有前导下划线的文件。它按预期工作! cmd /c "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" /t C:\temp\MyPDF.pdf "MyCoolPrinter" 您是如何让您的自定义 pdfcreator 打印机自动保存带有前导下划线的文件?

以上是关于Windows 10 从命令行打印到 PDF的主要内容,如果未能解决你的问题,请参考以下文章

使用 soffice 进行命令行 pdf 打印

从命令行获取默认打印机名称?

在 Windows 7 上,Libreoffice 命令行在打开 DOCX 或转换为 PDF 时崩溃

从 linux 命令行将 PDF 转换为打印机的灰度格式

通过 Windows 命令行将 TIFF 转换为 PDF [关闭]

Ghostscript将pdf转换为pdf命令行参数不起作用