我正在尝试打印当前目录中的所有pdf。当我在 cmd ( singlepdf.sh
中调用这个 bash 脚本时: '"C:Program Files (x86)AdobeReader 10.0ReaderAcroRd32.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)AdobeReader 10.0ReaderAcroRd32.exe"' /t $pdf
sleep 3
done
回显显示文件在循环中正确寻址 - 但随后我收到错误"C:Program Files (x86)AdobeReader 10.0ReaderAcroRd32.exe": No such file or directory
有人可以帮助解决这个问题吗?
编辑:顺便说一句,我安装了 msys mingw
这是老问题,但我最近遇到了同样的问题,没有一个答案对我有用:
- 找不到旧的福昕阅读器
- 正如@pilkch所说,2Printer 添加一个报告页
- Adobe 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 打印对话框中显示的名称,如下所示(并注意名称开头的两个反斜杠和服务器名称后面的单个反斜杠(:
PDFtoPrinter.exe filename.pdf "\SERVERPrinterName"
我在使用 Acrobat Reader 完成此任务时遇到了两个问题。
- 命令行 API 不受官方支持,因此可能会更改或删除,恕不另行警告。
- 向 Reader 发送打印命令会加载 GUI,但似乎无法阻止它。我需要这个过程对用户透明。
我偶然发现了这个博客,建议使用福昕阅读器。Foxit Reader是免费的,API几乎与Acrobat Reader相同,但至关重要的是,它被记录在案,并且不会为打印作业加载GUI。
警告一句,不要只是点击安装过程而不注意,它也试图安装不相关的软件。为什么软件供应商仍然这样做???
看起来您缺少打印机名称、驱动程序和端口 - 按该顺序排列。最终命令应类似于:
AcroRd32.exe /t <file.pdf> <printer_name> <printer_driver> <printer_port>
例如:
"C:Program Files (x86)AdobeReader 11.0ReaderAcroRd32.exe" /t "C:FolderFile.pdf" "Brother MFC-7820N USB Printer" "Brother MFC-7820N USB Printer" "IP_192.168.10.110"
注意:要查找打印机信息,请右键单击打印机并选择属性。在上面显示的我的情况下,打印机名称和驱动程序名称匹配 - 但您的信息可能不同。
错误消息告诉您。
试试只是
"C:Program Files (x86)AdobeReader 10.0ReaderAcroRd32.exe" /t "$pdf"
将字符串括在单引号中时,这将使字符串中的所有内容(包括"
字符(成为有效字符串。通过删除单引号,shell 会将 dbl 引号处理为字符串"包装器"。
我还会将文件名变量包装在 dbl 引号中,以便您可以轻松地处理名称中带有空格的文件,即
"C:Program Files (x86)AdobeReader 10.0ReaderAcroRd32.exe" /t "$pdf"
希斯
第一反应 - 想最终回馈一个有用的社区......
想将其添加到仍在寻找简单解决方案的人们的回复中。我正在使用福昕软件的免费产品 - 福克斯阅读器。
这是与静默打印一起使用的版本的链接 - 较新版本的静默打印功能仍然不起作用。FoxitReader623.815_Setup
FOR %%f IN (*.pdf) DO ("C:Program Files (x86)Foxit SoftwareFoxit ReaderFoxitReader.exe" /t %%f "SPST-SMPICK" %%f & del %%f)
我只是创建了一个命令来遍历目录,对于每个pdf文件(FOR %%f in *.pdf(,静默打开阅读器(/t(获取下一个PDF(%%f(并将其发送到打印队列(SPST-SMPICK(,然后在我将其发送到打印队列(del%%f(后删除每个PDF。 Shashank展示了一个将文件移动到另一个目录的示例,如果这是你需要做的
FOR %%X in ("%dir1%*.pdf") DO (move "%%~dpnX.pdf" p/)
我在连续打印多个 PDF 文件时遇到了类似的问题,并且只能使用 2Printer 软件找到解决方法。打印 PDF 文件的命令行示例:
2Printer.exe -s "C:In*.PDF" -prn "HP LasetJet 1100"
它免费用于非商业用途 http://doc2prn.com/
使用 Acrobat 阅读器不是一个好的解决方案,尤其是没有记录命令行属性。此外,Acrobat 阅读器的窗口在打印过程后保持打开状态。PDF文件是众所周知的打印机驱动程序,因此您可能会找到更好的工具,例如2Printer.exe或RawFilePrinter.exe。在我看来,RawFilePrinter有更好的支持和清晰的许可流程(您只需支付一次捐款,您就可以在许多您喜欢的项目中重新分发RawFilePrinter - 即使是新版本也可以使用以前购买的许可证(
RawFilePrinter.exe -p "c:UsersMeDesktopmypdffile.pdf" "Canon Printer"
IF %ERRORLEVEL% 1(
echo "Error!"
)
最新版本下载: http://bigdotsoftware.pl/index.php/rawfileprinter
以下批处理脚本应实现所需的内容。虽然完成后它会让 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)AdobeAcrobat Reader DCReaderAcroRd32.exe" /p /h "%cd%%%f"
)
虽然您可以在之后单独终止 Acrobat Reader 进程,但这可能会关闭您不想关闭的其他打开的 PDF 文档。
这是另一种解决方案:
1( 下载苏门答腊语PDF (便携式版本( - https://www.sumatrapdfreader.org/download-free-pdf-viewer.html
2(创建一个类库项目并将SumatraPDF解压缩.exe到项目目录根目录并取消阻止它。
3( 在项目属性中,转到"资源"选项卡并将 exe 添加为文件。
4( 将以下类添加到库中:
public class SumatraWrapper : IDisposable
{
private readonly FileInfo _tempFileForExe = null;
private readonly FileInfo _exe = null;
public SumatraWrapper()
{
_exe = ExtractExe();
}
public SumatraWrapper(FileInfo tempFileForExe)
: this()
{
_tempFileForExe = tempFileForExe ?? throw new ArgumentNullException(nameof(tempFileForExe));
}
private FileInfo ExtractExe()
{
string tempfile =
_tempFileForExe != null ?
_tempFileForExe.FullName :
Path.GetTempFileName() + ".exe";
FileInfo exe = new FileInfo(tempfile);
byte[] bytes = Properties.Resources.SumatraPDF;
using (FileStream fs = exe.OpenWrite())
{
fs.Write(bytes, 0, bytes.Length);
}
return exe;
}
public bool Print(FileInfo file, string printerName)
{
string arguments = $"-print-to "{printerName}" "{file.FullName}"";
ProcessStartInfo processStartInfo = new ProcessStartInfo(_exe.FullName, arguments)
{
CreateNoWindow = true
};
using (Process process = Process.Start(processStartInfo))
{
process.WaitForExit();
return process.ExitCode == 0;
}
}
#region IDisposable Support
private bool disposedValue = false; // To detect redundant calls
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
// TODO: dispose managed state (managed objects).
}
// TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
// TODO: set large fields to null.
try
{
File.Delete(_exe.FullName);
}
catch
{
}
disposedValue = true;
}
}
// TODO: override a finalizer only if Dispose(bool disposing) above has code to free unmanaged resources.
// ~PdfToPrinterWrapper() {
// // Do not change this code. Put cleanup code in Dispose(bool disposing) above.
// Dispose(false);
// }
// This code added to correctly implement the disposable pattern.
public void Dispose()
{
// Do not change this code. Put cleanup code in Dispose(bool disposing) above.
Dispose(true);
// TODO: uncomment the following line if the finalizer is overridden above.
// GC.SuppressFinalize(this);
}
#endregion
}
5(享受从代码中打印pdf文件。
像这样使用:
FileInfo file = new FileInfo(@"c:Sandboxdummy file.pdf");
SumatraWrapper pdfToPrinter =
new SumatraWrapper();
pdfToPrinter.Print(file, "My Printer");
@ECHO off set "dir1=C:TicketDownload"
FOR %%X in ("%dir1%*.pdf") DO ( "C:Program Files (x86)AdobeReader 9.0ReaderAcroRd32.exe" /t "%%~dpnX.pdf" "Microsoft XPS Document Writer" )
FOR %%X in ("%dir1%*.pdf") DO (move "%%~dpnX.pdf" p/)
试试这个..可能是您有一些其他版本的阅读器,所以这就是问题所在。
今天我正在寻找这个解决方案,我尝试了 PDFtoPrinter,我遇到了一个问题(我尝试打印的 PDF 表明他们使用了不正确的纸张尺寸,这挂起了打印作业,并且在解决之前没有其他打印(。 在我努力寻找替代方案的过程中,我想起了GhostScript和与之相关的实用程序。 我发现GSView 及其相关程序 GSPrint (参考 https://www.ghostscript.com/(。 两者都需要GhostScript(https://www.ghostscript.com/(,但是当安装了所有组件时,GSPrint完美地工作,我能够创建一个计划任务,在一夜之间自动打印PDF。
另一种"开箱即用"的解决方案
FOR %X in ("*.pdf") DO (C:WindowsSystem32print.exe /d:"\printername" "%X.pdf")
编辑:正如"huysentruitw"所提到的,这仅适用于txt文件!不好意思!
当我仔细检查时,我意识到我正在使用GhostScript,正如"多元宇宙IT"所建议的那样。它看起来像这样:
"C:Program Files (x86)gsgsbingswin32c.exe" -dPrinted -dBATCH -dNOPAUSE -dNOSAFER -q -dNumCopies=1 -sDEVICE=mswinpr2 -sOutputFile="%printer%My-Printer-Name" "c:My-Pdf-File.pdf"