Сделать встроенный PDF прокручиваемый в iPad

По какой-то причине браузер Safari для iPad не обрабатывает встроенные PDF файлы. PDF файлы прекрасно видны при запуске автономно, но не с тегом объекта. Проблема в том, что они не прокручиваются.

У меня есть страница jquery со встроенным pdf, который красиво прокручивается на mozilla и chrome, но на сафари (iPad) PDF остается застрявшим на первой странице и не прокручивается. Вопрос в том, как мне сделать эту работу в браузере iPad?

Аналогичный вопрос был размещен здесь Встраивание PDF-прошивки в iPad, но ответ не очень хорош. Они обманывают, используя высоту 10000 пикселей, что создает много пробелов для небольшого документа и, возможно, не будет работать для очень большого документа:

<!DOCTYPE html>
<html>
  <head>
    <title>PDF frame scrolling test</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <style>
      #container { overflow: auto; -webkit-overflow-scrolling: touch; height: 500px; }
      object { width: 500px; height: 10000px }
    </style>
  </head>
  <body>
    <div id="container">
      <object id="obj" data="my.pdf" >object can't be rendered</object>
    </div>
  </body>
</html>

Любой способ сделать это без жесткого кодирования сумасшедшей высоты?

Ответ 1

Я годами пытался найти решение этой проблемы. Я постараюсь спасти любого, кто ищет это некоторое время: ЭТОЙ ПРОБЛЕМЫ НЕТ РЕШЕНИЕ. То, как Safari обрабатывает рендеринг PDF, безнадежно противоречит всей концепции встраивания PDF в веб-страницу. Более того, все браузеры на iPad ТРЕБУЮТСЯ использовать движок рендеринга Safari, поэтому вы даже не сможете дать указание пользователям установить другой браузер.

Единственный способ встроить PDF с хорошими результатами - использовать какую-либо стороннюю утилиту рендеринга. Существуют некоторые решения jQuery, но для моих целей я нашел самый простой способ сделать это - вставить ссылку просмотра Google doc в тег объекта или iframe. Это относительно просто сделать, и вы можете найти простые инструкции здесь:

Как просмотреть Google Drive PDF ссылку в iframe

Это решение включает в себя хорошую визуализацию дисплея и простое управление разбиением на страницы и масштабированием. Обязательно включите параметр & embedded = true, если вы встраиваете его в тег iframe или объекта или он не будет работать. Для просмотра необходим общедоступный URL-адрес вашего документа, поэтому, если у вас есть проблемы с безопасностью, такие как я, вам потребуется написать веб-сервис для обслуживания документа с использованием одноразового токена.

Есть хорошая веб-страница, которая перечисляет несколько других вариантов, если вы ищете что-то более надежное:

http://www.jqueryrain.com/2012/09/best-jquery-pdf-viewer-plugin-examples/

Ответ 2

PDF.js может быть правильным выбором. Он отлично работает для нас.

Вы просто загрузите его из https://mozilla.github.io/pdf.js/ и разместите его на своем веб-сайте.

Затем он может быть включен в iframe

<iframe src="/web/viewer.html?file=PATH_TO_MY_FILE.PDF"></iframe>

Демо можно найти здесь: https://mozilla.github.io/pdf.js/web/viewer.html

Привет

Ответ 3

Ответ MSD довольно точен. Я пытался сделать это по-разному, от некоторых из libs, предлагаемых к использованию объекта, встроенного элемента и т.д.

В любом случае он не прокручивает меня (iPad 2 и воздух 1, по крайней мере, на iOS 8). Или он прокручивается с чрезмерно растянутым письмом или работает только на коротких 1-2страничных документах.

решение, которое я нашел наиболее эффективным, - это предоставление пользователям IPad пользователям через пользовательский агент для прямого доступа к файлу, они смогут видеть его на вкладке и прокручивать через него. Он не встраивается, но это наиболее эффективное и эффективное решение, которое я мог бы найти для своих текущих потребностей.

Я надеюсь, что это поможет кому-то углубиться в одно и то же.

Ответ 4

Вам не нужно устанавливать высоту объекта на что-то сумасшедшее, просто установите его на ту же высоту, что и ваш элемент контейнера. Для прокрутки с использованием безнадежного объекта рендеринга Safari вам нужно использовать два пальца (вверх/вниз и влево/вправо).

У меня также есть эти свойства, установленные в моем контейнере:

overflow: scroll;
-webkit-box-pack: center;
-webkit-box-align: center;
display: -webkit-box;

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

Ответ 5

Другое решение (без кодирования) - использовать Google, если вы хотите использовать вложения только выборочно.

  1. Сохраните PDF в своем Google Диске
  2. Откройте его с предварительным просмотром.
  3. Выберите "Открыть в новом окне" в подменю трех пунктов.
  4. В новом окне выберите "Вставить элемент" в подменю из трех элементов.
  5. Скопируйте код iframe и вставьте его на свою страницу.

Здесь вы также можете найти подробные инструкции, а в пункте 12 вы можете увидеть код iframe.

example but in german

Ответ 6

static downloadPdfChromeApp(linkSource: string) {
        // Crea un div y dentro un object para luego destruirlo y abrir una nueva ventana enviando la data
        const divpdf = document.createElement('div');
        divpdf.innerHTML = '<div style="display:none;position:absolute">' +
            '<object  style="display:none;" id="docuFrame" type="application/pdf" width="1px" height="1px" data="' +
            linkSource + '"></object></div>';
        document.firstElementChild.appendChild(divpdf);
        const frame = document.getElementById('docuFrame') as HTMLObjectElement;
        window.open(frame.data);
        divpdf.remove();
    }

Ответ 7

Надеюсь, это может помочь другим в будущем. Я использовал Google PDF Viewer, чтобы иметь возможность прокручивать PDF в iframe. Таким образом, для тега src URL-адрес

https://docs.google.com/gview?url=  + ‘Вставить ссылку в PDF + встроенный = true