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

Local - Printing Margins Are Off By ~1/8 Inch

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

Printing A Database To A Printer

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

Problem With Printing Report Directly To Printer

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

Strange Printing Issue With Default Printer

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

PRINTING REPORTS

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

Printing Reports

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

Printing Reports Is Very Slow.

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

Printing Footer In Reports

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

Problem Printing Reports

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

Generating And Printing Reports

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

Settings For Printing Reports

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

Printing Reports Programatically With CR2005?

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

Issue With Printing/exporting Reports

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

Printing SQL 2005 Reports In A4 Size Format

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

Printing SSRS Reports Using Report Manager

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

Linked Reports Lose Original Layout For Printing

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

Reporting Services :: Printing Reports On Separate Pages

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

Reporting Services :: Printing Reports With Microsoft Edge

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

Reports Are When Printed SQL Server Report Is Printing Extra Pages

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

Transact SQL :: Printing Report - Capture Actual Pages In A Duplex Printing Job

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

Landscape Printing From Report Manager Not Printing All Displayed Columns On Each Page

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

Margins In Reporting Services

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

Is It Possible To Set Page Margins At Runtime?

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

SQL Server Reporting Service+PDF Margins

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

Linked Report Margins (2005 Edition)

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

Printer Problem

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

Routing File To Printer

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

Define Printer In Report

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

Count Number Of Pages Sent To Printer

Jan 8, 2007

Is there anyway to count number of pages sent to the printer, to track them?

View 2 Replies View Related

Printer Delivery Sample Modified

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

Reporting Services Printer Problem

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

HOW TO: Print A Report Directly To A Printer

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







Copyrights 2005-15 www.BigResource.com, All rights reserved