【问题标题】:Open PDF in browser and invoke the print dialog在浏览器中打开 PDF 并调用打印对话框
【发布时间】:2014-12-09 06:56:15
【问题描述】:

在我的 asp.net 4.0 应用程序中,我在后端有一个 word 文档。当用户选择打印一封信时,使用 ASPose 我在后台填写邮件合并字段,

我正在打开一个浏览器窗口并通过以下 Page_Load 中的代码显示 PDF。我想告诉它打印,以便它打开标准打印机对话框,如果用户要求打印,则打印,然后关闭该浏览器窗口。如何从此时调用打印(本地打印机)?

    using (FileStream sourceStream = new FileStream(pdfFilePath, FileMode.Open, FileAccess.Read))
    {
        using (var memoryStream = new MemoryStream())
        {
            sourceStream.CopyTo(memoryStream);
            byte[] b =  memoryStream.ToArray();
            Response.AddHeader("content-disposition", "inline;filename=" + Path.GetFileName(pdfFilePath));
            Response.ContentType = System.Net.Mime.MediaTypeNames.Application.Pdf;
            Response.OutputStream.Write(b, 0, b.Length);        
        }
    }

【问题讨论】:

标签: c# asp.net pdf printing


【解决方案1】:

将命令直接发送到打印机的一个不太漂亮的解决方案涉及使用 Java Applet。在这种情况下,您可以生成文档的 URL,并使用 Javascript 将其作为参数传递给小程序。我在我的一个应用程序中使用了这个解决方案,但我应该警告你,在浏览器安全配置或过时的 JRE 的情况下很容易失败。

当您将 PDF 发送到打印机时,您应该使用 PDDocument 类来加载 PDF 文档,然后将其发送到 PrinterJob:

PrinterJob printerJob = PrinterJob.getPrinterJob();
printerJob.setPrintService("MyPrinterName");

URL uri = new URL("http://example.com/docs/doc.pdf");
PDDocument docPdf = PDDocument.load(uri);
docPdf.silentPrint(printerJob);

在这种情况下,您需要知道客户端中的打印机名称,您也可以使用 Java 获取:

public String[] getPrinters() {
    PrintService[] printers = PrintServiceLookup.lookupPrintServices(null, null);
    String[] printerNames = new String[impressoras.length];

    for (int i = 0; i < printers.length; i++) {
        printerNames[i] = printers[i].getName();
    }

    return printerNames;
}

请记住,您可以使用 Javascript 调用 Applet 的任何方法,在网上搜索即可找到方法。

从客户那里获得打印机后,您可以使用自己的打印机对话框,以便用户选择他/她想要使用的打印机。


您可能会发现一些有用的资源:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多