loai_maane Ответов: 0

Печать отчета RDCL C#


Привет,
Я использую приведенный ниже код для прямой печати отчета RDCL ,
но проблема в том , что печатные страницы сидят, это не то же самое, что я выбираю в свойствах отчета (A4), я пытался изменить ширину и высоту страницы в информации об устройстве, но та же проблема . пожалуйста, есть идеи?

Что я уже пробовал:

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();
    }
 protected void print_Click1(object sender, EventArgs e)
    {
       
           LocalReport report = new LocalReport();
            report.ReportPath = @"Doctor_form.rdlc";
            report.SetParameters(parameters);
            Export(report);
            Print();}

Vipin_Arora

Вы работаете над Windows forms, ASP.NET или Cshtml?
Также проверьте, существует ли проблема только во время печати с вашим приложением или это проблема принтера/драйвера

loai_maane

Привет дорогая ,
я использую asp.net.
я попытался распечатать отчет с помощью кнопки печати в окне просмотра отчетов, это нормально, печатная страница была формата А4, но с помощью кода печатная страница была огромной и печаталась на 4 листах бумаги

loai_maane

уважаемый, если я рендеринг как PDF,должен ли мой код создавать PDF физически в файле программы для печати сгенерированного PDF?

alexvw

Привет,

Код, который вы опубликовали, похоже, является копипастой выдержкой из "пошагового руководства: печать локального отчета без предварительного просмотра" (https://msdn.microsoft.com/en-us/library/ms252091.aspx).

Поскольку она не является полной, было бы довольно трудно для кого-то предложить полезную помощь. Тот факт, что указанное пошаговое руководство предназначено для консольного приложения, не должен быть неудобным.

Пожалуйста, поделитесь всем соответствующим кодом и сообщениями об ошибках, которые вы можете получить с сообществом, чтобы вы могли получить адекватную помощь.

0 Ответов