469,271 Members | 1,431 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,271 developers. It's quick & easy.

Printing a PDF in c# using a stream ... can it be done ?

Greetings community at large.

I have a c# app that generates a PDF file.
I have a printer that prints PDF natively.

But I cannot figure out how to programatically print in C# ... I can
generate the PDF as a file or a stream .. but cannot figure out how to send
either to the printer.

the only events I can use seem to be e.Graphics.DrawImage( ) or
e.Graphics.DrawString( )

is there a way to print a stream to a printer ? or a streamReader or
binaryStream ?

I thought that as a PDF is 'kind-of' a postscript file I could use
e.Graphics.DrawString( ) .. not surprisingly I got several pages of text ...

I can just drag and drop my PDF onto the printer it hops in the queue and
prints wonderfully ( no need to use acrobat reader to print) ..

Is perhaps this the way to go to 'programatically' push the file onto the
print queue ?

Regards.
Jan 22 '07 #1
8 38966
Hi,

Google search turns up many results.

One way
http://groups.google.com/group/micro...89cae8878ce652

Another way (similar, but more OO)
http://groups.google.com/group/micro...9334b9c4e9a58f

Printing in a server application such as ASP.NET
http://groups.google.com/group/micro...9a5d2f6d1a4add

Note: I have no idea if any of these actually work :)

--
Dave Sexton
http://davesexton.com/blog

"Microsoft News" <no*******@nospamSam.com.auwrote in message
news:ur**************@TK2MSFTNGP03.phx.gbl...
Greetings community at large.

I have a c# app that generates a PDF file.
I have a printer that prints PDF natively.

But I cannot figure out how to programatically print in C# ... I can
generate the PDF as a file or a stream .. but cannot figure out how to
send either to the printer.

the only events I can use seem to be e.Graphics.DrawImage( ) or
e.Graphics.DrawString( )

is there a way to print a stream to a printer ? or a streamReader or
binaryStream ?

I thought that as a PDF is 'kind-of' a postscript file I could use
e.Graphics.DrawString( ) .. not surprisingly I got several pages of text
...

I can just drag and drop my PDF onto the printer it hops in the queue and
prints wonderfully ( no need to use acrobat reader to print) ..

Is perhaps this the way to go to 'programatically' push the file onto the
print queue ?

Regards.


Jan 23 '07 #2
JE
If you are looking to send a bitstream directly to a printer, use the
following code to open the port and print directly. The port can be
LPT1, COM1, etc or \\host\printershare.

using System;
using System.IO;
using System.Runtime.InteropServices;

[DllImport("Kernel32.dll")]
static extern IntPtr CreateFile(string filename,
[MarshalAs(UnmanagedType.U4)]FileAccess fileaccess,
[MarshalAs(UnmanagedType.U4)]FileShare fileshare, int
securityattributes, [MarshalAs(UnmanagedType.U4)]FileMode
creationdisposition, int flags, IntPtr template);

public static void PrintDirect(string port, byte[] doc){
FileStream fs = new FileStream(CreateFile(port, FileAccess.ReadWrite,
FileShare.ReadWrite, 0, FileMode.Create, 0, IntPtr.Zero),
FileAccess.ReadWrite);
fs.Write(doc,0,doc.Length);
fs.Close();
}
Microsoft News wrote:
Greetings community at large.

I have a c# app that generates a PDF file.
I have a printer that prints PDF natively.

But I cannot figure out how to programatically print in C# ... I can
generate the PDF as a file or a stream .. but cannot figure out how to send
either to the printer.

the only events I can use seem to be e.Graphics.DrawImage( ) or
e.Graphics.DrawString( )

is there a way to print a stream to a printer ? or a streamReader or
binaryStream ?

I thought that as a PDF is 'kind-of' a postscript file I could use
e.Graphics.DrawString( ) .. not surprisingly I got several pages of text ...

I can just drag and drop my PDF onto the printer it hops in the queue and
prints wonderfully ( no need to use acrobat reader to print) ..

Is perhaps this the way to go to 'programatically' push the file onto the
print queue ?

Regards.

