Есть ли способ записи байтовых данных в формате PDF в клиентскую часть IFrame? - PullRequest
1 голос
/ 23 июня 2009

Странный вопрос, который я знаю, но говорю, что у каждого есть данные байта PDF, содержащиеся в скрытом поле на странице, на которой также есть IFrame.

Есть ли способ записи данных PDF в IFrame с использованием JavaScript, чтобы IFrame загружался в подключаемый модуль Adobe и отображал данные?

Причина, по которой мы хотели бы сделать это, заключается в том, что нам все равно нужны данные PDF в скрытом поле, поэтому, если пользователь нажимает кнопку, мы можем вызвать апплет Java через JS с данными, чтобы он записал байтовые данные PDF в запатентованная система. Мы также хотели бы показать PDF-файл.

Итак:

  1. Данные в байтах PDF (сгенерированные на сервер) забил на скрытое поле.
  2. Данные в байтах PDF из скрытого поля некоторые клиенты написали в IFrame в ближайшее время, чтобы быть обнаруженным-через-з-чуда-оф-StackOverflow JS магия и, таким образом, отображается.
  3. Когда кнопка нажата, Java-апплет называется клиентской передача в PDF байтовых данных, хранящихся в скрытое поле

Так же, как гномы трусов Южного парка, у нас есть фаза 1 и 3, но не 2!

Любые идеи с благодарностью приняты!

Дополнительная информация:

Нам нужно, чтобы байтовые данные были доступны на стороне клиента для передачи через вызов JS в апплет Java. Мы делаем это в настоящее время через скрытое поле. Это нормально, и работает отлично.

Проблема заключается в том, что вызов апплета происходит только в том случае, если нажата кнопка «ОК» на модальном диалоговом окне ajax («Хотите отправить этот документ в UglyPprietorySystem?»).

Как вы все знаете, вы не можете положить что-либо поверх дисплея Adobe Plug-in. Очевидно, что если вся страница имеет тип PDF, то для JS нет места, чтобы показать диалоговое окно, чтобы оно не работало, и если вы используете IFrame, вы все равно не можете поместить что-либо поверх того, что отображает плагин (это фактически воздушное пространство другого приложения и нарушение, которое является просто грубым!).

Мы работали над этим:

  1. Сначала показывается размытое изображение стандартного документа PDF и появляется модальное диалоговое окно поверх этого.
  2. Когда пользователь ответил на диалоговое окно, которое мы вызывали (или нет), Java-приложение с данными pdf-байта из поля hiden
  3. Затем мы отправили сообщение после очистки скрытого поля (Woo! Отправка формы с двоичными данными в формате PDF не оценивается сервером!)
  4. В page_load кода позади мы затем, при обратной передаче, записали в поток ответов данные байтов в формате PDF, установив тип содержимого равным appplication / pdf, и, таким образом, отобразился pdf.

симпатичный. Все это работает и дает нам то, что мы хотели бы.

Единственная проблема в том, что нам нужно:

* generate the PDF data twice (once on initital page_load for the clientside call to our applet and then again on postback to display).

или

* We store the PDF byte data in the session after the first response so as to be able to, after the postback, still have the pdf data to be able to display it.

Ни то, ни другое, но мы пошли с последним, но теперь мы думаем, что хотели бы избежать этого, если сможем.

Таким образом, идея создания PDF, помещения его в скрытое поле, наличия кнопки на странице для сохранения PDF в нашей собственной системе с помощью вызова апплета, а также записи в IFrame с этими данными уже на клиенте в скрытое поле, таким образом отображая его.

Уф!

Вот почему мы хотели на клиенте, используя JS, записать двоичные данные pdf в IFrame и установить для его типа содержимого значение application / pdf, чтобы браузер загрузил подключаемый модуль Adobe и отобразил его.

Ответы [ 6 ]

2 голосов
/ 23 июня 2009

Нет интерфейса, который позволял бы вам делать подобные вещи в изолированной программной среде безопасности на веб-стороне. Причина, по которой вы не просто скачиваете PDF-файл с сервера? ...

1 голос
/ 16 февраля 2017

Выезд URL.createObjectURL(). Вам нужно будет создать Blob, но тогда createObjectURL() даст вам что-то подходящее для src.

iframe.

Вот пример файла pdf, полученного через AJAX: https://github.com/courajs/pdf-poc

