2013-04-19 2 views
2

У меня уже есть функциональность для создания pdf-файла для отчетов, которые отображаются пользователем.Запись содержимого строки в формате PDF

Так что в настоящее время он делает, когда пользователь нажимает на кнопку Печать PDF

  1. Получить содержимое HTML в DIV, который должен быть напечатан
  2. Отправить это содержание метода контроллера с помощью JQuery Ajax метод с POST
  3. В контроллере он обертывает содержимое строками документа html, такими как <html>, <body> и т. д. Кроме того, я добавляю некоторые стили.
  4. Затем эта строка html передается одному из инструментов, которые я использую, который возвращает мне pdf-байты для этой строки.
  5. Затем он сохраняет эти байты в формате pdf в папке и возвращает путь к этому файлу.
  6. JQuery затем по методу успеха открывает окно для этого пути.

Это все работает нормально.

Проблема заключается в том

  1. Он не сразу открывает окно, как это делает всю обработку, а затем в случае успеха он открывает окно
  2. Plus Я интересно, если я делаю все это правильно или делая некоторые лишние лишние шаги, из этого я имею в виду, есть ли лучший способ или короткий способ сделать это.

Что-то вроде того, что после получения содержимого div внести некоторые изменения в строку, чтобы показать ее в новом окне в виде PDF-контента и т. Д., Чтобы избежать обработки сервера, возможно ли это?

До сих пор я пытался показать контент напрямую с помощью data:application/pdf, но это не сработало.

Если это невозможно, я думаю, чтобы избежать сохранения PDF-файла, но просто показать вид, который откроется как PDF, может быть, установив его content-type, возможно ли это?

ответ

2

Что вы сделали, это лучший подход. (Все) браузеры не имеют возможности конвертировать html в pdf, поэтому вы не можете просто заказать их для открытия страницы в формате pdf. Вы должны обслуживать файл pdf с сервера. Для большего контроля вы можете служить файл из сценария по указанному URL и добавьте соответствующие заголовки:

header('Content-type: application/pdf'); 
header('Content-Disposition: inline; filename="the.pdf"'); // second parameter is the name of the file 

типа контент означает, браузер будет пытаться открыть его с помощью программы, подходящей для этого MIME типа. Content Disposition inline означает, что браузер попытается открыть его в браузере.

Поскольку сервер работает, просто отображайте «загружаемое» изображение пользователю. Таким образом, пользователь узнает, что что-то происходит, и что ему нужно ждать.

Смежные вопросы