从服务器下载后打印pdf文件
Posted
技术标签:
【中文标题】从服务器下载后打印pdf文件【英文标题】:Print pdf file after downloaded from the server 【发布时间】:2018-10-11 03:28:13 【问题描述】:我需要自动打印生成的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文件下载到客户端/用户下载或用户设置下载位置的位置,它也会打印,但是它使用服务器的打印机,这是问题所在。
【问题讨论】:
简短回答 - 不。您无法控制客户端浏览器或其打印机。 有没有办法获得下载 pdf 的用户的下载位置? 没有。您无权访问客户端文件系统 有没有其他方法可以自动打印 pdf 文件? 否(这是幸运的,因为如果可以,网络就不会存在)。但我不明白你为什么要这样做。如果您导航到某个站点并且您的打印机刚刚开始打印文档,您会怎么想。 【参考方案1】:我认为这在现代浏览器中是不可能的。
我看到的大多数解决方案(here 和 there)都依赖于加载和打印的嵌入式 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"
/>
【讨论】:
以上是关于从服务器下载后打印pdf文件的主要内容,如果未能解决你的问题,请参考以下文章