Лучший способ отобразить большой PDF для мобильного (веб-разработки) сайта / использования - PullRequest
1 голос
/ 09 марта 2011

Мне нужно отобразить PDF с более чем 100 страницами (да, это огромно) на мобильном сайте. Это не сработает, и мне нужно найти альтернативное решение.

Я использую PHP в качестве серверной части и jQueryMobile lib в качестве мобильной платформы.

Я думал о преобразовании PDF в html, но возникает вопрос о том, как загрузить каждую страницу или загрузить все страницы заранее (как это может сделать многостраничный макет с JQM).

Я думал о том, чтобы каждая страница была AJAX-запросом и загружал ее таким образом, но хотел получить свежую точку зрения на любые альтернативные методы / идеи.

Меня также беспокоит скорость соединения, так как мобильные устройства отличаются от Edge, 3G, 4G, беспроводных и т. Д., Поэтому необходимо как можно более быстрое время загрузки.

UPDATE: Размер файла PDF составляет около 9 МБ, да, это не так много, но для мобильного браузера при медленной скорости соединения это займет некоторое время для отображения, и это если время не истечет первым

Заранее спасибо.

1 Ответ

1 голос
/ 09 марта 2011

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

Проблемы:

  • Большой размер файла и время ожидания
  • Должен обслуживать весь договор

Шаг первый

Сделать каждую страницу отдельным текстовым компонентом. Вы можете сделать это, создавая отдельные файлы для каждой страницы, или с помощью одного PHP-сценария раздавать отдельные страницы контента. Google завален PHP, который переводит PDF в текст.

Для наших целей у вас есть один файл PHP, который раздает контент, в этом методе: ./agreement.php?page=1

Шаг второй

Запросить содержимое в div, используйте рекурсию, чтобы заставить его загружать следующую страницу после успешной загрузки первой (не раньше или не позже. Асинхронный может быть таким грязным).

//Untested code
function loadPages(n) {
    $.ajax({
        url: './agreement.php',
        data: {'page':n},
        error : function (){ loadPages(n) }, //Try to load again
        success: function (pageData) {
            n++;
            $('#agreementBox').append(pageData);//Puts data into document
            if (n > 100) {return 0;} //Exit recursion on 100th page being appended
            loadPages(n); //Recursive call, loads next page after this one has been loaded
        }
    });
}
loadPages(1); //Call function for the first time.

Беспокойство

  • Придерживайтесь простого текста, 100 страниц графических данных в одном и том же рендеринге могут потребовать много памяти.
  • Ваш запрос ajax может завершиться неудачей по ряду причин, повторная попытка ошибки, которую я вставил, не покроет все из них, и может продолжаться вечно, например, в случае сбоя сценария php.
  • Пользователи могут договориться о загрузке до завершения соглашения.
  • Style. Я использую «магические числа» в моем примере, где 100 страниц - это жестко запрограммированное значение, а не константа, не делайте этого, когда собираетесь реализовать это.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...