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

Вопрос или проблема

Я разрабатываю REST API на фреймворке Slim, который используется веб-браузером и Android-устройствами.

Это онлайн-библиотека книг. Большинство книг в формате PDF.

Требования к библиотеке кода:

  1. Книга должна отправляться по страницам, так как некоторые книги большие.
  2. Текст из книг не должен быть копируемым.
  3. Обычный пользователь не должен иметь возможности сохранять страницы.
    (Конечно, продвинутые пользователи могут найти решение для этого).

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

Решение для защиты содержания книги от ‘простого пользователя’ – использовать слои в пользовательском интерфейсе, помещая содержимое книги за прозрачным изображением. Никакое простое взаимодействие мыши или клавиатуры не сможет выделить / скопировать или скачать содержание книги.

Используя этот метод, содержание книги не обязательно обслуживать в виде изображения, это может быть PDF, HTML или текст.

Следующий шаг может заключаться в предварительном преобразовании всех ваших PDF-книг в формат, с которым удобно работать, например, HTML. Вы можете использовать инструмент, такой как pdf2htmlEX, чтобы сделать это. Я раньше использовал эту библиотеку и нашел ее довольно хорошей.

Ответ или решение

Разработка онлайн-библиотеки книг с функционалом отображения PDF-файлов требует внимательного подхода к реализации как с точки зрения функциональности, так и безопасности контента. В данной статье мы рассмотрим, как можно реализовать API на базе фреймворка Slim для отправки страниц книг и защитить контент от копирования.

Структура решения

  1. Чтение PDF и отправка страниц

    Для целей отправки страниц PDF-файлов по одному вам понадобится использовать подходящий SDK для разбора PDF-документов. Одним из наиболее популярных инструментов для этой задачи является библиотека pdf-lib или PDF.js от Mozilla. Это JavaScript библиотека, которая может быть интегрирована как в веб-приложение, так и в мобильные приложения.

    Пример использования PDF.js для извлечения указанной страницы:

    const pdfjsLib = require('pdfjs-dist');
    const loadingTask = pdfjsLib.getDocument('path/to/document.pdf');
    
    loadingTask.promise.then(function(pdf) {
       return pdf.getPage(pageNumber);
    }).then(function(page) {
       const viewport = page.getViewport({ scale: 1 });
       const canvas = document.createElement('canvas');
       const context = canvas.getContext('2d');
       canvas.height = viewport.height;
       canvas.width = viewport.width;
    
       const renderContext = {
           canvasContext: context,
           viewport: viewport
       };
       return page.render(renderContext).promise;
    });
  2. Защита контента от копирования

    Чтобы предотвратить копирование текста, можно использовать два подхода, которые вы уже упомянули:

    • Наложение прозрачного слоя: Это очень эффективный способ, который включает в себя размещение элемента с текстом под прозрачным слоем (например, canvas), что значительно усложнит задачу простого пользователя, желающего скопировать текст.

    • Предварительное преобразование в HTML: Использование инструмента pdf2htmlEX для конвертации PDF в HTML позволит отображать текст в виде страниц, что также додает уровни защиты. Для этого вы можете разработать функционал на стороне сервера с использованием PHP, который будет предварительно обрабатывать PDF-файлы, преобразовывая их в HTML, и затем последовательно отправлять конечному пользователю.

    Пример команды для использования pdf2htmlEX:

    pdf2htmlEX --optimize-text 1 book.pdf

    После этого будет сгенерирован HTML-документ, который можно будет отображать на веб-странице.

  3. Интеграция с REST API

    В конечном итоге, на вашем REST API необходимо будет создать маршруты для обработки запросов на получение страниц книги. Используя Slim Framework, ваш код может выглядеть следующим образом:

    use Psr\Http\Message\ResponseInterface;
    use Psr\Http\Message\ServerRequestInterface;
    
    $app->get('/book/{id}/page/{page}', function (ServerRequestInterface $request, ResponseInterface $response, array $args) {
       // Загрузка PDF и получение нужной страницы
       $bookId = $args['id'];
       $pageNumber = $args['page'];
    
       // Логика получения страницы (например, через pdf2htmlEX или PDF.js)
    
       return $response->withJson($pageContent);
    });

Заключение

Реализация онлайн-библиотеки с функцией защиты контента требует внимательного подхода и выбора правильных инструментов. Комбинирование работы с PDF-документами и защиты текста предоставит пользователям доступ к книгам, одновременно минимизируя риски копирования и распространения контента. Приведенные выше решения помогут вам создать надёжную и эффективную библиотеку для online-просмотра книг.

Оцените материал
Добавить комментарий

Капча загружается...