如何从Web服务打印HTML文档?
我想从C#web服务打印HTML。 Web浏览器控件过度使用,并且在服务环境中运行不正常,在安全性非常严格的系统上也不能很好地运行。有什么免费的.NET
库可以支持打印基本的HTML页面吗?这是我迄今为止的代码,它无法正常运行。如何从Web服务打印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();
}
从UI类型的线程中调用它时工作正常,但从服务类型的线程调用时没有任何反应。更改Print()
到产生以下的IE脚本错误:
Error: 'dialogArguments.___IE_PrintType' is null or not an object
URL: res://ieframe.dll/preview.dlg
,并出现一个小空打印预览对话框。
我知道Visual Studio本身(至少在2003版本中)直接引用IE dll来呈现“设计视图”。
这可能是值得研究的。
否则,我想不出任何超出Web浏览器控件的东西。
可以在命令行使用下列打印:
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();
}
注:这只适用于Windows 2000及以上版本,我认为。
很好的答案 - 打算让它接受,然后运行我的测试。似乎DLL仍然弹出“打印”对话框,并且因为这是作为无人参与的Windows服务运行的,所以我们需要以某种方式绕过。我已经非常精疲力尽Google,而且我的智慧已经结束了。 – 2009-08-24 16:25:54
我不知道具体的工具,但有一些实用程序记录/重放点击。换句话说,您可以在打印对话框中自动执行“点击”。 (我知道这是一个黑客,但当所有其他都失败...)
也许这将有所帮助。 http://www.codeproject.com/KB/printing/printhml.aspx 还不能确定你想什么线程访问从浏览器的控制,但它需要STA
注 - 在链接中提到的项目并允许您导航到一个页面,并没有显示出执行打印打印对话框。
简单!分裂您的问题分为两个简单的部分:
- render the HTML to PDF
- 打印的PDF(SumatraPDF)
-print-to-default $file.pdf
prints a PDF file on a default printer-print-to $printer_name $file.pdf
prints a PDF on a given printer
请选择最佳答案,谢谢。 – mruanova 2017-08-22 22:26:15
@mruanova没有任何答案最后工作我试了他们。如果你有一些作品让我们知道。 – 2017-09-23 20:49:05