Jan 23 '07 #3
Bob
Thanks JE ... this looked quite hopeful .. when I pasted it in it compiles
and runs but doesnt seem to drive any printer.
I traced though it up to the fs.write( ) and doc is populated ..
what have I missed ????? at worst I hoped to get garbage out of the printer.

Below is my implimentation :

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;

namespace printing_directly_to_printer
{
class Program
{
[DllImport("Kernel32.dll")]
static extern IntPtr CreateFile(string filename,
[MarshalAs(UnmanagedType.U4)]FileAccess fileaccess,
[MarshalAs(UnmanagedType.U4)]FileShare fileshare, int
securityattributes, [MarshalAs(UnmanagedType.U4)]FileMode
creationdisposition, int flags, IntPtr template);

public static void PrintDirect(string port, byte[] doc)
{
FileStream fs = new FileStream(CreateFile(port,
FileAccess.ReadWrite,
FileShare.ReadWrite, 0, FileMode.Create, 0, IntPtr.Zero),
FileAccess.ReadWrite);
fs.Write(doc, 0, doc.Length);
fs.Close();
}

static void Main(string[] args)
{
string printerPort_Lexmark = "IP_10.254.1.90"; // ports
mapped on the local machine to the various printers
string printerPort_HPColor = "IP_10.254.1.11"; // the
lexmark will print PDF's natively, dont expect the HP
string printerPort_PDFCreator = "PDFCreator"; // to play
nicely .. but there for testing

FileStream myFS = new FileStream("c:\\document.pdf",
FileMode.Open, FileAccess.Read); // read in the PDF
BinaryReader myBR = new BinaryReader(myFS);

byte[] outData = new byte[myBR.BaseStream.Length];

for (int x = 0; x == myBR.BaseStream.Length; x++)
outData[x] = myBR.ReadByte();

PrintDirect(printerPort_Lexmark, outData);
}
}
}

regards Bob

"JE" <jg*******@gmail.comwrote in message
news:Op*************@TK2MSFTNGP05.phx.gbl...
If you are looking to send a bitstream directly to a printer, use the
following code to open the port and print directly. The port can be LPT1,
COM1, etc or \\host\printershare.

using System;
using System.IO;
using System.Runtime.InteropServices;

[DllImport("Kernel32.dll")]
static extern IntPtr CreateFile(string filename,
[MarshalAs(UnmanagedType.U4)]FileAccess fileaccess,
[MarshalAs(UnmanagedType.U4)]FileShare fileshare, int securityattributes,
[MarshalAs(UnmanagedType.U4)]FileMode creationdisposition, int flags,
IntPtr template);

public static void PrintDirect(string port, byte[] doc){
FileStream fs = new FileStream(CreateFile(port, FileAccess.ReadWrite,
FileShare.ReadWrite, 0, FileMode.Create, 0, IntPtr.Zero),
FileAccess.ReadWrite);
fs.Write(doc,0,doc.Length);
fs.Close();
}


Jan 24 '07 #4
Bob
Thanks Dave,

Yep I've seen these methods before ... they seem to require something to be
able to format the PDF and print it ... usually acrobat reader ... I'm
hoping that because I havea printer that can print PDF's natively I can
avoid this step and the various dark arts associated.

Acrpbat reader version 4 and below you could use and then be able to close
it afterwards but with the later version there is no easy way to shut down
acrobat reader once it has done its job.

cheers Bob
"Dave Sexton" <dave@jwa[remove.this]online.comwrote in message
news:OU**************@TK2MSFTNGP06.phx.gbl...
Hi,

Google search turns up many results.

One way
http://groups.google.com/group/micro...89cae8878ce652

Another way (similar, but more OO)
http://groups.google.com/group/micro...9334b9c4e9a58f

Printing in a server application such as ASP.NET
http://groups.google.com/group/micro...9a5d2f6d1a4add

Note: I have no idea if any of these actually work :)

--
Dave Sexton
http://davesexton.com/blog

"Microsoft News" <no*******@nospamSam.com.auwrote in message
news:ur**************@TK2MSFTNGP03.phx.gbl...
>Greetings community at large.

I have a c# app that generates a PDF file.
I have a printer that prints PDF natively.

But I cannot figure out how to programatically print in C# ... I can
generate the PDF as a file or a stream .. but cannot figure out how to
send either to the printer.

