我正在尝试使用adobe reader静默打印pdf。 我从以下位置采取了这个例子:
http://www.codeproject.com/Tips/598424/How-to-Silently-Print-PDFs-using-Adobe-Reader-and
我能够根据需要使用我的localhost中的上述示例代码。
但是当我在服务器上部署我的应用程序时,我无法打印PDF。
在我的localhost on按钮点击事件中,我正在创建PDF并将其保存到一个位置并打印相同的内容。打开adobe窗口打开并打印PDF并自动退出。
同样在我的服务器中不起作用。我能够创建和保存PDF,但adobe没有打开和打印我的文件。我甚至没有得到任何异常/错误。它根本没有显示adobe窗口。
有没有人面临同样的问题。 在这方面有任何帮助。 提前谢谢。
答案 0 :(得分:0)
编辑:
如果您使用ASP.NET或一般IIS在Web服务器上运行,则新进程将在具有受限权限的Web服务器上执行。我指出你this answer可以解释你的问题的原因。
但是,您使用的代码不会打印任何错误消息。您可能无法访问AcroRd32.exe所在的目录。
让我们从您发布的文章中获取此功能:
public static Boolean PrintPDFs(string pdfFileName)
{
try
{
Process proc = new Process();
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.StartInfo.Verb = "print";
//Define location of adobe reader/command line
//switches to launch adobe in "print" mode
proc.StartInfo.FileName =
@"C:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe";
proc.StartInfo.Arguments = String.Format(@"/p /h {0}", pdfFileName);
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
if (proc.HasExited == false)
{
proc.WaitForExit(10000);
}
proc.EnableRaisingEvents = true;
proc.Close();
KillAdobe("AcroRd32");
return true;
}
catch
{
return false;
}
}
PrintPDFs 使用一个进程,.NET框架使用进程类调用该进程。在 StartInfo 选项中,您仔细查看了两个选项:
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
第一个将标准输出流重定向到您的应用程序,而第二个隐藏cmd窗口。前者可以方便地使用进程而不向用户显示命令窗口,但后者隐藏控制台窗口。主要的缺点是,如果你正在调试,你可能不会看到错误。
调试它的一种方法是将以下内容添加到行:
proc.StartInfo.RedirectStandardOutput = true;
proc.Start();
Console.WriteLine(proc.StandardOutput.ReadToEnd());
您可以查看的另一个属性是ExitCode。如果它大于零意味着您的进程退出并出现一些错误。
希望它有所帮助。答案 1 :(得分:0)
使用Acroread命令行参数或PDF JavaScript事件处理程序可以实现静默打印(当然,如果您的PDF生成器工具可以定义/注入PDF的OpenAction处理程序)。
请参阅http://pd4ml.com/cookbook/pdf_automated_printing.htm
使用JavaScript方法,您不受打印机驱动程序,网络名称或IP地址的约束。另一方面,可以禁用Acroread中的JavaScript,例如,通过公司安全策略。
答案 2 :(得分:0)
将此与 Ghostscript 一起使用,即 GNU:
ProcessStartInfo info = new ProcessStartInfo();
var FileName = @"C:\ResultadoFormulario_CClastMovements.pdf";
var pathPrinter = @"\\Server\namePrinter";
info.CreateNoWindow = true;
var pathGsw = @"path gswin64c here\";
info.WindowStyle = ProcessWindowStyle.Hidden;
string strCmdText = $"{pathGsw}gswin64c.exe -sDEVICE=mswinpr2 -dBATCH -dNOPAUSE -dNOPROMPT -dNoCancel -dPDFFitPage -sOutputFile=\"%printer%{direccionImpresora}\" \"{FileName}\"";
Process.Start("CMD.exe", strCmdText);