C# 在Awesomium中打印到打印机?
如何在Awesomium中将window.print()事件处理为实际打印(而不是打印为PDF)?我知道它将使用WebView.PrintRequest事件,但我不知道如何做到这一点C# 在Awesomium中打印到打印机?,c#,printing,awesomium,C#,Printing,Awesomium,如何在Awesomium中将window.print()事件处理为实际打印(而不是打印为PDF)?我知道它将使用WebView.PrintRequest事件,但我不知道如何做到这一点 Awesomium不支持打印到打印机设备。相反,Awesomium支持打印到PDF文件 “正确”的方法 我对在Windows中打印的有限理解是,您通常需要使用 GDI+图形表面传递到打印事件的自定义事件处理程序中。很好地提供了一个示例实现 我想人们可以使用Awesomium.NETSDK实现这种较低级别的打印,但是
Awesomium不支持打印到打印机设备。相反,Awesomium支持打印到PDF文件 “正确”的方法 我对在Windows中打印的有限理解是,您通常需要使用 GDI+图形表面传递到打印事件的自定义事件处理程序中。很好地提供了一个示例实现 我想人们可以使用Awesomium.NETSDK实现这种较低级别的打印,但是,这可能是一场没有支持的艰苦战斗 来自Awesomium的开发者 选择 一个体面的“黑客”可能是将Awesomium的打印到PDF功能与打印PDF文件粘在一起。我可以想出至少3种方法从C#打印PDF文件:
window.Print()
使用系统;
使用系统诊断;
使用系统图;
使用系统、绘图、打印;
使用System.IO;
使用System.Runtime.InteropServices;
使用System.Windows.Forms;
使用冬虫夏草;
名称空间演示
{
静态类程序
{
[状态线程]
静态void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Run(newprinterdemo());
}
}
公共类PrinterDemo:表单
{
私有Awesomium.Windows.Forms.WebControl WebControl;
私人打印机设置打印机设置;
私有字符串printerName;
公共PrinterDemo()
{
初始化组件();
WindowState=FormWindowState.Maximized;
}
私有void InitializeComponent()
{
this.webControl=新建Awesomium.Windows.Forms.webControl();
这个.SuspendLayout();
//
//网络控制1
//
this.webControl.Dock=System.Windows.Forms.DockStyle.Fill;
this.webControl.Location=新系统.图纸.点(0,0);
this.webControl.Size=新系统图纸尺寸(784562);
this.webControl.Source=new System.Uri(“http://support.microsoft.com/kb/322091“,System.UriKind.Absolute);
this.webControl.TabIndex=0;
this.webControl.PrintRequest+=webControl\u PrintRequest;
this.webControl.PrintComplete+=webControl\u PrintComplete;
this.webControl.printfiled+=webControl\u printfiled;
//
//PrinterDemo
//
此.AutoScaleDimensions=新系统.Drawing.SizeF(6F,13F);
this.AutoScaleMode=System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize=新系统图尺寸(784562);
this.Controls.Add(this.webControl);
this.Name=“PrinterDemo”;
this.Text=“PrinterDemo”;
此选项为.resume布局(false);
}
///句柄`window.print()`事件
私有void WebControl_PrintRequest(对象发送方,PrintRequestEventArgs e)
{
这个.Print();
e、 已处理=正确;
}
///成功打印的事件处理程序
private void WebControl_PrintComplete(对象发送方,PrintCompleteEventTargets e)
{
//将文件打印到打印机上。
if(String.IsNullOrWhiteSpace(printerName))
{
返回;
}
foreach(e.Files中的字符串文件)
{
System.Diagnostics.Debug.Print(“打印文件{0}”,文件);
RawPrinterHelper.SendFileTopPrinter(printerName,文件);
}
}
///打印失败的事件处理程序
private void WebControl_PrintFailed(对象发送方,PrintOperationEventArgs e)
{
MessageBox.Show(“MyApp”,“打印失败”,MessageBoxButtons.OK,MessageBoxIcon.叹号);
}
///将PDF文件发送到打印机
私人作废打印()
{
打印对话框打印对话框;
int请求id;
字符串路径=System.IO.path.GetTempPath();
如果(!webControl.IsLive)
返回;
printerDialog=新建PrintDialog();
printerSettings=新的printerSettings();
printerDialog.PrinterSettings=PrinterSettings;
if(DialogResult.OK==printerDialog.ShowDialog(此))
{
printerName=printerDialog.PrinterSettings.printerName;
requestId=webControl.PrintToFile(路径,PrintConfig.Default);
}
}
}
公共类RawPrinterHelper
{
//结构和API偏差:
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
公共类DOCINFOA
{
[Marshallas(UnmanagedType.LPStr)]
公共字符串pDocName;
[Marshallas(UnmanagedType.LPStr)]
公共字符串pOutputFile;
[M]