the only events I can use seem to be e.Graphics.DrawImage( ) or
e.Graphics.DrawString( )

is there a way to print a stream to a printer ? or a streamReader or
binaryStream ?

I thought that as a PDF is 'kind-of' a postscript file I could use
e.Graphics.DrawString( ) .. not surprisingly I got several pages of text
...

I can just drag and drop my PDF onto the printer it hops in the queue and
prints wonderfully ( no need to use acrobat reader to print) ..

Is perhaps this the way to go to 'programatically' push the file onto the
print queue ?

Regards.



Jan 24 '07 #5
Hi,

I haven't tried using the Win32 APIs to do this myself, but here's a
reference that might help:

Printing and Print Spooler Functions
http://msdn2.microsoft.com/en-us/library/ms535737.aspx

I'm going to need this eventually too - if you figure something out that's
pretty simple, please post your findings. Thanks!

--
Dave Sexton
http://davesexton.com/blog
http://www.codeplex.com/DocProject (Sandcastle in VS IDE)

"Bob" <no*******@nospamSam.com.auwrote in message
news:eU**************@TK2MSFTNGP06.phx.gbl...
Thanks JE ... this looked quite hopeful .. when I pasted it in it compiles
and runs but doesnt seem to drive any printer.
I traced though it up to the fs.write( ) and doc is populated ..
what have I missed ????? at worst I hoped to get garbage out of the
printer.

Below is my implimentation :

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;

namespace printing_directly_to_printer
{
class Program
{
[DllImport("Kernel32.dll")]
static extern IntPtr CreateFile(string filename,
[MarshalAs(UnmanagedType.U4)]FileAccess fileaccess,
[MarshalAs(UnmanagedType.U4)]FileShare fileshare, int
securityattributes, [MarshalAs(UnmanagedType.U4)]FileMode
creationdisposition, int flags, IntPtr template);

public static void PrintDirect(string port, byte[] doc)
{
FileStream fs = new FileStream(CreateFile(port,
FileAccess.ReadWrite,
FileShare.ReadWrite, 0, FileMode.Create, 0, IntPtr.Zero),
FileAccess.ReadWrite);
fs.Write(doc, 0, doc.Length);
fs.Close();
}

static void Main(string[] args)
{
string printerPort_Lexmark = "IP_10.254.1.90"; // ports
mapped on the local machine to the various printers
string printerPort_HPColor = "IP_10.254.1.11"; // the
lexmark will print PDF's natively, dont expect the HP
string printerPort_PDFCreator = "PDFCreator"; // to play
nicely .. but there for testing

FileStream myFS = new FileStream("c:\\document.pdf",
FileMode.Open, FileAccess.Read); // read in the PDF
BinaryReader myBR = new BinaryReader(myFS);

byte[] outData = new byte[myBR.BaseStream.Length];

for (int x = 0; x == myBR.BaseStream.Length; x++)
outData[x] = myBR.ReadByte();

PrintDirect(printerPort_Lexmark, outData);
}
}
}

regards Bob

"JE" <jg*******@gmail.comwrote in message
news:Op*************@TK2MSFTNGP05.phx.gbl...
>If you are looking to send a bitstream directly to a printer, use the
following code to open the port and print directly. The port can be LPT1,
COM1, etc or \\host\printershare.

using System;
using System.IO;
using System.Runtime.InteropServices;

[DllImport("Kernel32.dll")]
static extern IntPtr CreateFile(string filename,
[MarshalAs(UnmanagedType.U4)]FileAccess fileaccess,
[MarshalAs(UnmanagedType.U4)]FileShare fileshare, int securityattributes,
[MarshalAs(UnmanagedType.U4)]FileMode creationdisposition, int flags,
IntPtr template);

public static void PrintDirect(string port, byte[] doc){
FileStream fs = new FileStream(CreateFile(port, FileAccess.ReadWrite,
FileShare.ReadWrite, 0, FileMode.Create, 0, IntPtr.Zero),
FileAccess.ReadWrite);
fs.Write(doc,0,doc.Length);
fs.Close();
}



Jan 24 '07 #6
Bob
Hi Dave,

