我想从 c # web 服务打印 HTML。 网页浏览器控制不太好,在服务环境中不能很好地运行,在安全约束非常严格的系统中也不能很好地运行。 有没有什么免费的.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();}
当从 UI-type线程调用时,这种方法管用,但是当从服务类型线程调用时,并没有什么卵用。将 Print()更改为ShowPrintPreviewDialog()会产生以下 IE 脚本错误:
Error: dialogArguments.___IE_PrintType is null or not an object.
URL: res://ieframe.dll/preview.dlg
您可以使用以下命令行打印:
rundll32.exe %WINDIR%\System32\mshtml.dll,PrintHTML "%1"
Rundll32.exe% windr% 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及以上版本。
我知道 Visual Studio 本身(至少在2003年版本中)直接引用 IE dll 来呈现“设计视图”。这也许值得深入研究。否则,除了 Web 浏览器的control,我想不出别的东西。
小菜一碟! 把你的问题分成两个简单的部分:
1. 将 HTML 转换为 PDF 格式
2. 列印 PDF 文件(SumatraPDF)
• -print-to-default $file.pdf prints a PDF file on a default
• -print-to $printer_name $file.pdf prints a PDF on a given
如果你的预算是3000美元,看这个PrinceXML
它可以将 HTML 转换为 PDF 格式,在服务环境中运行良好,并且支持高级特性,比如不会在表格单元格中间破坏页面(目前很多浏览器都不支持)。