Új hozzászólás Aktív témák

  • NoMan

    csendes tag

    Sziasztok,

    Az alábbi osztály (MSDN-ről szedtem) segítségével kezdeményezem az elkészített, feltöltött RDLC nyomtatását Visual Studio 2012-ban. A gondom ezzel az, hogy az Export metódus report.render hívása 5 másodpercig is elszórakozik, mire elkészül, és valóban megkezdődik a nyomtatás, még abban az esetben is, ha csak 1 sornyi adatot kell rendelni és nyomtatni. Mitől lehet lassú ez a folyamat? Hogyan lehet ez gyorsítani? Előre is köszönöm a segítséget!

    public class Printer : IDisposable
    {
    private int m_currentPageIndex;
    private IList<Stream> m_streams;

    // Routine to provide to the report renderer, in order to
    // save an image for each page of the report.
    private Stream CreateStream(string name, string fileNameExtension, Encoding encoding, string mimeType, bool willSeek)
    {
    Stream stream = new FileStream(@"..\..\" + name + "." + fileNameExtension, FileMode.Create);
    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.5in</PageWidth>" +
    " <PageHeight>11in</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]);
    ev.Graphics.DrawImage(pageImage, ev.PageBounds);

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

    private void Print()
    {
    PrinterSettings printerSettings = new PrinterSettings();

    //string printerName = printerSettings.PrinterName;
    const string printerName = "Microsoft XPS Document Writer";

    if (m_streams == null || m_streams.Count == 0) return;

    PrintDocument printDoc = new PrintDocument();
    printDoc.PrinterSettings.PrinterName = printerName;
    if (!printDoc.PrinterSettings.IsValid)
    {
    string msg = String.Format("Can't find printer \"{0}\".", printerName);

    MessageBox.Show(msg, "Print Error");

    return;
    }
    printDoc.PrintPage += new PrintPageEventHandler(PrintPage);
    printDoc.Print();
    }

    // Create a local report for Report.rdlc, load the data,
    // export the report to an .emf file, and print it.
    public void Run(LocalReport report)
    {
    Export(report);

    m_currentPageIndex = 0;
    Print();
    }

    public void Dispose()
    {
    if (m_streams != null)
    {
    foreach (Stream stream in m_streams)
    stream.Close();

    m_streams = null;
    }
    }
    }

Új hozzászólás Aktív témák

Hirdetés