C#,在没有虚拟打印机的情况下,如何直接打印到文件,不输出到打印机

Lyu_KingT Lyu_KingT 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
首先列出我们处理打印的过程:

// 打印
protected void PrintDialog()
{
PrintDocument printDoc = new PrintDocument();
printDoc.PrintController = new System.Drawing.Printing.StandardPrintController();
printDoc.DocumentName = "报告-" + this.ReportNo;

if (PrinterName != "") // 如指定过打印机,则用指定的,一般使用默认打印机
printDoc.PrinterSettings.PrinterName = PrinterName;
if (!printDoc.PrinterSettings.IsValid)
{
string msg = String.Format("打印机不可用!! \"{0}\".", PrinterName);
Console.WriteLine(msg);
ErrMessage = msg;
return;
}

printDoc.PrintPage += new PrintPageEventHandler(PrintPage);

try
{
printDoc.Print(); // 开始打印
// ...

}
catch (Exception e)
{
if (!e.Message.Contains("成功")) // 对于提示"操作成功完成"的提醒,不做处理!
MessageBox.Show("现在不能打印," + e.Message);
}
}

// 页打印事件处理
protected void PrintPage(object sender, PrintPageEventArgs ev)
{
Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]); // 根据数据流,生成图形数据

ev.Graphics.DrawImage(pageImage, ev.PageBounds);

m_currentPageIndex++;
ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
}


这样处理将直接输出到打印机,我如果将PrintPage事件处理做如下修改,就能够输出到临时文件,但是在任务栏里面会出现打印机图标。
怎么才能够实现标题这个功能,又不会在任务栏上显示图标,谢谢


protected void PrintPage(object sender, PrintPageEventArgs ev)
{
Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]); // 根据数据流,生成图形数据

// 保存到临时文件并终止打印事件
pageImage.Save(@"c:\Swap\metaFile_caach.bmp");
ev.Cancel = true;

// ev.Graphics.DrawImage(pageImage, ev.PageBounds);

m_currentPageIndex++;
ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
}




最后附上稍微完整的代码,这是团队对里别人写的。

// 设置报告的设备信息
protected void SetDeviceInfo(LocalReport report)
{
Warning[] warnings;
m_streams = new List<Stream>();
m_currentPageIndex = 0;

try
{
report.Render("Image", DeviceInfo, CreateStream, out warnings);
}
catch (Exception e)
{
ErrMessage = e.Message + e.InnerException.Message;
System.Windows.Forms.MessageBox.Show(ErrMessage);
}

foreach (Stream stream in m_streams)
stream.Position = 0;
}

// 构建流
protected Stream CreateStream(string name, string fileNameExtension, Encoding enfcoding, string mimeType, bool willSeek)
{
Stream stream;
m_currentPageIndex++;
stream = new FileStream(ReportNo + "-" + m_currentPageIndex.ToString() + ".emf", FileMode.OpenOrCreate);
m_streams.Add(stream);
return stream;
}

// 打印报告
protected void PrintDialog()
{
if (m_streams == null || m_streams.Count == 0)
return;

m_currentPageIndex = 0; // 从首页开始打印

PrintDocument printDoc = new PrintDocument();
printDoc.PrintController = new System.Drawing.Printing.StandardPrintController();
printDoc.DocumentName = "报告-" + ReportNo + "-" + SpecimenXhSet;

if (PrinterName != "") // 如指定过打印机,则用指定的,一般使用默认打印机
printDoc.PrinterSettings.PrinterName = PrinterName;
if (!printDoc.PrinterSettings.IsValid)
{
string msg = String.Format("打印机不可用!! \"{0}\".", PrinterName);
Console.WriteLine(msg);
ErrMessage = msg;
return;
}
printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
try
{
printDoc.Print(); // 开始打印
Thread.Sleep(500);
foreach (Stream stream in m_streams) // 使用完后,一定要关闭文件流对象!!
{
stream.Close();
}
if (System.IO.File.Exists(ReportNo + ".emf")) // 删除报告图像文件名!
File.Delete(ReportNo + ".emf");
for (int j = 0; j <= m_currentPageIndex; j++)
{
if (System.IO.File.Exists(ReportNo + "-" + j.ToString() + ".emf")) // 删除报告图像文件名!
File.Delete(ReportNo + "-" + j.ToString() + ".emf");
}
}
catch (Exception e)
{
if (!e.Message.Contains("成功")) // 对于提示"操作成功完成"的提醒,不做处理!
MessageBox.Show("现在不能打印," + e.Message);
}
}

// 页打印事件处理
protected void PrintPage(object sender, PrintPageEventArgs ev)
{
Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]); // 根据数据流,生成图形数据

ev.Graphics.DrawImage(pageImage, ev.PageBounds);

m_currentPageIndex++;
ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
}
...全文

相关推荐

虚拟打印机开发过程,虚拟打印机开发快速入门

虚拟打印机开发过程详解虚拟打印机开发过程是指设计和实现虚拟打印机的过程,虚拟打印机是指可以模拟实际打印机的打印过程的软件。

yazhouyou

TinyPDF:轻巧便携的PDF虚拟打印机工具

PDF文件的加密技术是确保文件内容安全的一种重要手段。通过对PDF文件进行加密,可以有效防止未授权用户访问敏感信息。PDF加密通常包括两种类型:口令保护和证书加密。口令保护是最常见的加密方法,通过设置一个或两个密码来控制文件的访问权限。用户可以设置打开密码(Open Password),以限制谁可以打开并查看文件。另一个是所有者密码(Owner Password),它允许用户设置额外的权限,比如是否可以打印、编辑或复制文档内容。证书加密。

狗雄

使用PDF虚拟打印机简化文档转换

PDF虚拟打印机是一种软件程序,模拟真实打印机的功能,将任何支持打印的应用程序输出保存为PDF格式。不同于传统的打印机将内容物理打印出来,PDF虚拟打印机则是创建一个PDF文件。SmartPrint凭借其友好的用户界面、便捷的操作方式和周全的安全措施,成为了IT专业人士和企业的理想选择。无论是单个文件的转换还是大规模的批量操作,SmartPrint都能够以高度的安全性和效率满足用户的需求。

DataWizardess

虚拟打印机驱动源码(C DDK)

imgport"可能是虚拟打印机驱动的一个示例或者特定组件,它可能涉及到图像数据的处理和输出。在源码学习中,理解这个组件如何处理图像数据,将其转换为可打印格式,将是深入理解虚拟打印机驱动的关键。

x7iang

虚拟打印机.开发人员用 C# java c++ vc PB

在开发虚拟打印机时,需要考虑的关键点包括:1. 文档格式支持:确定要支持的输出格式,如PDF、XPS、图像文件等。2. 打印质量:优化图像和文本渲染,确保高清晰度。3.

linyunliang
评论 22
收藏 已收藏
分享
返回顶部
Lyu_KingT
C# 111,128 成员 642,536 内容