How to set Printer Settings while printing PDF

时光毁灭记忆、已成空白 提交于 2019-12-22 05:33:47

问题


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);
    }
}

回答1:


private void startPrintingButton_Click(object sender, EventArgs e)
{
    OpenFileDialog ofd = new OpenFileDialog();
    if (DialogResult.OK == ofd.ShowDialog(this))
    {
        PrintDocument pdoc = new PrintDocument();

        pdoc.DefaultPageSettings.PrinterSettings.PrinterName = "ZDesigner GK420d";
        pdoc.DefaultPageSettings.Landscape = true;
        pdoc.DefaultPageSettings.PaperSize.Height = 140;
        pdoc.DefaultPageSettings.PaperSize.Width = 104;

        Print(pdoc.PrinterSettings.PrinterName, ofd.FileName);
    }
}

private void Print(string printerName, string fileName)
{
    try
    {
        ProcessStartInfo gsProcessInfo;
        Process gsProcess;

        gsProcessInfo = new ProcessStartInfo();
        gsProcessInfo.Verb = "PrintTo";
        gsProcessInfo.WindowStyle = ProcessWindowStyle.Hidden;
        gsProcessInfo.FileName = fileName;
        gsProcessInfo.Arguments = "\"" + printerName + "\"";
        gsProcess = Process.Start(gsProcessInfo);
        if (gsProcess.HasExited == false)
        {
            gsProcess.Kill();
        }
        gsProcess.EnableRaisingEvents = true;

        gsProcess.Close();
    }
    catch (Exception)
    {
    }
}

This code will print PDF files as well as adjust the printing settings.




回答2:


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.


来源:https://stackoverflow.com/questions/1097005/how-to-set-printer-settings-while-printing-pdf

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!