Программное обеспечение для создания PDF, которое может “повторно использовать” данные изображения…? (PDF “Image XObjects”)

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

Мне нужно автоматически создать PDF-файл (предпочтительно через пакетный процесс/командную строку, оптимально было бы что-то основанное на XSLT/SAXON).

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

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

Проблема: если я использую XSL-FO и передаю его в Apache FOP, то результатом будет PDF размером примерно 300 МБ, потому что данные изображений передаются несколько раз в PDF.

Теперь я ищу возможность создать PDF таким образом, чтобы данные изображений этих 20 изображений присутствовали только один раз в PDF, и каждая PDF-страница использовала только “ссылки”/ссылки на этот набор данных изображений (так что итоговый PDF-файл имеет размер всего ~2 МБ).

Я знаю, что язык PDF как таковой имеет такие ссылки, но, конечно, я не заинтересован в том, чтобы создавать PDF-файл напрямую, “на низком уровне”;-)

Любая помощь/идеи будут высоко оценены! Большое спасибо!

Report Lab имеет как программное обеспечение с открытым исходным кодом для выполнения такого рода задач (на Python), так и платный инструмент Report Lab Plus, который вы можете использовать через их язык разметки отчетов (RML).

Вы можете легко достичь этого с помощью PDFTron PDFNet.

Image shared_img_object = Image.Create(doc, input_path + "peppers.jpg");
// затем для каждой страницы добавьте изображение таким образом

Element element = builder.CreateImage(shared_img_object, new Matrix2D(sx, 0, 0, sy, dx, dy));
writer.WritePlacedElement(element);

Смотрите примеры AddImage или ElementBuilder для более подробной информации.

В конце концов, я решил в пользу хорошо известного, устоявшегося инструмента “(обычный) pdfTeX”. Его макросы \pdfximage и \pdfrefximage предлагают именно то, что мне нужно.
(Конечно, pdfTeX не может обрабатывать SVG, но преобразование моих SVG-изображений в набор PDF-файлов не стало проблемой, особенно поскольку это нужно было сделать только один раз.)
В результате у меня теперь есть XSLT, который преобразует мой входной XML в (обычный) pdfTeX, и все преобразование работает удивительно быстро на современных ПК.

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

Создание PDF-документа с повторным использованием изображений: эффективные решения

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

Основные подходы к решению задачи

  1. PDFTron PDFNet: Это мощный инструмент для работы с PDF, который предоставляет API для программирования. С помощью этого инструмента можно создать объект изображения один раз и повторно использовать его на разных страницах, что существенно экономит место. Пример кода, который иллюстрирует этот метод:

    Image shared_img_object = Image.Create(doc, input_path + "image.jpg");
    Element element = builder.CreateImage(shared_img_object, new Matrix2D(sx, 0, 0, sy, dx, dy));
    writer.WritePlacedElement(element);

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

  2. ReportLab: Этот инструмент также позволяет создавать PDF-документы с возможностью повторного использования изображений. Использование их Report Markup Language (RML) позволяет легко управлять изображениями и добиваться оптимизации файла. Важно отметить, что ReportLab поддерживает множество форматов изображений, что упрощает процесс подготовки материалов.

  3. pdfTeX: Это еще один хороший выбор для создания PDF-документов. Использование команд \pdfximage и \pdfrefximage позволяет включать изображение в документ только один раз, а затем ссылаться на него повторно. Хотя pdfTeX не поддерживает SVG напрямую, можно предварительно конвертировать изображения в PDF-формат, что делает этот метод очень быстрым и эффективным.

Перенос данных с помощью XSLT

Ваша задача по автоматизации процесса создания PDF-документов с использованием XSLT вполне выполнима. Вы можете разработать XSLT-трансформацию, которая преобразует ваши исходные XML-данные в подходящий для pdfTeX или другого выбранного вами инструмента формат. Это позволяет интегрировать вашу систему для пакетной обработки и автоматизации.

Выводы

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

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

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

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