【发布时间】:2017-08-17 08:22:43
【问题描述】:
大家好,谁能帮助我如何使用控制按钮打印收据?
这是我的屏幕截图 [1]" https://ibb.co/kfk8SF
如果我点击“保存打印”按钮,会出现一个预览对话框 我想要的只是通过单击按钮自动打印我想要的报告并且没有出现对话框
【问题讨论】:
标签: vb.net rdlc reportviewer
大家好,谁能帮助我如何使用控制按钮打印收据?
这是我的屏幕截图 [1]" https://ibb.co/kfk8SF
如果我点击“保存打印”按钮,会出现一个预览对话框 我想要的只是通过单击按钮自动打印我想要的报告并且没有出现对话框
【问题讨论】:
标签: vb.net rdlc reportviewer
您可以先获取默认打印机名称(在打开报表查看器之前):
System.Drawing.Printing.PrinterSettings settings = new System.Drawing.Printing.PrinterSettings();
defaultPrinterName = settings.PrinterName;
打印时,将您的打印机名称分配给PrintDocument 的PrinterName 属性:
LocalReport rep = new LocalReport();
//set your data and parameters here
//...
rep.Refresh();
ExportLandscape(rep);
PrintDocument printDoc = new PrintDocument();
PrinterSettings ps = new PrinterSettings();
ps.PrinterName = defaultPrinterName;
printDoc.PrinterSettings = ps;
printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
m_currentPageIndex = 0;
printDoc.Print();
处理实际打印的事件:
//this has to declared somewhere at the "top":
private IList<Stream> m_streams;
private int m_currentPageIndex;
private void PrintPage(object sender, PrintPageEventArgs ev) {
Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]);
// Adjust rectangular area with printer margins.
Rectangle adjustedRect = new Rectangle(
ev.PageBounds.Left - (int)ev.PageSettings.HardMarginX,
ev.PageBounds.Top - (int)ev.PageSettings.HardMarginY,
ev.PageBounds.Width,
ev.PageBounds.Height);
// Draw a white background for the report
ev.Graphics.FillRectangle(Brushes.White, adjustedRect);
// Draw the report content
ev.Graphics.DrawImage(pageImage, adjustedRect);
// Prepare for the next page. Make sure we haven't hit the end.
m_currentPageIndex++;
ev.HasMorePages = (m_currentPageIndex < m_streams.Count);
}
这是创建打印文档的代码:
private void ExportPortrait(LocalReport report) {
string deviceInfo =
@"<DeviceInfo>
<OutputFormat>EMF</OutputFormat>
<PageWidth>8.5in</PageWidth>
<PageHeight>11in</PageHeight>
<MarginTop>0.5in</MarginTop>
<MarginLeft>0.5in</MarginLeft>
<MarginRight>0.5in</MarginRight>
<MarginBottom>0.5in</MarginBottom>
</DeviceInfo>";
Warning[] warnings;
m_streams = new List<Stream>();
report.Render("Image", deviceInfo, CreateStream, out warnings);
foreach (Stream stream in m_streams)
stream.Position = 0;
}
private void ExportLandscape(LocalReport report) {
string deviceInfo =
@"<DeviceInfo>
<OutputFormat>EMF</OutputFormat>
<PageWidth>11in</PageWidth>
<PageHeight>8.5in</PageHeight>
<MarginTop>0.5in</MarginTop>
<MarginLeft>0.5in</MarginLeft>
<MarginRight>0.5in</MarginRight>
<MarginBottom>0.5in</MarginBottom>
</DeviceInfo>";
Warning[] warnings;
m_streams = new List<Stream>();
report.Render("Image", deviceInfo, CreateStream, out warnings);
foreach (Stream stream in m_streams)
stream.Position = 0;
}
private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek) {
Stream stream = new MemoryStream();
m_streams.Add(stream);
return stream;
}
您可以使用 this 之类的东西将代码转换为需要的 vb.net。
【讨论】: