从Windows命令行打印PDF

时间:2013-10-01 19:59:57

标签: windows pdf printing cmd sh

我试图在当前目录中打印所有pdf。 当我在cmd(singlepdf.sh)中调用此bash脚本时: '"C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe"' /t Gemeinde_348_BioID_842_alt.pdf一切正常。

使用此内容致电multiplepdfs.sh时:

declare -a pdfs=(*.pdf)

for pdf in ${pdfs[@]}; do
  echo -e "\nprinting **$pdf** with AcroRd32.exe...\n"
  '"C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe"' /t $pdf
  sleep 3
done

echo显示文件在循环中正确处理 - 但后来我收到错误"C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe": No such file or directory

有人可以帮忙解决这个问题吗?

修改 顺便说一句,我安装了msys mingw

12 个答案:

答案 0 :(得分:14)

我知道这是一个古老的问题,但我最近遇到了同样的问题,没有一个答案适合我:

  • 无法找到旧的福昕阅读器版本
  • 正如@pilkch所说,2Printer添加了一个报告页面
  • Adob​​e Reader打开gui

在搜索了一下后,我发现了这个:http://www.columbia.edu/~em36/pdftoprinter.html

它是一个用文件名调用的简单exe,它会打印到默认打印机(或您指定的打印机)。 来自网站:

  

PDFtoPrinter是一个用于从Windows命令行打印PDF文件的程序。该程序通常用于Windows命令行,也适用于vDos DOS模拟器。

要将PDF文件打印到默认的Windows打印机,请使用以下命令:

PDFtoPrinter.exe filename.pdf

要打印到特定打印机,请在引号中添加打印机名称:

PDFtoPrinter.exe filename.pdf "Name of Printer"

如果要打印到网络打印机,请使用Windows打印对话框中显示的名称,如下所示(并注意名称开头的两个反斜杠和服务器名后面的单个反斜杠): / p>

PDFtoPrinter.exe filename.pdf "\\SERVER\PrinterName"

答案 1 :(得分:7)

使用Acrobat Reader完成此任务时遇到两个问题。

  1. 命令行API未得到官方支持,因此可以在不发出警告的情况下更改或删除。
  2. 向Reader发送打印命令会加载GUI,似乎无法阻止它。我需要这个过程对用户透明。
  3. 我偶然发现了这个blog,建议使用Foxit Reader。 Foxit Reader是免费的,API几乎与Acrobat Reader完全相同,但至关重要的是记录在案,并且不会为打印作业加载GUI。

    警告,不要只是点击安装过程而不注意,它也会尝试安装不相关的软件。为什么软件供应商仍然这样做?

答案 2 :(得分:4)

第一反应 - 希望最终回馈一个有用的社区...

希望将此添加到仍在寻找简单解决方案的人的回复中。我使用Foxit Software的免费产品 - FoxItReader 以下是与静默打印一起使用的版本的链接 - 较新版本的静态打印功能仍然无效。 FoxitReader623.815_Setup

FOR %%f IN (*.pdf) DO ("C:\Program Files (x86)\Foxit Software\Foxit Reader\FoxitReader.exe" /t %%f "SPST-SMPICK" %%f & del %%f) 

我只是创建了一个循环遍历目录的命令,并为每个pdf文件(FOR %% f IN * .pdf)静默打开阅读器(/ t)获取下一个PDF(%% f)并将其发送到打印队列(SPST-SMPICK),然后在将每个PDF发送到打印队列(del %% f)后删除它们。 Shashank展示了一个将文件移动到另一个目录的示例,如果你需要做的那样

FOR %%X in ("%dir1%*.pdf") DO (move "%%~dpnX.pdf" p/)

答案 3 :(得分:3)

错误消息告诉你。

尝试

"C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe" /t "$pdf"

当您将字符串括在单引号中时,这会使所有内容都包含在有效字符串中,包括"字符。通过删除单引号,shell将处理dbl-quotes作为字符串“wrappers”。

我还要将文件名变量包装在dbl-quotes中,以便您可以轻松处理名称中带有空格的文件,即

"C:\Program Files (x86)\Adobe\Reader 10.0\Reader\AcroRd32.exe" /t "$pdf"

IHTH

答案 4 :(得分:3)

看起来您缺少打印机名称,驱动程序和端口 - 按此顺序。你的最终命令应该类似于:

