【问题标题】:Print a PDF Document Programmatically以编程方式打印 PDF 文档
【发布时间】:2023-06-09 12:38:01
【问题描述】:

如何以编程方式打印 Pdf 文档?

我正在使用以下代码打印 PDF 文件。但是当我直接单击打印图标时,它开始打印。但我不想要它。

 <asp:ImageButton ID="PrintButton" runat="server" ImageUrl="~/images/print-icon.png"
                   OnClick="PrintButton_Click" ToolTip="Print Document" />

我的 Cs 代码是

protected void PrintButton_Click(object sender, EventArgs e)
    {
        ProcessStartInfo infoPrint = new ProcessStartInfo();
        infoPrint.FileName = Session["filename"].ToString();
        infoPrint.Verb = "PrintTo";
        infoPrint.CreateNoWindow = true;
        infoPrint.WindowStyle = ProcessWindowStyle.Normal;
        infoPrint.UseShellExecute = true;
        Process printProcess = new Process();
        printProcess = Process.Start(infoPrint);            

    }      

当用户单击打印图标时,我想打开一个打印对话框。如果用户单击打印对话框中的打印按钮,那么我想开始打印文档。我的 PDF 文件位于服务器上的一个文件夹中,我希望它在 asp.net 中以编程方式打印出来。

【问题讨论】:

  • 我假设您希望在连接到服务器的打印机上打印文档,对吧?
  • 我希望它在客户端机器上打印。意味着使用连接到客户端系统的打印机。@yms
  • 您可能会发现这篇文章很有用:generate a pdf that automatically prints

标签: asp.net pdf


【解决方案1】:

此代码将在服务器而不是客户端上运行。同时开发服务器和客户端是同一台机器,你的本地工作站。部署后,它将在服务器上执行,而不是在用户的本地工作站上执行。

您可以使用 javascript 打开打印对话框

window.print();

但是,这将打印整个 webapge,而不是具体的文档。

如果您只想打印 PDF,则需要将文件流式传输到浏览器(而不是整个网络表单)。然后,用户可以利用 adobe 阅读器中的本机打印选项。网上有很多关于如何将文档流式传输到客户端浏览器的示例。

【讨论】:

    【解决方案2】:

    看看This posst

    此代码添加 javascript 行以打印 pdf

    Public Shared Function PrintJStoPDF(thePDF As Byte(), direct As Boolean) As Byte()
    
    
        Dim BB As Byte() = Nothing
    
        Using ms As New MemoryStream
            Using reader As New PdfReader(thePDF)
                Dim stamper = New PdfStamper(reader, ms)
    
                Dim jsText As String = "var res = app.setTimeOut('this.print({bUI: true, bSilent: " & direct.ToString.ToLower & ", bShrinkToFit: false});', 200);"
    
                stamper.JavaScript = jsText
    
                stamper.FormFlattening = True
                stamper.Writer.CloseStream = False
                stamper.Close()
    
    
                ms.Position = 0
    
                BB = ms.ToArray
            End Using
        End Using
    
        Return BB
    
    End Function
    

    【讨论】: