如何在进程打印请求中提供页面范围

问题描述 投票:0回答:1

我有一个文件,我发送使用下面的c#代码打印

 p.StartInfo = new ProcessStartInfo()
 {
    CreateNoWindow = true,
    WindowStyle = ProcessWindowStyle.Hidden,
    Verb = "print",
    FileName = FileToPrintPath//put the correct path here
            };
 p.Start();

现在,我有一个条件,而不是打印整个文件,我想从页码25打印juts。我怎样才能做到这一点?

c# asp.net .net printing
1个回答
0
投票

我不知道您的问题的直接答案,但您可以使用下面的代码轻松解决这个问题。显示一个对话框并选择页码,份数等,并查看它在printDialog1.PrinterSettings中的显示方式。一旦知道格式,删除对话框代码并将其硬编码到Arguments

using (PrintDialog printDialog1 = new PrintDialog())
{
    if (printDialog1.ShowDialog() == DialogResult.OK)
    {
        var info = new ProcessStartInfo(**FILENAME**);
        info.Arguments = "\"" + printDialog1.PrinterSettings.PrinterName + "\"";
        // Use the debugger a message dialog to see 
        // contents of printDialog1.PrinterSettings
    }
}

我写了一个快速测试,这是存储在PrinterSettings中的内容:

[PrinterSettings Microsoft XPS Document Writer Copies = 1 Collat​​e = False Duplex = Simplex FromPage = 0 LandscapeAngle = 270 MaximumCopies = 1 OutputPort = PORTPROMPT:ToPage = 0]

所以你需要通过FromPageToPage

info.Arguments = "\"" + printDialog1.PrinterSettings.PrinterName + "\"" + "FromPage=2 ToPage=5";

在你的代码中:

p.StartInfo = new ProcessStartInfo()
{
    CreateNoWindow = true,
    WindowStyle = ProcessWindowStyle.Hidden,
    Verb = "print",
    FileName = FileToPrintPath,//put the correct path here, 
    Arguments = "\"Printer Name Goes Here\" FromPage=2 ToPage=5";
};

请注意,它们不是以空格分隔的参数,如果您的打印机名称有空格,则需要将打印机名称放在引号内。

© www.soinside.com 2019 - 2024. All rights reserved.