AcroRd32.exe /t <file.pdf> <printer_name> <printer_driver> <printer_port>

例如:

"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" /t "C:\Folder\File.pdf" "Brother MFC-7820N USB Printer" "Brother MFC-7820N USB Printer" "IP_192.168.10.110"

注意:要查找打印机信息,请右键单击您的打印机并选择属性。在上面显示的情况下,打印机名称和驱动程序名称匹配 - 但您的信息可能不同。

答案 5 :(得分:3)

我遇到了连续打印多个PDF文件的类似问题,并且发现只使用2Printer软件解决了这个问题。 打印PDF文件的命令行示例:

2Printer.exe -s "C:\In\*.PDF" -prn "HP LasetJet 1100"

http://doc2prn.com/

可免费用于非商业用途

答案 6 :(得分:3)

使用Acrobat阅读器不是一个好的解决方案,尤其是没有记录命令行属性。此外,Acrobat Reader的窗口在打印过程后保持打开状态。 PDF文件是打印机驱动程序所熟知的,因此您可以找到更好的工具,如2Printer.exe或RawFilePrinter.exe。在我看来,RawFilePrinter有更好的支持和明确的许可过程(你付了一次捐款,你可以在你喜欢的许多项目中重新分配RawFilePrinter - 即使是新版本也可以使用之前购买的许可证)

RawFilePrinter.exe -p "c:\Users\Me\Desktop\mypdffile.pdf" "Canon Printer" 
IF %ERRORLEVEL% 1(
    echo "Error!"
)

下载最新版本:http://bigdotsoftware.pl/index.php/rawfileprinter

答案 7 :(得分:1)

@ECHO off set "dir1=C:\TicketDownload" 
FOR %%X in ("%dir1%*.pdf") DO ( "C:\Program Files (x86)\Adobe\Reader 9.0\Reader\AcroRd32.exe" /t "%%~dpnX.pdf" "Microsoft XPS Document Writer" ) 
FOR %%X in ("%dir1%*.pdf") DO (move "%%~dpnX.pdf" p/)

试试这个......可能你有其他版本的Reader,这就是问题..

答案 8 :(得分:1)

今天,我一直在寻找这种解决方案,我尝试了一个有问题的PDFtoPrinter(尝试打印的PDF建议他们使用了不正确的纸张尺寸,这使打印作业挂了,直到解决为止,其他任何东西都无法打印)。在寻找替代方案的过程中,我想起了GhostScript及其相关的实用程序。我发现 GSView及其关联程序GSPrint(参考https://www.ghostscript.com/)。这两个都需要GhostScript(https://www.ghostscript.com/),但是在安装了所有组件之后,GSPrint可以正常工作,并且我能够创建一个计划任务,该任务可以在一夜之间自动打印PDF。

答案 9 :(得分:0)

这是另一种解决方案:

1)下载SumatraPDF(便携式版本)-https://www.sumatrapdfreader.org/download-free-pdf-viewer.html

2)创建一个类库项目,然后将SumatraPDF.exe解压缩到项目目录的根目录并取消阻止。

3)在项目属性内,转到“重新排列”选项卡,然后将exe作为文件添加。

4)将以下类添加到您的库中:

FileInfo file = new FileInfo(@"c:\Sandbox\dummy file.pdf");
SumatraWrapper pdfToPrinter =
    new SumatraWrapper();
pdfToPrinter.Print(file, "My Printer");

5)享受从代码中打印pdf文件的乐趣。

像这样使用:

public class dropdown {
public string selectedvalue {get;set;}
}

答案 10 :(得分:0)

以下批处理脚本应该可以实现您想要的。虽然它会在完成后让 Acrobat Reader 的实例继续运行,但这不会在下次运行此脚本时造成任何问题。

@echo off
for %%f in (*.pdf) do (
  echo Printing %cd%\%%f with Adobe Acrobat Reader...
  start /b "Printing %%f" "C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" /p /h "%cd%\%%f"
)

虽然您可以在之后单独终止 Acrobat Reader 进程,但是这可能会关闭您不想关闭的其他打开的 PDF 文档。

答案 11 :(得分:-1)

“开箱即用”的另一种解决方案

FOR %X in ("*.pdf") DO (C:\Windows\System32\print.exe /d:"\\printername" "%X.pdf")