Chr*_*org 76 html c# printing web-services
我想从C#Web服务打印HTML.Web浏览器控件过度,在服务环境中无法正常运行,在安全性受到严格限制的系统上也无法正常运行.是否有任何类型的免费.NET库可以支持打印基本HTML页面?这是我到目前为止的代码,它运行不正常.
public void PrintThing(string document)
{
if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA)
{
Thread thread =
new Thread((ThreadStart) delegate { PrintDocument(document); });
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
else
{
PrintDocument(document);
}
}
protected void PrintDocument(string document)
{
WebBrowser browser = new WebBrowser();
browser.DocumentText = document;
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
Application.DoEvents();
}
browser.Print();
}
Run Code Online (Sandbox Code Playgroud)
从UI类型的线程调用时,这很好,但是从服务类型的线程调用时没有任何反应.更改Print()以ShowPrintPreviewDialog()产生以下IE脚本错误:
错误:
dialogArguments.___IE_PrintType为null或不是对象.网址:
res://ieframe.dll/preview.dlg
并出现一个小的空打印预览对话框.
ICR*_*ICR 32
您可以使用以下命令从命令行进行打印:
rundll32.exe%WINDIR%\ System32\mshtml.dll,PrintHTML"%1"
其中%1是要打印的html文件的文件路径.
如果您不需要从内存中打印(或者能够在临时文件中写入磁盘),您可以使用:
using (Process printProcess = new Process())
{
string systemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);
printProcess.StartInfo.FileName = systemPath + @"\rundll32.exe";
printProcess.StartInfo.Arguments = systemPath + @"\mshtml.dll,PrintHTML """ + fileToPrint + @"""";
printProcess.Start();
}
Run Code Online (Sandbox Code Playgroud)
注意这只适用于Windows 2000及以上版本.
简单!将您的问题分成两个更简单的部分:
-print-to-default $file.pdf在默认打印机上打印 PDF 文件-print-to $printer_name $file.pdf在给定的打印机上打印 PDF
| 归档时间: |
|
| 查看次数: |
14615 次 |
| 最近记录: |