TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
Sarathi J
1.7k
60
2.8k
C# WPF - RDLC Print directly to Printer - Collpases
Sep 27 2018 3:50 AM
I am using a ssrs client rdlc report (3-inch printer) in our WPF application. when the report rendered to.PDF and save it to a temporary path, and then prints the PDF means it works perfectly. But when I try to directly print the report to the printer, the report renders as Image (code for printing suggested from MSDN site), but prints only the half of the report in the printer and that too ugly to see as it looks like a drag.
Report Width : 3.5in Report Height: 7in
please take a look at the code below I use and suggest your opinions.
// RDLC InvoicePrintReport - Report Ready with Data Source and Parameters
Export(InvoicePrintReport);
Print();
//Report Printing Section
private
int
m_currentPageIndex;
private
IList<Stream> m_streams;
private
Stream CreateStream(
string
name,
string
fileNameExtension, System.Text.Encoding encoding,
string
mimeType,
bool
willSeek)
{
Stream stream =
new
MemoryStream();
m_streams.Add(stream);
return
stream;
}
private
void
Export(LocalReport report)
{
string
deviceInfo = @
"<DeviceInfo><OutputFormat>EMF</OutputFormat><PageWidth>3.5in</PageWidth><MarginTop>0.01in</MarginTop><MarginLeft>0.01in</MarginLeft><MarginRight>0.1in</MarginRight><MarginBottom>0.01in</MarginBottom></DeviceInfo>"
;
Microsoft.Reporting.WinForms.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
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;
//PaperSize pkCustomSize1 = new PaperSize("First custom size", 100, 200);
//printDoc.DefaultPageSettings.PaperSize = pkCustomSize1;
printDoc.Print();
}
}
private
void
PrintPage(
object
sender, PrintPageEventArgs ev)
{
System.Drawing.Imaging.Metafile pageImage =
new
System.Drawing.Imaging.Metafile(m_streams[m_currentPageIndex]);
// Adjust rectangular area with printer margins.
System.Drawing.Rectangle adjustedRect =
new
System.Drawing.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(System.Drawing.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);
}
Reply
Answers (
1
)
Based on multiple parameters report has to split to multiple
how to execute sub-reports for a SSRS report.