Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在浏览器中打开PDF并调用“打印”对话框_C#_Asp.net_Pdf_Printing - Fatal编程技术网

C# 在浏览器中打开PDF并调用“打印”对话框

C# 在浏览器中打开PDF并调用“打印”对话框,c#,asp.net,pdf,printing,C#,Asp.net,Pdf,Printing,在我的asp.net 4.0应用程序中,后端有一个word文档。当用户选择打印一封信时,我在后台使用ASPose填写邮件合并字段 我正在打开一个浏览器窗口,并通过下面的代码在页面加载中显示PDF。我想告诉它打印,以便它打开标准打印机对话框,如果用户要求打印,则打印,然后关闭浏览器窗口。如何从这一点调用打印(本地打印机) using (FileStream sourceStream = new FileStream(pdfFilePath, FileMode.Open, FileAcces

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

我正在打开一个浏览器窗口,并通过下面的代码在页面加载中显示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);        
        }
    }

直接向打印机发送命令的一个不太好的解决方案是使用Java小程序。在这种情况下,您可以生成文档的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;
}
public字符串[]getPrinters(){
PrintService[]打印机=PrintServiceLookup.lookupPrintServices(null,null);
String[]printerNames=新字符串[impressoras.length];
对于(int i=0;i
请记住,您可以使用Javascript调用小程序的任何方法,在web中搜索您可以找到如何执行该操作

从clent获取打印机后,您可以使用自己的打印机对话框,以便用户选择要使用的打印机


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

  • 创建Java小程序:
  • 从JavaScript代码调用小程序方法:

你不能-这取决于最终用户。此解决方案也有帮助: