Saturday, February 5, 2011

How to set Printer Settings while printing PDF

I'm trying to print a PDF file using Process object. And upto 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);
            }
        }
  • 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, 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

    1. 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.

0 comments:

Post a Comment