Printer Margins Are Not Respected When Printing Reports.
Aug 1, 2007
I believe this is an extension of the problem described here:
http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=115351
The service pack for Visual Studio has fixed the problem when I print my report from VS, however when I deploy and print my reports from the SSRS website they are still incorrect.
My SSRS server is running SQL 2005 with service pack 2 installed and the 9.00.3152 9333097 Cumulative hotfix package (build 3152) for SQL Server 2005 Service Pack 2 also applied.
I find it hard to believe the problem was fixed in the developer tool but NOT in the client tool?
How can I develop reports when the output from the developer tool is different to the output from the client tool?
For example I specify a box to be 5cm wide, and when printed from visual studio it is 5cm wide, but when printed from the SSRS website it is not 5cm wide!
Thanks.
View 6 Replies
ADVERTISEMENT
Jul 19, 2007
I am printing my reports from my local report viewr, and the margins are off by just a little bit. It looks like printing shifts the contents of the report 1/8 inch to the right, borking the margins.
Report body is 7" wide
Margins are .75" inch on all sides
Print Preview mode displays the report properly, centered
Output is similarly skewed on all printers (tried 4)
This is using the VS SP1 version of the RS dll's.
However, when I print the report I get it shifted to the right by 1/8 inch. This leaves me with a 7/8" margin on the left, and a 5/8" margin on the right.
Setting the margins to Left: 0.625, Right: 0.875 (5/8&7/8) actually causes it to print centered, so I know it is paying attention. When I do this, the print layout mode shows the contents shifted to the left 1/8", as expected.
I assume that people print using this control, or at least it was tested, so has anyone else seen this or is it a confirmed bug?
//5ive
View 1 Replies
View Related
Apr 12, 2001
Greetings,
1. I would like to print one of my database to a printer, how can I do that?
2. I would like to transfer one of my database to Microsoft Excel 97/2000, how can I do that?
Thank you very much.
View 6 Replies
View Related
Aug 22, 2007
Hello,
I am trying to get a SSRS 2005 report to print from my Visual Studio 2005 C++ application without using the ReportViewer to preview it first. What I have done is created a dll that I call into when I want to access a certain report and print it. While searching around on the internet I found an MSDN article about printing a report without previewing and it had an example in C# code. So I used that as a guide for my C++ code but I am still having problems with rendering the report properly so it can be printed. When I try to render a report using the "Image" format, my streamid string is empty but the byte array that the render routine returns is not. Here is the code I am using, what could be the problem here?
Note: m_Streams is define elsewhere as
array<String^>^ m_Streams = gcnew array<String^>(10);
void Print::Export(LocalReport^ report)
{
array<Warning^>^ Warn = gcnew array<Warning^>(10);
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>";
String^ mimeType;
String^ enc;
String^ FileExt;
array<Byte>^ bytes;
bytes = report->Render("Image",deviceinfo, mimeType, enc, FileExt, m_Streams,Warn); // m_Streams has a length of
return; // 0 after the Render
}
void Print:: PrintPage(System:: Object^ sender, System:: Drawing:: Printing:: PrintPageEventArgs^ ev)
{
Metafile^ pageImage = gcnew Metafile(m_Streams[m_CurrentPage]);
ev->Graphics->DrawImage(pageImage, ev->PageBounds);
m_CurrentPage++;
ev->HasMorePages = (m_CurrentPage < m_Streams->Length);
return;
}
void Print:rintRpt()
{
String^ printerName = "Default";
if (m_Streams->Length < 0)
return;
PrintDocument^ printDoc = gcnew PrintDocument();
if (!printDoc->PrinterSettings->IsValid) {
return;
}
printDoc->PrintPage += gcnew PrintPageEventHandler(this, &Print:: PrintPage);
printDoc->Print();
return;
}
void Print::Run()
{
LocalReport^ report = gcnew LocalReport();
DataSet^ ds = gcnew DataSet();
LoadData(ds);
report->ReportPath = "c:\bmi\bulrpt\Report1.rdlc";
ReportDataSource^ RDS = gcnew ReportDataSource();
RDS->Name = "DataSet1_Subject";
RDS->Value = ds->Tables["Subject"];
report->DataSources->Add(RDS);
Export(report);
PrintRpt();
return;
}
DataTable^ Print:: LoadData(DataSet^ ds)
{
System:: String ^ConnStr = "SELECT * FROM Subject";
SqlConnection^ conn = gcnew SqlConnection("Data Source=JOE-PC\BMIMSDESERVER; Initial Catalog=stx52013;Integrated Security = TRUE");
SqlCommand^ command = gcnew SqlCommand(ConnStr, conn);
SqlDataAdapter^ adapt = gcnew SqlDataAdapter(command);
adapt->TableMappings->Add("Table", "Subject");
conn->Open();
adapt->Fill(ds);
return ds->Tables["Subject"];
}
View 2 Replies
View Related
Feb 1, 2007
Very strange problem here with Reporting Services SQL 2005 SP1 with latest patch KB 918222 on Windows Server 2003 SP1. The clients PC are Windows XP both SP1 and SP2 and that's not affecting our problems.
When my default printer is set to the "Printer 1" (HP LaserJet 9000), when i look a report's into the Report Viewer and i click on the print button (printer image button that use the ActiveX RSClientPrint), i let the default printer to "Printer 1". In this case, the report is printed correctly.
Again with my default printer set to "Printer 1", i look the same report into the Report Viewer and i click on the print button again. This time i select another printer "Printer 2" (an older HP LaserJet 8000 DN) and the report is printed correctly.
Now the problem is when i set the "Printer 2" as default printer. If i go to the Report Viewer and i click on the print button for the same report that was printed correctly before, now the report seem's to be ok into the preview before i print, but when i send the job to the "Printer 2" the report require a unknown paper format, so the "Printer 2" ask paper into the tray 1 (manual feed) and the result of the printed report is not good. The right and the bottom seem's to be cutted. I tried to reduce the report dimension without good results. The report is always cutted to right and bottom and the printer ask paper into the tray 1 (unknown paper).
Is't not the end, if i print the same report on the "Printer 1" when the default printer is "Printer 2", the report is printed correctly.
I have tried to use another printer than the "Printer 2" to see if the problem is the printer. I tried the "Printer 3" (HP LaserJet 9050) as default printer, i print the report on this one and i have the same problem than with the "Printer 2". And if i set "Printer 1" as default and i print on the "Printer 3" the report is printing correctly.
For all the printers i have the latest drivers. The same problem is occuring on all other PC other than mine.
We have checked the printers configuration and all seem's to have the same configuration.
Can this be a bug with the ActiveX RSClientPrint or what ?
Note that all previews before printing are good with all printers, but with the "Printer 2" and "Printer 3" set to default, the printed report was not the one i saw into the Preview.
Below a link to a sample report that we have. All our reports have the same global dimensions.
http://pages.videotron.com/poulinst/report.zip
View 1 Replies
View Related
Jun 21, 2007
Is there a way to save print settings with the report so that settings such as the size of paper (A4, legal...) and layout (landscape, portrait) do not have to be specified by user everytime she wishes to print the report?
View 5 Replies
View Related
Feb 6, 2007
Hi
Iam able to print only the first page in the local reports!!!
Also, can I give the user the choice of using the local version or the enterprise version of the reports?
Any suggestions plz help
Thanks
contractor
View 1 Replies
View Related
May 10, 2006
We are using SQL 2005 and Reporting Services 2005. When we print reports they take so long to print that it is faster to export to PDF and then open and print the PDF. The cause appears to be the print job file size. In our old reporting tool one report had a file size of 1.22MB. The reporting services version of the same report is 2.82 GB. This takes 20 minutes for the printer to spool and process. Our users are understandably upset that a highly touted new technology requires a work around to print reports efficiently.
Is this file size normal? What can we do to make printing from SSRS feasible?
Any help would be greatly appreaciated.
View 6 Replies
View Related
Apr 16, 2008
hi,
I am using vb.net 2005 and sql server 2005 express edition.
I have used reports (*.rdlc) to print invoice. The invoice format is as follows:
'**********************************************************************************
Company Name
Party Name Invoice No.
Date
Item No. Description Qty Rate Amount
1
2
3
Taxes and Duties applicable
Amount In Words
For Company Name
'**********************************************************************************
All the data is placed in body section of report using different DataTable dataregions.
This is done as Taxes and Duties have multiple Rows and columns
but the location of printing of Taxes & duties Table on paper always changes depending on the no. of items in the invoice
this does not match with the pre printed stationery used for invoice printing.
How do i print the taxes & duties and all details below the ItemDetails Table always at the same location independent of
the no. of items in the invoice?
View 3 Replies
View Related
Oct 5, 2006
Hello,
When print reports in Reporting Services 2005, the default paper is "A4", but our reports have letter size, or even "A3" or "legal". Could we set a default paper for printing for each report?
thanks,
Pablo Orte
View 12 Replies
View Related
Jan 26, 2007
I've created a data flow where I have linked to an OLE DB Source then created a Flat File Destination. My file is now on my c: drive. I'd like to use that data to create a report, then print to a PDF. How would I do that?
Currently I was doing this in Access, but I am moving my processes to SSIS.
View 17 Replies
View Related
Sep 26, 2006
Hi....We are generating reports in Excel and PDF and the reports are accessed from a web app interface..
the problem is that when the users print a report generated in Excel from the web app it prints in a veritcal split on paper...This is because the width exceeds the paper width....We do not want to redesign reports ...Is there any method to squeeze Excel data into the availiable page width ( This happens automatically in PDF so issues with it).....Can it be done in code ?
View 3 Replies
View Related
Apr 4, 2007
Hello guys/girls:
I am new at reporting services, and would like to know I it is possible to print a reporting service report via code. I have done this with Crystal reports and would like to do it here. I even considered creating a ReportViewer object and setup the report, but not actually bind it to a control on a form. They will not see this report and I really dont want to put it in a report viewer. Any help is appreciated.
Thanks,
Barret
View 1 Replies
View Related
Feb 7, 2007
Dear ppl,
I have designed a report in Visual Studio 2005. The report have a couple of data regions (table and list) + some free text boxes.. The problem is when i print or export the report to pdf etc, it prints/exports a blank page after every page. e.g. if a report is of 2 pages, it will be printed/exported as Page 1 + Blank Page + Page 2 + Blank Page...
Can any one please tell me what am i missing here?
Awaiting,
View 1 Replies
View Related
Feb 13, 2008
Hi,
I had developed my reports using SQL 2005 reporting service. While crerating the report i set the page size to 8.27in Width x 11.69in Height.
I am calling this report in my aspx pages using report viewer.
But the problem is I can't able to set the size of the page to A4 size. When i set the size of the page to A4 while printing the page is divided into two pages.
Is there any way to override the print option in reportviewer where we can set the page size to A4 ?
Thanks and Regards,
Kalpesh Surve
View 6 Replies
View Related
Apr 28, 2008
Hello all,
When I print the reports ( or export to PDF) in Report Manager, my every alternate page is blank? If the report is just one page report, I get second page as blank when I print or export. The report prints in Landscape format( which should be fine given 8.5 inch height and 11 inch width).
I have played with the interactive Height and other height parameters but with no luck.
My current settings in the rdl file is:
<BottomMargin>0.5in</BottomMargin>
<RightMargin>0.5in</RightMargin>
<PageWidth>11in</PageWidth>
...
<Width>11in</Width>
<InteractiveHeight>1.5in</InteractiveHeight>
<Language>en-US</Language>
<TopMargin>0.5in</TopMargin>
<PageHeight>8.5in</PageHeight>
I would highly appreciate any suggestions.
Thanks
Phewa Taal
View 1 Replies
View Related
Jul 18, 2007
I have several reports that are set to landscape but then lose this layout when a linked report is created from the original report. I found the link below describing Brian Welcker's workaround and my question is where do you place the vb.net code he provided?
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=137986&SiteID=1
View 3 Replies
View Related
May 18, 2015
I must confess it has been a long time since I have done any SSRS reporting. I have the following SQL Statement (I will change it to a stored Procedure with parameters once I get the design done):
SELECT
rc.wo_id,
rc.process_id,
rc.item_id,
rc.lot_no AS full_lot_no,
rc.oper_id, rc.seq_no,
CAST(la.attr_value AS DECIMAL(12, 2)) AS weight,
[Code] ....
This gives me the data I want which looks like this:
Rework ID Ingot Oper ID Piece Rework
28 xxxxxx14 5 M88 Route 1
55 xxxxxxx15 5 B106 Route 2
79 xxxxxxx19 5 M68 Route 3
164 xxxxxx234 5 T16 Route 4
xxxxxx234 5 B82 Route 4
The grouping is on the Rework ID. Any of the pieces can be put on any rework route. As you can see, there are 4 routes, but 5 pieces. What I need is for each rework ID to be printed on its own paper even if there is only 1 record for the route. So I would expect 4 pieces of paper, 3 with 1 record, the 4th with two pieces. Is there a setting in the Tablix or report that I can set, or is there an expression I can use?
View 2 Replies
View Related
Aug 3, 2015
I can't print reports using Microsoft Edge from Windows 10 With IE 11 Works fine.I've tried regsvr32 with rsclientprint64.dll but it's not working.
View 8 Replies
View Related
Apr 5, 2008
Hi ,
I have developed some report in Sql Server Reporting services my Page orientation is portrait that is report height and width are 8.5 and 11 respectively and margins are set to 0.3 in when it is printed the pages are printed more that actually viewed Pages.
I need help from someone.
Thanks,
Nikhil
response2nikhil@hotmail.com
View 7 Replies
View Related
Aug 10, 2015
So I have been asked by our sustainability person to create report from our printing data that actually shows the number of pieces of paper used. This is easy enough for single-sided printing, but when printing in duplex the software does not take into account that 3 printing pages actually equates to 2 pieces of paper. I know this sounds simple, but say I have a print job record that looks like this:
Submitted printed total_pages duplex
8/10/2015 8/10/2015 42 1
This is a print jobs that if done correctly is actually 21 pages( duplex printing). If the job is say total_pages =5 I cant just divide by 2 because its actually using 3 pieces of paper ( yes they are wanting this data don't ask why). How can I adjust some sql to accurately depict 5 pages, front and back, as 3 pieces of paper?
View 2 Replies
View Related
May 3, 2007
I have deployed a report that is configured for landscape printing. It does print in landscape, however, only the first seven columns appear on the first page and the other five columns appear on the next page. Is there a method, like in print preview setup in MS Excel, where we can scale down the print (like to 80%) so all columns appear on each page?
Thanks!
View 3 Replies
View Related
Apr 22, 2008
Hi all,How to set Left,Right,Top Margins for Report at the time of Report Design.
Pls help me.
View 5 Replies
View Related
Jan 23, 2008
Hi,
I use Vs2008Pro. I can not set the correct margins for different printers.I set top margin to .5in .It works on a printer but doesnt on another one.I created a table for printers and save margin values that work for that specific printer and then load before printing.
So I need to set margin values before printing. I am using LocalReport rdlc files.
Thanks for help.
View 3 Replies
View Related
Oct 4, 2007
Hello AllDoes anyone know how can we set the margins (Left and Right margins) of the PDF which we export from the report server for the Sql Reports?
I cleart more hereSuppose I have a created a report using the SQL Reporting Service and then run the report from the report server itself. Here I got the option throuh which I can export report data in PDF format. does any one know how can we change the left and right margins for this PDF. Currently its default margins are very large.
Thanks In advance!!!
Warm Regards
Jitendra Jain09425349593
View 3 Replies
View Related
May 23, 2008
Hello, I've been trying the suggestions in the link below, and without success.
http://blogs.msdn.com/bwelcker/archive/2005/09/28/474898.aspx
This is supposed to allow us to build a linked report with these properties already set. This post works for a linked report that is already deployed. I want to set the properties on the report as I'm deploying the linked report. The instructions listed don't seem to work, it gives type errors and other related things when I try this approach, has anyone else had any luck doing this?
It says:
Error : rsElementTypeMismatch (The value provided for the PageHeight
field is not valid for its type. It cannot be converted from a string value to
the type that is required.)
What do I do to get around this? I tried changing it to a number, but no luck. I'm trying to do this in rs.exe:
Dim props(7) As [Property]
props(0) = New [Property]
props(0).Name = "Description"
props(1) = New [Property]
props(1).Name = "Hidden"
props(2) = New [Property]
props(2).Name = "PageHeight"
props(3) = New [Property]
props(3).Name = "PageWidth"
props(4) = New [Property]
props(4).Name = "BottomMargin"
props(5) = New [Property]
props(5).Name = "TopMargin"
props(6) = New [Property]
props(6).Name = "LeftMargin"
props(7) = New [Property]
props(7).Name = "RightMargin"
props = RS.GetProperties(basereportpath, props)
RS.CreateLinkedReport(name, parent, basereportpath, props)
View 1 Replies
View Related
Dec 7, 2005
Anybody please help me about the printer. I have a user want to print the letter from tray3, he slects the tray3, but it always print from tray2. I tried by myself. It is the same thing. Anybody can help me?
View 9 Replies
View Related
Mar 1, 2007
Is there a way to route a file directly to a printer? I have a process that creates PDF file in a known location and I would like to route them directly to the printer after creation.
View 2 Replies
View Related
Apr 17, 2007
I have a client who tells me in Access you could assign the printer directly to the report using PrtDevNames and PrtDevMode. Apparently it's true.
Can this be done in Reporting Services?
View 2 Replies
View Related
Jan 8, 2007
Is there anyway to count number of pages sent to the printer, to track them?
View 2 Replies
View Related
Jan 3, 2008
I am trying to modify the Printer Delivery Sample (RS 2005).
The original sample works fine: there was no any problem with deployment and running it.
What I need to accomplish is saving each delivered report as a local XML file.
For now (to start with), I'm just trying to read the rendered report as XML, and write the string (whatever the report contains) into a text file.
I added the following code to the PrintReport(...) method in the PrinterDeliveryProvider.cs file:
deviceInfo = String.Format(
System.Globalization.CultureInfo.InvariantCulture,
@"<DeviceInfo><OutputFormat>{0}</OutputFormat></DeviceInfo>",
"xml");
RenderedOutputFile[] testFiles = notification.Report.Render("XML", deviceInfo);
using (FileStream fs = File.Create(@"C: est est.txt"))
{
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine("******************");
try
{
Stream streamTemp = (Stream)testFiles[0].Data;
byte [] byteData = new byte[streamTemp.Length];
for (int i = 0; i < byteData.Length; i++)
{
byteData[ i ] = (byte)streamTemp.ReadByte();
}
using (MemoryStream ms = new MemoryStream(byteData))
{
string result = Convert.ToBase64String(ms.ToArray());
sw.WriteLine(result);
}
}
catch (Exception ex)
{
sw.WriteLine(ex.Message);
}
sw.Flush();
}
}
After I re-deploy the modified assembly and create a simple subscription, it fires, and there are no exceptions. But instead of some good-looking XML in the test.txt file, I get this:
******************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
[Actually, there are much more slashes, but I am showing just the beginning of the file - for brevity...]
When I run this report in ReportManager and export it as "XML file with report data", that XML exported file looks exactly as I expect it to. So, the data is there, in the report, but how do I extract it?
I've been trying to figure out why I am not getting the real content of the report in XML format.
Maybe, this line is wrong: RenderedOutputFile[] testFiles = notification.Report.Render("XML", deviceInfo);
AND/OR this line is wrong: deviceInfo = String.Format(................etc.
AND/OR I am using a wrong method for converting the Stream to a string.
...or, something else?
Could someone kindly help me figure out what I'm doing wrong, please?
View 3 Replies
View Related
Jan 8, 2007
I have a windows NT service, which prints to a laser printer programmatically using MSRS 2K. It works fine with a HP printer however when I try printing to a Lexmark Printer it does not always print. Somebody help. Microsoft please release a latest patch for MSRS 2K, its been so long since we had one.
View 2 Replies
View Related
Oct 18, 2006
The code below is a class file done in vb.net. The original idea came from reading this forum and some blogs.
To use the code below, you can create a windows application or service.
then create a class file and drop this code in it.
Remeber to reference the 2005 report execution service and also in the program settings include the path to your server.
IE: ReportExecutionService = http://localhost/ReportServer/ReportExecution2005.asmx or whatever your server URL is at.
Setup the public properties for printername (sharenames work fine), Number of copies and Report name.
That is all there is to it. This code is REALLY expandable to add more options.
Please remember to let me kow if you like this.
Imports System
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Drawing.Printing
Imports System.IO
Imports System.Web.Services.Protocols
Imports PrintReport.ReportExecution
Imports System.Runtime.InteropServices ' For Marshal.Copy
Namespace PrintReport
Friend Class app
Private m_sPrinterName As String
Private m_sReportName As String
Private m_sNumCopies As Integer
<STAThread()> _
Public Sub Main(ByVal args As String())
Dim pe As PrintMain = New PrintMain()
pe.PrintReport(m_sPrinterName, m_sReportName, m_sNumCopies)
End Sub
Public Property pPrinterName()
Get
Return m_sPrinterName
End Get
Set(ByVal value)
m_sPrinterName = value
End Set
End Property
Public Property pReportName()
Get
Return m_sReportName
End Get
Set(ByVal value)
m_sReportName = value
End Set
End Property
Public Property pNumCopies()
Get
Return m_sNumCopies
End Get
Set(ByVal value)
m_sNumCopies = value
End Set
End Property
End Class
Friend Class PrintMain
Private rs As New ReportExecutionService()
Private m_renderedReport As Byte()()
Private m_delegate As Graphics.EnumerateMetafileProc = Nothing
Private m_currentPageStream As MemoryStream
Private m_metafile As Metafile = Nothing
Private m_numberOfPages As Integer
Private m_currentPrintingPage As Integer
Private m_lastPrintingPage As Integer
Public Sub New()
' Create proxy object and authenticate
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
rs.Url = My.Settings.ReportExecutionService '"http://localhost/ReportServer/ReportExecution2005.asmx"
End Sub
Public Function RenderReport(ByVal reportPath As String) As Byte()()
' Private variables for rendering
Dim deviceInfo As String
Dim format As String = "IMAGE"
Dim firstPage As Byte() = Nothing
Dim encoding As String = ""
Dim mimeType As String = ""
Dim warnings As Warning() = Nothing
Dim reportHistoryParameters As ParameterValue() = Nothing
Dim streamIDs As String() = Nothing
Dim pages As Byte()() = Nothing
Dim historyID As String = Nothing
Dim showHideToggle As String = Nothing
Dim execInfo As New ExecutionInfo
Dim execHeader As New ExecutionHeader()
Dim SessionId As String
Dim extension As String = ""
rs.ExecutionHeaderValue = execHeader
execInfo = rs.LoadReport(reportPath, historyID)
'rs.SetExecutionParameters(parameters, "en-us")
SessionId = rs.ExecutionHeaderValue.ExecutionID
' Build device info based on the start page
deviceInfo = String.Format("<DeviceInfo><OutputFormat>{0}</OutputFormat></DeviceInfo>", "emf")
'Exectute the report and get page count.
Try
' Renders the first page of the report and returns streamIDs for
' subsequent pages
firstPage = rs.Render(format, deviceInfo, extension, encoding, mimeType, warnings, streamIDs)
' The total number of pages of the report is 1 + the streamIDs
m_numberOfPages = streamIDs.Length + 1
pages = New Byte(m_numberOfPages - 1)() {}
' The first page was already rendered
pages(0) = firstPage
Dim pageIndex As Integer = 1
Do While pageIndex < m_numberOfPages
' Build device info based on start page
deviceInfo = String.Format("<DeviceInfo><OutputFormat>{0}</OutputFormat><StartPage>{1}</StartPage></DeviceInfo>", "emf", pageIndex + 1)
pages(pageIndex) = rs.Render(format, deviceInfo, extension, encoding, mimeType, warnings, streamIDs)
pageIndex += 1
Loop
Catch ex As SoapException
'Console.WriteLine(ex.Detail.InnerXml)
Catch ex As Exception
'Console.WriteLine(ex.Message)
Finally
'Console.WriteLine("Number of pages: {0}", pages.Length)
End Try
Return pages
End Function
Public Function PrintReport(ByVal printerName As String, ByVal ReportName As String, Optional ByVal NumCopies As Integer = 0) As Boolean
Me.RenderedReport = Me.RenderReport(ReportName)
Try
' Wait for the report to completely render.
If m_numberOfPages < 1 Then
Return False
End If
Dim printerSettings As PrinterSettings = New PrinterSettings()
printerSettings.MaximumPage = m_numberOfPages
printerSettings.MinimumPage = 1
printerSettings.PrintRange = PrintRange.SomePages
printerSettings.FromPage = 1
printerSettings.ToPage = m_numberOfPages
printerSettings.Copies = NumCopies
printerSettings.PrinterName = printerName
Dim pd As PrintDocument = New PrintDocument()
m_currentPrintingPage = 1
m_lastPrintingPage = m_numberOfPages
pd.PrinterSettings = printerSettings
' Print report
'Console.WriteLine("Printing report...")
AddHandler pd.PrintPage, AddressOf pd_PrintPage
pd.Print()
Catch ex As Exception
'Console.WriteLine(ex.Message)
Finally
' Clean up goes here.
End Try
Return True
End Function
Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)
ev.HasMorePages = False
If m_currentPrintingPage <= m_lastPrintingPage AndAlso MoveToPage(m_currentPrintingPage) Then
' Draw the page
ReportDrawPage(ev.Graphics)
' If the next page is less than or equal to the last page,
' print another page.
If m_currentPrintingPage <= m_lastPrintingPage Then
m_currentPrintingPage += 1
ev.HasMorePages = True
End If
End If
End Sub
' Method to draw the current emf memory stream
Private Sub ReportDrawPage(ByVal g As Graphics)
If Nothing Is m_currentPageStream OrElse 0 = m_currentPageStream.Length OrElse Nothing Is m_metafile Then
Return
End If
SyncLock Me
' Set the metafile delegate.
Dim width As Integer = m_metafile.Width
Dim height As Integer = m_metafile.Height
m_delegate = New Graphics.EnumerateMetafileProc(AddressOf MetafileCallback)
' Draw in the rectangle
Dim destPoint As Point = New Point(0, 0)
g.EnumerateMetafile(m_metafile, destPoint, m_delegate)
' Clean up
m_delegate = Nothing
End SyncLock
End Sub
Private Function MoveToPage(ByVal page As Int32) As Boolean
' Check to make sure that the current page exists in
' the array list
If Nothing Is Me.RenderedReport(m_currentPrintingPage - 1) Then
Return False
End If
' Set current page stream equal to the rendered page
m_currentPageStream = New MemoryStream(Me.RenderedReport(m_currentPrintingPage - 1))
' Set its postion to start.
m_currentPageStream.Position = 0
' Initialize the metafile
If Not Nothing Is m_metafile Then
m_metafile.Dispose()
m_metafile = Nothing
End If
' Load the metafile image for this page
m_metafile = New Metafile(CType(m_currentPageStream, Stream))
Return True
End Function
Private Function MetafileCallback(ByVal recordType As EmfPlusRecordType, ByVal flags As Integer, ByVal dataSize As Integer, ByVal data As IntPtr, ByVal callbackData As PlayRecordCallback) As Boolean
Dim dataArray As Byte() = Nothing
' Dance around unmanaged code.
If data <> IntPtr.Zero Then
' Copy the unmanaged record to a managed byte buffer
' that can be used by PlayRecord.
dataArray = New Byte(dataSize - 1) {}
Marshal.Copy(data, dataArray, 0, dataSize)
End If
' play the record.
m_metafile.PlayRecord(recordType, flags, dataSize, dataArray)
Return True
End Function
Public Property RenderedReport() As Byte()()
Get
Return m_renderedReport
End Get
Set(ByVal value As Byte()())
m_renderedReport = value
End Set
End Property
End Class
end namespace
View 27 Replies
View Related