我需要自动打印生成的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文件下载到客户端/用户下载或用户设置下载位置的地方,它也会打印,但它会使用服务器的打印机,这就是问题。
答案 0 :(得分:0)
我认为现代浏览器无法做到这一点。
我看到的大多数解决方案(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"
width="100%"
height="100%" />