1 голос
/ 23 июня 2009

Кажется, я не могу найти ни одного из сайтов, на которых я недавно исследовал это, но есть функция, поддерживаемая браузерами MOST (включая IE8 и ограниченная в более ранних версиях IE), где вы можете указать data: uri в src поле iframe (и часто других тегов). По сути, URI выглядит так: src = 'data: application / pdf; Base64,;'

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

1 голос
/ 23 июня 2009

Как я уже сказал в своем вопросе, мы уже генерируем данные PDF на сервере.

Нам нужно, чтобы байтовые данные были доступны на стороне клиента для передачи через JS-вызов в Java-апплет. Мы делаем это в настоящее время через скрытое поле. Это нормально, и это прекрасно работает.

Проблема заключается в том, что вызов апплета происходит только в том случае, если нажата кнопка «ОК» на модальном диалаоге ajax («Хотите отправить этот документ в UglyPprietorySystem?»).

Как вы все знаете, вы не можете поместить что-либо поверх дисплея Adobe Plug-in. Очевидно, что если вся страница имеет тип PDF, то для JS нет места, чтобы показать диалоговое окно, поэтому , что не будет работать, и если вы используете IFrame, вы все равно не сможете поместить что-либо поверх того, что Плагин отображает (это фактически воздушное пространство другого приложения и нарушает, что просто грубо!).

Мы работали над этим:

  1. Изначально показ размытого изображения универсального документа PDF и выскакивая модальный диалог поверх этого.
  2. Когда пользователь ответил на диалог, который мы назвали (или нет) Java приложение с данными PDF-байта из скрытое поле
  3. Затем мы отправили обратно после очистки скрытое поле (Ву! форма с двоичными данными в формате PDF не оценил сервер!)
  4. В page_load кода позади мы тогда, на обратной передаче, написали поток ответов с байтом PDF данные, установив тип содержимого AppPlication / PDF и, следовательно, PDF отображается.

прекрасный. Все это работает и дает нам вид того, что мы хотели бы.

Единственная проблема в том, что нам нужно:

  • генерировать данные PDF дважды (один раз на начальная загрузка страницы для клиентской стороны позвоните в наш апплет, а затем снова на отправить обратно на дисплей).

или

  • Мы храним данные байтов PDF в сессия после первого ответа, так чтобы иметь возможность, после обратной передачи, все еще есть данные в формате PDF, чтобы иметь возможность отображать это.

Ни то, ни другое, но мы пошли с последним, но теперь мы думаем, что хотели бы избежать этого, если сможем.

Таким образом, идея создания PDF, помещения его в скрытое поле, наличия кнопки на странице для сохранения PDF в нашей собственной системе с помощью вызова апплета, а также записи в IFrame с этими данными уже на клиенте в скрытое поле, таким образом отображая его.

Уф!

Так вот почему мы хотели на клиенте с использованием JS, записать двоичные данные pdf в IFrame и установить тип контента для приложения / pdf, чтобы браузер загружал подключаемый модуль Adobe. и отобразить его.

0 голосов
/ 23 июля 2009

Используйте элемент «object» и поместите данные PDF в параметр «data».

Не уверен насчет создания PDF в JS, но я знаю, что это возможно, но его нелегко найти в библиотеке.

См. http://support.microsoft.com/kb/201515. Статья MS KB показывает этот пример:

<OBJECT ID="myCtrl" WIDTH=50 HEIGHT=50
 CLASSID="CLSID:nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn"
 DATA="DATA:application/x-oleobject;BASE64,j43aWGqdGxCvwEIQECqNpy
           FDNBIIAAAA7QMAAO0DAACAfuHmAgAFADEAAAAQ">
</OBJECT>

Я бы посмотрел в поддержку браузера, прежде чем делать это. Теперь, когда IE8 является принудительным обновлением, должна быть лучшая поддержка, но я не могу говорить по опыту IE, FF, Safari и т. Д.

0 голосов
/ 23 июня 2009

Почему вы не можете создать функцию обратного вызова на клиенте, чтобы периодически проверять наличие финального файла по почте или по почте? Укажите в браузере «миниатюру» изображения, затем запустите сообщение / доберитесь до финального файла, проглотите ошибку, пока файл не будет готов. Как только файл станет доступен, клиент просто скачает его.

...