打印RDCL报告C#

时间:2018-11-27 07:55:14

标签: c# asp.net

我正在使用以下代码直接打印RDCL报告, 但是打印页面中的问题,它与我在报表属性(A4)中选择的内容不同,我尝试更改设备信息中的页面宽度和高度,但同样打印的纸张过大并打印在4纸上。请知道吗?

private Stream CreateStream(string name,
  string fileNameExtension, Encoding encoding,
  string mimeType, bool willSeek)
{
    Stream stream = new MemoryStream();
    m_streams.Add(stream);
    return stream;
}
// Export the given report as an EMF (Enhanced Metafile) file.
private void Export(LocalReport report)
{
    string deviceInfo =
      @"<DeviceInfo>
            <OutputFormat>EMF</OutputFormat>
            <PageWidth>8.27in</PageWidth>
            <PageHeight>11.69in</PageHeight>
            <MarginTop>0.25in</MarginTop>
            <MarginLeft>0.25in</MarginLeft>
            <MarginRight>0.25in</MarginRight>
            <MarginBottom>0.25in</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;
}
// Handler for PrintPageEvents
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 Print()
{
    if (m_streams == null || m_streams.Count == 0)
        throw new Exception("Error: no stream to print.");
    PrintDocument printDoc = new PrintDocument();
    if (!printDoc.PrinterSettings.IsValid)
    {
        throw new Exception("Error: cannot find the default printer.");
    }
    else
    {
        printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
        m_currentPageIndex = 0;
        printDoc.Print();
    }
}
// Create a local report for Report.rdlc, load the data,
//    export the report to an .emf file, and print it.
private void Run()
{
    LocalReport report = new LocalReport();
    report.ReportPath = @"Doctor_form.rdlc";
    Export(report);
    Print();
}

受保护的无效print_Click1(对象发送者,EventArgs e)     {

       LocalReport report = new LocalReport();
        report.ReportPath = @"Doctor_form.rdlc";
        report.SetParameters(parameters);
        Export(report);
        Print();}

0 个答案:

没有答案