在c#中打印pdf没有预览
本文关键字:pdf 打印 | 更新日期: 2023-09-27 18:05:14
我试图在windows应用程序中使用c#打印。pdf和。tif文件。
打印成功,但我的问题是Adobe阅读器在后台打开pdf文件,windows打印对话框打开tif文件。
实际上我将使用一个服务来运行我的方法,所以这些过程应该默默地发生。我能做些什么来避免这种情况?
我的代码
public void PrintDocument(string filepath)
{
//PrintDialog pd = new PrintDialog();
printProcess.StartInfo.FileName = filepath;
//Also tried usecellexcecution=false;
//Redirect=true; something like this
printProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
printProcess.StartInfo.Verb = "Print";
printProcess.StartInfo.CreateNoWindow = true;
PrinterSettings setting = new PrinterSettings();
setting.DefaultPageSettings.Landscape = true;
printProcess.Start();
printProcess.CloseMainWindow();
}
我尝试使用MSDN中建议的RawprinterHelper
,但它打印垃圾字符。
获取pdf进程的窗口句柄,然后隐藏它或使用进程类的窗口样式最小化它。
是的,它被启动了,因为你使用的是Process.Start.
如果您的打印机在网络上,并且您知道它的IP地址,则可以使用TcpClient将文件直接发送到打印机。我已经在我的打印机上工作了,但只尝试过pdf,所以我不知道它在其他打印机/文件类型上的工作效果如何。
您必须更改打印机设置,使其使用tcp端口(在设备和打印机中选择您的打印机(单击),然后单击打印服务器属性,在打开的向导中可以添加新的tcp端口)。您还必须将打印机设置为raw而不是lpc设置
然后我使用了类似于下面的方法;
public void SilentPrint(string filePath, string printerIPAddress)
{
byte[] bytes = System.IO.File.ReadAllBytes(filePath);
var client = new TcpClient(printerIPAddress, 9100);//9100 is the default print port for raw data
using (var stream = client.GetStream())
{
stream.Write(bytes, 0, bytes.Length);
stream.Close();
}
}
如果你想默默地打印PDF,那么你需要使用合适的工具。在这种情况下,它不是Adobe Reader,因为它总是启动应用程序窗口,它不会以静默模式加载。
找到一个PDF库,它会让你默默地打印PDF。
尝试"PrintTo"作为你的动词。这将禁用"打印预览"阶段。