Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set Printer Settings while printing PDF

I'm trying to print a PDF file using Process object. And up to certain extent I could print it successfully. But now I want to set printer properties.. like no of copies, Paper size etc. But I don't see any property to set these values. I'm using following code to print PDFs

string fileName = "";
string arguments = "";
string verbToUse = "";
int i = 0;
ProcessStartInfo startInfo = new ProcessStartInfo();
OpenFileDialog openFileDialog1 = new OpenFileDialog();

openFileDialog1.InitialDirectory = "c:\\";
openFileDialog1.Filter = "pdf files (*.pdf)|*.pdf|All files (*.*)|*.*";
openFileDialog1.FilterIndex = 2;
openFileDialog1.RestoreDirectory = true;

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
    if ((fileName = openFileDialog1.FileName) != null)
    {
        startInfo = new ProcessStartInfo(fileName);

        if (File.Exists(fileName))
        {
            i = 0;
            foreach (String verb in startInfo.Verbs)
            {
                // Display the possible verbs.
                MessageBox.Show(i.ToString() + ". " + verb);
                i++;
            }
        }
    }

    //Console.WriteLine("Select the index of the verb.");
    string index = "2";
    if (Convert.ToInt32(index) < i)
        verbToUse = startInfo.Verbs[Convert.ToInt32(index)];
    else
        return;

    startInfo.Verb = verbToUse;
    if (verbToUse.ToLower().IndexOf("printto") >= 0)
    {
        //Printer Name
        arguments = @"\\hydfsvt02\HPLaserJ";
        startInfo.Arguments = arguments;
    }

    Process newProcess = new Process();
    newProcess.StartInfo = startInfo;

    try
    {
        newProcess.Start();

        MessageBox.Show(newProcess.ProcessName + " for file " + fileName + " started successfully with verb " + startInfo.Verb);
    }
    catch (System.ComponentModel.Win32Exception ex)
    {
        MessageBox.Show(" Win32Exception caught!");
        MessageBox.Show(" Win32 error = " + ex.Message);
    }
    catch (System.InvalidOperationException)
    {
        MessageBox.Show("File " + fileName + " started with verb " + verbToUse);
    }
}
like image 496
user82613 Avatar asked Jul 08 '09 09:07

user82613


1 Answers

I have written an application that does batch printing of PDF files.

It's not possible to specify the printer settings that you want to use. It's not even possible if you use the COM interface with the Adobe Standard/Pro versions.

Your options are to either:

  1. Buy a license to a third-party PDF renderer that you can use to convert the PDF to Bitmaps and use the PrintDocument to control the PrinterSettings
  2. Use something like GhostScript to convert the PDF files to BMP files and then use the PrintDocument class to print the BMP files. You can then control the PrinterSettings.
like image 107
Chris Thompson Avatar answered Oct 05 '22 23:10

Chris Thompson