从服务器下载后打印pdf文件

时间:2018-05-01 02:19:22

标签: c# jquery asp.net-mvc-4 pdf printing

我需要自动打印生成的pdf文件。首先,我在生成pdf文件后将其保存到服务器,然后将其下载到客户端计算机。我需要打印从客户端计算机下载的pdf文件。有没有办法可以获得下载后保存pdf文件的确切位置文件?有没有办法可以使用客户端/本地打印机直接打印pdf文件?目前,我使用过spire pdf,问题是它使用服务器的打印机,我需要修复它才能使用客户端/本地打印机。

代码:

window.location.href = "/Orders/Download?file=" + encodeURIComponent(data.fileName);

控制器:

[HttpGet]
[DeleteFileAttribute] //Action Filter, it will auto delete the file after download
public ActionResult Download(string file)
{
   //get the temp folder and file path in server
   string fullPath = Path.Combine(Server.MapPath("~/Content/PDF"), file);

   try
   {
       PdfDocument doc = new PdfDocument();
       doc.LoadFromFile(fullPath);
       doc.PrinterName = "HP Deskjet Ink Adv 2010 K010";
       //Use the default printer to print all the pages
       doc.PrintDocument.Print();
   }
   catch (Exception e)
   {
       var message = e.Message;
   }

   return File(fullPath, "application/pdf", file);
}

这是代码,它会将pdf文件下载到客户端/用户下载或用户设置下载位置的地方,它也会打印,但它会使用服务器的打印机,这就是问题。

1 个答案:

答案 0 :(得分:0)

我认为现代浏览器无法做到这一点。

我看到的大多数解决方案(herethere)都依赖于加载和打印的嵌入式PDF。 但是,iframe现在是沙箱,而且由于PDF通常依赖于原生插件,所以你运气不好:plugins will not load - 你无法改变它。

以下是产生错误的示例代码:

  

无法加载'..sample.pdf'作为插件,因为框架进入   该插件正在加载沙盒。

$('#pdfDocument').attr("src", "https://upload.wikimedia.org/wikipedia/commons/8/85/I-20-sample.pdf").load(function(){
    document.getElementById('pdfDocument').contentWindow.print();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<embed sandbox="allow-top-navigation allow-scripts allow-popups allow-forms"
type="application/pdf"
src="https://upload.wikimedia.org/wikipedia/commons/8/85/I-20-sample.pdf"
id="pdfDocument"
width="100%"
height="100%" />