Bruce,
I am trying to do this:
Set my copies value to 3
start the first copy with a paper source (tray) as 4
when first copy is rendered, set paper source for
second copy to come from paper source 5.
When second copy is rendered, set paper source to come from 6 and that
is all. So that when printer actually begins the printjob it has been
sent, it prints three copies; one copy from each of the selected paper
trays (since we need a white paper copy, a yellow one and a pink one).
Here is my code so far:
class PrintReporttoLa serjet: Form1
{
PrintDocument pd = new PrintDocument() ;
// PrintReporttoLa serjet NeWrs = new PrintReporttoLa serjet();
// Form1 Form1Form = new Form1();
// Form1Form.Repor tingService rs = new ReportingServic e();
private byte[][] m_renderedRepor t;
private Graphics.Enumer ateMetafileProc m_delegate = null;
private MemoryStream m_currentPageSt ream;
private Metafile m_metafile = null;
int m_numberOfPages ;
private int m_currentPrinti ngPage;
private int m_lastPrintingP age;
public PrintReporttoLa serjet()
{
// Create proxy object and authenticate
//Console.WriteLi ne("Authenticat ing to the Web service...");
rs = new ReportingServic e();
rs.Credentials = System.Net.Cred entialCache.Def aultCredentials ;
}
public byte[][] RenderReport(st ring reportPath)
{
// Private variables for rendering
string deviceInfo = null;
string format = "IMAGE";
Byte[] firstPage = null;
string encoding;
string mimeType;
Warning[] warnings = null;
ParameterValue[] reportHistoryPa rameters = null;
string[] streamIDs = null;
Byte[][] pages = null;
///mine
// Build device info based on the start page
deviceInfo =
String.Format(@ "<DeviceInf o>" +
"<OutputFormat> {0}</OutputFormat>" +
"<Toolbar>False </Toolbar>" +
"<PageHeight>55 .82cm</PageHeight>" +
"<PageWidth>40. 26cm</PageWidth></DeviceInfo>","e mf");
// Prepare report parameter.
ParameterValue[] parameters = new ParameterValue[1];
parameters[0] = new ParameterValue( );
parameters[0].Name = "InvoiceNumber" ;
parameters[0].Value = Class1.inVoiceN umber;
//parameters[0].Value = "5440517";
//Exectute the report and get page count.
try
{
// Renders the first page of the report and returns streamIDs for
// subsequent pages
//firstPage = rs.Render(
firstPage = rs.Render(
reportPath,
format,
null,
deviceInfo,
parameters,
null,
null,
out encoding,
out mimeType,
out reportHistoryPa rameters,
out warnings,
out streamIDs);
// The total number of pages of the report is 1 + the streamIDs
m_numberOfPages = streamIDs.Lengt h + 1;
pages = new Byte[m_numberOfPages][];
// The first page was already rendered
pages[0] = firstPage;
for (int pageIndex = 1; pageIndex < m_numberOfPages ; pageIndex++)
{
// Build device info based on start page
deviceInfo =
String.Format(@ "<DeviceInfo><O utputFormat>{0} </OutputFormat><S tar
tPage>{1}</StartPage></DeviceInfo>","e mf", pageIndex+1);
pages[pageIndex] = rs.Render(
reportPath,
format,
null,
deviceInfo,
parameters,
null,
null,
out encoding,
out mimeType,
out reportHistoryPa rameters,
out warnings,
out streamIDs);
}
}
catch (SoapException ex)
{
//Console.WriteLi ne(ex.Detail.In nerXml);
using (StreamWriter sw = new StreamWriter("T estFile.txt"))
{
sw.Write(ex.Det ail.InnerXml);
}
}
finally
{
//Console.WriteLi ne("Number of pages: {0}", pages.Length);
}
return pages;
}
public bool PrintReport(str ing printerName)
{
int PDcounter;
// for (PDcounter = 0; PDcounter <= 2; Class1.counter+ +)
// {
this.RenderedRe port = this.RenderRepo rt(@"/Report
PackingList1/Report1");
//D:\Inetpub\wwwr oot\PackingList \Report Project1\printt est
//Report/PackingList1/Report1
PrintReporttoLa serjet f1 = new PrintReporttoLa serjet();
try
{
// Wait for the report to completely render.
if(m_numberOfPa ges < 1)
return false;
PrinterSettings printerSettings = new PrinterSettings ();
printerSettings .MaximumPage = m_numberOfPages ;
printerSettings .MinimumPage = 1;
printerSettings .PrintRange = PrintRange.Some Pages;
printerSettings .FromPage = 1;
printerSettings .ToPage = m_numberOfPages ;
printerSettings .Copies = 3;
printerSettings .PrinterName = printerName;
pd.DefaultPageS ettings.PaperSo urce =
pd.PrinterSetti ngs.PaperSource s[comboBox1.Selec tedIndex = 4];
m_currentPrinti ngPage = 1;
m_lastPrintingP age = m_numberOfPages ;
pd.PrinterSetti ngs = printerSettings ;
// Print report
pd.PrintPage += new PrintPageEventH andler(this.pd_ PrintPage);
try
{
///Print from tray 2
///Print from tray 3
///Print from tray 4
// Set the paper source based upon the selection in the combo box.
// pd.DefaultPageS ettings.PaperSo urce =
// pd.PrinterSetti ngs.PaperSource s[comboBox1.Selec tedIndex =
Class1.counter];
int pCounter = 0;
// while (pd.Print())
// {
// pCounter++;
//
// if(printerSetti ngs.Copies == 2)
// {
// pd.DefaultPageS ettings.PaperSo urce =
// pd.PrinterSetti ngs.PaperSource s[comboBox1.Selec tedIndex = 5];
//
// }
// if(printerSetti ngs.Copies == 1)
// {
// pd.DefaultPageS ettings.PaperSo urce =
// pd.PrinterSetti ngs.PaperSource s[comboBox1.Selec tedIndex = 6];
//
// }
//
// if(pCounter == 6)
// break;
//
// }
pd.Print();
//Wmis.PStatus();
}
catch(Exception ee)
{
MessageBox.Show (ee.Message);
}
finally
{
// PrintDirect.Clo sePrinter(lhPri nter);
}
}
catch(Exception ex)
{
MessageBox.Show (ex.Message);
}
finally
{
// Clean up goes here.
}
// if(PDcounter == 2)
// break;
// }
return true;
}
private void pd_PrintPage(ob ject sender, PrintPageEventA rgs ev)
{
ev.HasMorePages = false;
if (m_currentPrint ingPage <= m_lastPrintingP age &&
MoveToPage(m_cu rrentPrintingPa ge))
{
// Draw the page
ReportDrawPage( ev.Graphics);
// If the next page is less than or equal to the last page,
// print another page.
if (++m_currentPri ntingPage <= m_lastPrintingP age)
ev.HasMorePages = true;
}
}
// Method to draw the current emf memory stream
private void ReportDrawPage( Graphics g)
{
if(null == m_currentPageSt ream || 0 == m_currentPageSt ream.Length ||
null ==m_metafile)
return;
lock(this)
{
// Set the metafile delegate.
int width = m_metafile.Widt h;
int height= m_metafile.Heig ht;
m_delegate = new Graphics.Enumer ateMetafileProc (MetafileCallba ck);
// Draw in the rectangle
Point[] points = new Point[3];
Point destPoint = new Point(0, 0);
Point destPoint1 = new Point(width, 0);
Point destPoint2 = new Point(0, height);
points[0]=destPoint;
points[1]=destPoint1;
points[2]=destPoint2;
g.EnumerateMeta file(m_metafile ,points, m_delegate);
//g.EnumerateMeta file(m_metafile ,destPoint , m_delegate);
// Clean up
m_delegate = null;
}
}
private bool MoveToPage(Int3 2 page)
{
// Check to make sure that the current page exists in
// the array list
if(null == this.RenderedRe port[m_currentPrinti ngPage-1])
return false;
// Set current page stream equal to the rendered page
m_currentPageSt ream = new
MemoryStream(th is.RenderedRepo rt[m_currentPrinti ngPage-1]);
// Set its postion to start.
m_currentPageSt ream.Position = 0;
// Initialize the metafile
if(null != m_metafile)
{
m_metafile.Disp ose();
m_metafile = null;
}
// Load the metafile image for this page
m_metafile = new Metafile((Strea m)m_currentPage Stream);
return true;
}
private bool MetafileCallbac k(
EmfPlusRecordTy pe recordType,
int flags,
int dataSize,
IntPtr data,
PlayRecordCallb ack callbackData)
{
byte[] dataArray = null;
// Dance around unmanaged code.
if (data != IntPtr.Zero)
{
// Copy the unmanaged record to a managed byte buffer
// that can be used by PlayRecord.
// dataArray = new byte[dataSize];
dataArray = new byte[dataSize];
Marshal.Copy(da ta, dataArray, 0, dataSize);
}
// play the record.
m_metafile.Play Record(recordTy pe, flags, dataSize, dataArray);
return true;
}
public byte[][] RenderedReport
{
get
{
return m_renderedRepor t;
}
set
{
m_renderedRepor t = value;
}
}
}
Thanks,
Trint
..Net programmer
tr***********@g mail.com
*** Sent via Developersdex
http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!