如何在打印PDF时设置打印机设置

时间:2009-07-08 09:12:55

标签: c# pdf properties printing

我正在尝试使用Process对象打印PDF文件。在某种程度上,我可以成功打印它。但现在我想设置打印机属性..比如没有副本,纸张大小等。但我没有看到任何属性来设置这些值。 我正在使用以下代码来打印PDF

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

2 个答案:

答案 0 :(得分:0)

我编写了一个批量打印PDF文件的应用程序。

无法指定要使用的打印机设置。如果将COM接口与Adobe Standard / Pro版本一起使用,则甚至无法实现。

您可以选择:

  1. 购买可用于将PDF转换为位图并使用PrintDocument控制PrinterSettings的第三方PDF渲染器的许可
  2. 使用GhostScript之类的东西将PDF文件转换为BMP文件,然后使用PrintDocument类打印BMP文件。然后,您可以控制PrinterSettings。

答案 1 :(得分:0)

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

此代码将打印PDF文件以及调整打印设置。