Печать отчета 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).
Поскольку она не является полной, было бы довольно трудно для кого-то предложить полезную помощь. Тот факт, что указанное пошаговое руководство предназначено для консольного приложения, не должен быть неудобным.
Пожалуйста, поделитесь всем соответствующим кодом и сообщениями об ошибках, которые вы можете получить с сообществом, чтобы вы могли получить адекватную помощь.