Печатать PDF на страницу с помощью PHP и jQuery - PullRequest
0 голосов
/ 11 июня 2018

Так что мне нужна небольшая помощь в написании php-скрипта, который загружает PDF-файл в новую вкладку через PHP-скрипт.Я делаю это таким образом, чтобы обеспечить доступ к PDF-файлу только в том случае, если пользователь вошел в систему и имеет ссылку на него, в противном случае .htaccess в родительском каталоге для доступа к PDF-блокам.
Я могучитать из PDF, используя код ниже:

$file = '../path-to-file.pdf';
$filename = 'filename.pdf';
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
@readfile($file);

Результат этого затем передается в функцию AJAX, показанную ниже, которая генерирует новую вкладку и выдает на нее ответ:

$.ajax({
    url: '../includes/function.projects.php?view-media=' + item,
        success: function(data) {
            $(window.open().document.body).html(data);
        }
    })

Это все работает гладко, это только когда открывается новая вкладка, потому что я пишу ответ прямо в документы HTML, я получаю экран, полный текста, как это:

%PDF-1.5 %���� 2 0 obj << /Linearized 1 /L 17007 /H [ 687 126 ] /O 6 /E 16732 /N 1 /T 16731 >>

Итак, мой вопросэто довольно просто;Кто-нибудь пытался успел сделать это раньше?Если да, то есть ли какие-либо библиотеки, которые я должен использовать / я пропускаю заголовки и т. Д.

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

Любая помощь будет принята с благодарностью, Заранее спасибо!

1 Ответ

0 голосов
/ 12 июня 2018

Правильно, поэтому у меня есть решение.Если кто-то может придумать лучший способ сделать это, пожалуйста, дайте мне знать, но сейчас это работает отлично!Я нашел библиотеку JS под названием PDFObject , которую можно использовать для создания кросс-браузерного решения для простого встраивания PDF-файлов в HTML-документ.При этом я могу передать ссылку на PDF-файл на сервер вместе с целевым тегом div для его встраивания (который в моем случае я настроил внутри модального окна, чтобы мы оставались на той же странице).

Поскольку мы остаемся на одной странице, я могу заблокировать доступ ко всей странице, используя функцию, которую я написал ранее в проекте, которая перенаправляет пользователя на индекс, если у них нет нужного уровня доступа.,Что-то вроде этого будет работать:

function checkSession() {
    if(empty($_SESSION)) {
        header("Location: /?cheeky_monkey");
    }
}

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

SetEnvIf Referer "localhost" is_local_referer
<FilesMatch "\.pdf$">
    Require env is_local_referer
</FilesMatch>

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

  1. Сначала нам нужно получить URL для PDF (возможно, вы сможете пропустить этот шаг)

Начнем с того, что этот javascript вызывается всякий раз, когда кто-то нажимает для просмотра PDF (этот вызов просто вкладывается как атрибут onclick):

function viewMedia(projectID, type, item) {
    $.ajax({
        url: '../includes/function.projects.php?cid=' + projectID + '&type=' + type + '&view-media=' + item,
        success: function(data) {
            $('.pdf-script').html('<script>PDFObject.embed("' + data + '", "#the-pdf");</script>');
            $('#viewMediaModal').modal('toggle');
        }
    })
}

Это код, запускаемый на странице php.

public function viewMedia($item) {
    $mediaItems = unserialize($this->media);
    $file = '/path/to/pdf/' . $mediaItems[$item]['file'];
    echo $file;
}

Пример возвращаемых данных из этой функции:

/path/to/pdf/example-pdf.pdf
Использование этого для загрузки PDF

Когда у нас есть правильный URL для PDF, и AJAX возвращается как успешный, полученные данные могут быть использованы для повторной генерации javascriptна этот раз с новой ссылкой PDF:

success: function(data) {
    $('.pdf-script').html('<script>PDFObject.embed("' + data + '", "#the-pdf");</script>');
    $('#viewMediaModal').modal('toggle');
}

Вот как выглядит структура этого модального тела:

<div class="modal-body">
    <div id="the-pdf"></div>
    <div class="pdf-script" style="display: none;">
        <script>PDFObject.embed('', '#the-pdf');</script>
    </div>
</div>
Результат

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

enter image description here

И если пользователь пытается получить доступ к файлу напрямую:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...