【问题标题】:How to provide page range in process print request如何在处理打印请求中提供页面范围
【发布时间】:2018-08-31 13:52:24
【问题描述】:

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

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

现在,我有一个条件,我想打印从页码 25 的突出部分,而不是打印整个文档。我该怎么做?

【问题讨论】:

    标签: c# asp.net .net printing


    【解决方案1】:

    我不知道您问题的直接答案,但您可以使用下面的代码轻松解决这个问题。显示一个对话框并选择页码、份数等,看看它在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";
    };
    

    请不要使用空格分隔的参数,如果您的打印机名称有空格,您需要将打印机名称放在引号内。

    【讨论】:

    • 感谢您的建议。它会在 .aspx 页面后面的代码中工作吗?
    • 如果我理解正确 - 我认为这是假设正在打印的应用程序需要支持传递的任何参数。我不确定这将如何与打印动词相匹配。还是我错过了什么?
    • 在 Windows 应用程序中进行测试。它会更容易。您只需要弄清楚printDialog1.PrinterSettings 是什么。
    • 好的..我在 Windows 应用程序中尝试了同样的方法,现在我在 PrinterSettings 中得到了 FromPageToPage。现在我如何在我的代码中添加它..请建议..谢谢
    • @wiz 当我们使用PrintDialog时,它会向用户显示一个对话框,并且该对话框会操作PrinterSettings,因此作为测试我们可以显示对话框并选择副本、页码(对话框中的任何内容),然后查看它发送到打印机的内容。然后,我们可以不使用对话框,而是模仿它并将其硬编码到Arguments 属性中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-14
    • 2014-11-11
    • 2017-08-21
    相关资源
    最近更新 更多