Подтвердить что ты не робот

Как отобразить поток PDF в браузере с помощью javascript

Я обращаюсь к существующей веб-службе WCF (которая возвращает PDF как поток байтов) с использованием jQuery ajax-методов.

Когда вызов службы завершается, я получаю переменную javascript, содержащую PDF (переменная содержит двоичные данные, начиная с "% PDF-1.4..." ).

Я хотел бы отобразить этот PDF файл в новом окне браузера, но мне трудно достичь этого.

Мои исследования пока показывают, что я мог бы добиться того, что хочу использовать данные: uri, поэтому мой код, который вызывается при завершении вызова ajax, выглядит следующим образом:

function GotPDF(data)
{
    // Here, data contains "%PDF-1.4 ..." etc.
    var datauri = 'data:application/pdf;base64,' + Base64.encode(data);
    var win = window.open("", "Your PDF", "width=1024,height=768,resizable=yes,scrollbars=yes,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no");
    win.document.location.href = datauri;
}

Это приведет к открытию нового окна браузера, но содержимое пустым.

Интересно, если я укажу свой браузер (IE9) на существующий файл на своем локальном диске с помощью файла: uri, например file://c:/tmp/example.pdf, тогда я получаю тот же результат, т.е. пустое окно.

Есть ли способ показать данные PDF?

4b9b3361

Ответ 1

Код, который вы написали, ничего не отображает, просто откройте пустое окно (location.href является хешем для истории просмотра, а не содержимым страницы).

Чтобы отобразить PDF файл, у вас есть, по крайней мере, следующие параметры:

& times; Вставьте средство просмотра PDF внутри тега embed или object. Это может быть не так просто, как вы можете себе представить, взгляните на этот пост для примера кода. Короче говоря, это должно быть примерно так:

<object data="your_url_to_pdf" type="application/pdf">
    <embed src="your_url_to_pdf" type="application/pdf" />
</object>

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

& times; Загрузите файл на локальный компьютер (просто добавьте полный URL-адрес вашего метода веб-службы, который создает файл, не забудьте добавить правильный заголовок Content-Disposition в заголовок).

& times; Откройте файл в новом окне браузера. Создайте нормальный тег a, указав на файл PDF в режиме онлайн, который вы хотите отобразить в новом окне. Измените href на javascript:functionName и в этой функции создайте URI, который вы будете использовать для вызова метода веб-службы.

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

Ответ 2

Если вы используете тег <embed> или <object> для отображения потокового файла PDF (или других типов файлов) с сервера, как в:

<object data="SomeServlet?do=get_doc&id=6" type="application/pdf" width="800" height="400">

убедитесь, что сервер отправляет нужное значение http content-disposition, которое в этом случае будет inline.