[英]Printing pdf without preview in c #
我正在尝试在 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
,但它会打印垃圾字符。
如果您的打印机在网络上并且您知道它是 IP 地址,则可以使用 TcpClient 将文件直接发送到打印机。 我已经让这个适用于我的打印机,但只对 PDF 进行了尝试,所以我不知道它对其他打印机/文件类型的效果如何。
您必须更改您的打印机设置,以便它使用 tcp 端口(在设备和打印机 select 您的打印机(单击),然后单击打印服务器属性,在打开的向导中您可以添加一个新的 ZB136EF15F6A06D86367 端口)。 您还必须将打印机设置为 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进程的window句柄,然后将其隐藏或使用进程类的windowstyle将其最小化。
是的,它会启动,因为您使用的是 Process.Start。
尝试“PrintTo”作为您的动词。 这应该禁用“打印预览”阶段。
如果您想静默打印 PDF,那么您需要使用正确的工具来完成这项工作。 在这种情况下,它不是 Adobe Reader,因为它总是会启动应用程序 window,它不会在静默模式下加载。
找到一个 PDF 库,它可以让您静默打印 PDF。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.