well the solution to my problem was here
http://support.microsoft.com/default.aspx/kb/322091 Your posts plus EJ's
pointed me in the right direction.

This solution works for my printer as it can print PDF's ..

cheers Bob

"Dave Sexton" <dave@jwa[remove.this]online.comwrote in message
news:%2****************@TK2MSFTNGP05.phx.gbl...
Hi,

I haven't tried using the Win32 APIs to do this myself, but here's a
reference that might help:

Printing and Print Spooler Functions
http://msdn2.microsoft.com/en-us/library/ms535737.aspx

I'm going to need this eventually too - if you figure something out that's
pretty simple, please post your findings. Thanks!

--
Dave Sexton
http://davesexton.com/blog
http://www.codeplex.com/DocProject (Sandcastle in VS IDE)

"Bob" <no*******@nospamSam.com.auwrote in message
news:eU**************@TK2MSFTNGP06.phx.gbl...
>Thanks JE ... this looked quite hopeful .. when I pasted it in it
compiles and runs but doesnt seem to drive any printer.
I traced though it up to the fs.write( ) and doc is populated ..
what have I missed ????? at worst I hoped to get garbage out of the
printer.

Below is my implimentation :

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;

namespace printing_directly_to_printer
{
class Program
{
[DllImport("Kernel32.dll")]
static extern IntPtr CreateFile(string filename,
[MarshalAs(UnmanagedType.U4)]FileAccess fileaccess,
[MarshalAs(UnmanagedType.U4)]FileShare fileshare, int
securityattributes, [MarshalAs(UnmanagedType.U4)]FileMode
creationdisposition, int flags, IntPtr template);

public static void PrintDirect(string port, byte[] doc)
{
FileStream fs = new FileStream(CreateFile(port,
FileAccess.ReadWrite,
FileShare.ReadWrite, 0, FileMode.Create, 0, IntPtr.Zero),
FileAccess.ReadWrite);
fs.Write(doc, 0, doc.Length);
fs.Close();
}

static void Main(string[] args)
{
string printerPort_Lexmark = "IP_10.254.1.90"; // ports
mapped on the local machine to the various printers
string printerPort_HPColor = "IP_10.254.1.11"; // the
lexmark will print PDF's natively, dont expect the HP
string printerPort_PDFCreator = "PDFCreator"; // to play
nicely .. but there for testing

FileStream myFS = new FileStream("c:\\document.pdf",
FileMode.Open, FileAccess.Read); // read in the PDF
BinaryReader myBR = new BinaryReader(myFS);

byte[] outData = new byte[myBR.BaseStream.Length];

for (int x = 0; x == myBR.BaseStream.Length; x++)
outData[x] = myBR.ReadByte();

PrintDirect(printerPort_Lexmark, outData);
}
}
}

regards Bob

"JE" <jg*******@gmail.comwrote in message
news:Op*************@TK2MSFTNGP05.phx.gbl...
>>If you are looking to send a bitstream directly to a printer, use the
following code to open the port and print directly. The port can be
LPT1, COM1, etc or \\host\printershare.

using System;
using System.IO;
using System.Runtime.InteropServices;

[DllImport("Kernel32.dll")]
static extern IntPtr CreateFile(string filename,
[MarshalAs(UnmanagedType.U4)]FileAccess fileaccess,
[MarshalAs(UnmanagedType.U4)]FileShare fileshare, int
securityattributes, [MarshalAs(UnmanagedType.U4)]FileMode
creationdisposition, int flags, IntPtr template);

public static void PrintDirect(string port, byte[] doc){
FileStream fs = new FileStream(CreateFile(port, FileAccess.ReadWrite,
FileShare.ReadWrite, 0, FileMode.Create, 0, IntPtr.Zero),
FileAccess.ReadWrite);
fs.Write(doc,0,doc.Length);
fs.Close();
}




Jan 24 '07 #7
JE
Looks very good - I will definitely use this approach next time around.
We print a lot of raw stuff to our label printers and untill now the
..Net solution I used was similar to the old VB6 one we had before.
Bob wrote:
Hi Dave,

well the solution to my problem was here
http://support.microsoft.com/default.aspx/kb/322091 Your posts plus EJ's
pointed me in the right direction.

