Распечатать PDF-файл после загрузки с сервера - PullRequest
0 голосов
/ 01 мая 2018

Мне нужно автоматически распечатать созданный файл 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 голосов
/ 01 мая 2018

Я думаю, что это невозможно в современных браузерах.

Большинство решений, которые я видел ( здесь и там ), основаны на загруженном и напечатанном PDF-файле. Тем не менее, в настоящее время iframes являются изолированными программными средами, и, поскольку PDF-файлы обычно используют собственный плагин, вам не повезло: плагины не будут загружаться - и вы не можете это изменить.

Вот пример кода, который выдает ошибку:

Не удалось загрузить '..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%" />
...