以编程方式打印PDF文档

时间:2013-04-15 12:50:39

标签: asp.net pdf

如何通过编程方式打印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中的编程方式打印它。

2 个答案:

答案 0 :(得分:2)

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

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

window.print();

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

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

答案 1 :(得分:0)

查看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