This solution works for my printer as it can print PDF's ..

cheers Bob

"Dave Sexton" <dave@jwa[remove.this]online.comwrote in message
news:%2****************@TK2MSFTNGP05.phx.gbl...
>Hi,

I haven't tried using the Win32 APIs to do this myself, but here's a
reference that might help:

Printing and Print Spooler Functions
http://msdn2.microsoft.com/en-us/library/ms535737.aspx

I'm going to need this eventually too - if you figure something out that's
pretty simple, please post your findings. Thanks!

--
Dave Sexton
http://davesexton.com/blog
http://www.codeplex.com/DocProject (Sandcastle in VS IDE)

"Bob" <no*******@nospamSam.com.auwrote in message
news:eU**************@TK2MSFTNGP06.phx.gbl...
>>Thanks JE ... this looked quite hopeful .. when I pasted it in it
compiles and runs but doesnt seem to drive any printer.
I traced though it up to the fs.write( ) and doc is populated ..
what have I missed ????? at worst I hoped to get garbage out of the
printer.

Below is my implimentation :

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;

namespace printing_directly_to_printer
{
class Program
{
[DllImport("Kernel32.dll")]
static extern IntPtr CreateFile(string filename,
[MarshalAs(UnmanagedType.U4)]FileAccess fileaccess,
[MarshalAs(UnmanagedType.U4)]FileShare fileshare, int
securityattributes, [MarshalAs(UnmanagedType.U4)]FileMode
creationdisposition, int flags, IntPtr template);

public static void PrintDirect(string port, byte[] doc)
{
FileStream fs = new FileStream(CreateFile(port,
FileAccess.ReadWrite,
FileShare.ReadWrite, 0, FileMode.Create, 0, IntPtr.Zero),
FileAccess.ReadWrite);
fs.Write(doc, 0, doc.Length);
fs.Close();
}

static void Main(string[] args)
{
string printerPort_Lexmark = "IP_10.254.1.90"; // ports
mapped on the local machine to the various printers
string printerPort_HPColor = "IP_10.254.1.11"; // the
lexmark will print PDF's natively, dont expect the HP
string printerPort_PDFCreator = "PDFCreator"; // to play
nicely .. but there for testing

FileStream myFS = new FileStream("c:\\document.pdf",
FileMode.Open, FileAccess.Read); // read in the PDF
BinaryReader myBR = new BinaryReader(myFS);

byte[] outData = new byte[myBR.BaseStream.Length];

for (int x = 0; x == myBR.BaseStream.Length; x++)
outData[x] = myBR.ReadByte();

PrintDirect(printerPort_Lexmark, outData);
}
}
}

regards Bob

"JE" <jg*******@gmail.comwrote in message
news:Op*************@TK2MSFTNGP05.phx.gbl...
If you are looking to send a bitstream directly to a printer, use the
following code to open the port and print directly. The port can be
LPT1, COM1, etc or \\host\printershare.

using System;
using System.IO;
using System.Runtime.InteropServices;

[DllImport("Kernel32.dll")]
static extern IntPtr CreateFile(string filename,
[MarshalAs(UnmanagedType.U4)]FileAccess fileaccess,
[MarshalAs(UnmanagedType.U4)]FileShare fileshare, int
securityattributes, [MarshalAs(UnmanagedType.U4)]FileMode
creationdisposition, int flags, IntPtr template);

public static void PrintDirect(string port, byte[] doc){
FileStream fs = new FileStream(CreateFile(port, FileAccess.ReadWrite,
FileShare.ReadWrite, 0, FileMode.Create, 0, IntPtr.Zero),
FileAccess.ReadWrite);
fs.Write(doc,0,doc.Length);
fs.Close();
}


Jan 24 '07 #8
Hi Bob,

Great, thanks for posting the link.

--
Dave Sexton
http://davesexton.com/blog
http://www.codeplex.com/DocProject (Sandcastle in VS IDE)

"Bob" <no*******@nospamSam.com.auwrote in message
news:uJ**************@TK2MSFTNGP05.phx.gbl...
Hi Dave,

well the solution to my problem was here
http://support.microsoft.com/default.aspx/kb/322091 Your posts plus EJ's
pointed me in the right direction.

This solution works for my printer as it can print PDF's ..

cheers Bob

"Dave Sexton" <dave@jwa[remove.this]online.comwrote in message
news:%2****************@TK2MSFTNGP05.phx.gbl...
>Hi,

I haven't tried using the Win32 APIs to do this myself, but here's a
reference that might help:

Printing and Print Spooler Functions
http://msdn2.microsoft.com/en-us/library/ms535737.aspx

I'm going to need this eventually too - if you figure something out
that's pretty simple, please post your findings. Thanks!

--
Dave Sexton
http://davesexton.com/blog
http://www.codeplex.com/DocProject (Sandcastle in VS IDE)

"Bob" <no*******@nospamSam.com.auwrote in message
news:eU**************@TK2MSFTNGP06.phx.gbl...
>>Thanks JE ... this looked quite hopeful .. when I pasted it in it
compiles and runs but doesnt seem to drive any printer.
I traced though it up to the fs.write( ) and doc is populated ..
what have I missed ????? at worst I hoped to get garbage out of the
printer.

Below is my implimentation :

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;

namespace printing_directly_to_printer
{
class Program
{
[DllImport("Kernel32.dll")]
static extern IntPtr CreateFile(string filename,
[MarshalAs(UnmanagedType.U4)]FileAccess fileaccess,
[MarshalAs(UnmanagedType.U4)]FileShare fileshare, int
securityattributes, [MarshalAs(UnmanagedType.U4)]FileMode
creationdisposition, int flags, IntPtr template);

public static void PrintDirect(string port, byte[] doc)
{
FileStream fs = new FileStream(CreateFile(port,
FileAccess.ReadWrite,
FileShare.ReadWrite, 0, FileMode.Create, 0, IntPtr.Zero),
FileAccess.ReadWrite);
fs.Write(doc, 0, doc.Length);
fs.Close();
}

static void Main(string[] args)
{
string printerPort_Lexmark = "IP_10.254.1.90"; // ports
mapped on the local machine to the various printers
string printerPort_HPColor = "IP_10.254.1.11"; // the
lexmark will print PDF's natively, dont expect the HP
string printerPort_PDFCreator = "PDFCreator"; // to play
nicely .. but there for testing

FileStream myFS = new FileStream("c:\\document.pdf",
FileMode.Open, FileAccess.Read); // read in the PDF
BinaryReader myBR = new BinaryReader(myFS);

byte[] outData = new byte[myBR.BaseStream.Length];

for (int x = 0; x == myBR.BaseStream.Length; x++)
outData[x] = myBR.ReadByte();

PrintDirect(printerPort_Lexmark, outData);
}
}
}

regards Bob

"JE" <jg*******@gmail.comwrote in message
news:Op*************@TK2MSFTNGP05.phx.gbl...
If you are looking to send a bitstream directly to a printer, use the
following code to open the port and print directly. The port can be
LPT1, COM1, etc or \\host\printershare.

using System;
using System.IO;
using System.Runtime.InteropServices;

[DllImport("Kernel32.dll")]
static extern IntPtr CreateFile(string filename,
[MarshalAs(UnmanagedType.U4)]FileAccess fileaccess,
[MarshalAs(UnmanagedType.U4)]FileShare fileshare, int
securityattributes, [MarshalAs(UnmanagedType.U4)]FileMode
creationdisposition, int flags, IntPtr template);

public static void PrintDirect(string port, byte[] doc){
FileStream fs = new FileStream(CreateFile(port, FileAccess.ReadWrite,
FileShare.ReadWrite, 0, FileMode.Create, 0, IntPtr.Zero),
FileAccess.ReadWrite);
fs.Write(doc,0,doc.Length);
fs.Close();
}



Jan 24 '07 #9

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Darcy Kahle | last post: by
6 posts views Thread by J P Singh | last post: by
1 post views Thread by notregister | last post: by
2 posts views Thread by Loane Sharp | last post: by
reply views Thread by tSureZureGuza | last post: by
6 posts views Thread by =?Utf-8?B?QnJhc3NpY2FOaWdyYQ==?= | last post: by
reply views Thread by zhoujie | last post: by
reply views Thread by suresh191 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.