LINUX.ORG.RU

Генерация PDF с векторным изображением

 , ,


1

1

Нужно генерировать PDF-документ, в котором вставлено сложное векторное изображение.

Сейчас процесс выглядит так: генерируется SVG, растеризуется в PNG, генерируется HTML, в нём вставлено это PNG изображение и результат преобразуется в PDF.

Что не нравится:

  1. PDF получается больше, чем, как кажется, должна была бы быть. Ну собственно 99% её размера это эта картинка.

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

Но общий подход нравится, т.к. каждый этап легко отлаживать, поэтому сам процесс хотелось бы оставить (SVG, HTML).

Собственно в идеале нужен инструмент, которому на вход подаётся HTML в котором какой-то текст, разметка и тд, а также ссылка на SVG. А на выходе получается PDF, в котором SVG преобразован в PS или чего там внутри.

Пробовал такую схему просто печатать в гугль-хроме, в теории получается то, что надо (PDF с векторной картинкой), но размер там дикий и открывается оно с дикими тормозами.

Есть утилита rsvg-convert которая умеет конвертировать SVG в PDF, у неё PDF получается хороший, и размер небольшой и вектор остаётся. Но как этот PDF встроить в HTML и потом сгенерировать следующий PDF - не понятно.

★★★

Последнее исправление: vbr (всего исправлений: 1)

Я бы генерировал LaTeX вместо HTML. Для работы с SVG понадобится inkscape. Но можно попробовать pandoc на HTML со вставленным SVG напустить (не знаю, что будет, впрочем).

TeopeTuK ★★★★
()

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

Почему бы не вставлять в HTML сразу SVG вместо растра? Инструмент, который умеет отрисовывать произвольный HTML, наверняка умеет отрисовывать и SVG.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Сейчас для этого используется Java-библиотека org.xhtmlrenderer:flying-saucer-pdf-itext5, она не умеет. Гугль хром, как я уже писал, формально умеет, но на практике получилось неюзабельно.

vbr ★★★
() автор топика
Последнее исправление: vbr (всего исправлений: 1)

cairo. Создаёшь pdf документ и встраиваешь всё что нужно(в т.ч. просто размещаешь svg), единственное нужно подумать над тем, как преобразовать html, чтобы вписывалось в страницу

AKonia ★★
()
Последнее исправление: AKonia (всего исправлений: 1)
Ответ на: комментарий от special-k

Вообще, конечно изящно конвертить svg в pdf, но я бы лучше просто оборачивал картинку пдфом.

convert Image01.png Image01.pdf

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

Не понятно зачем в этой схеме html.

special-k ★★★
()
Последнее исправление: special-k (всего исправлений: 4)
Ответ на: комментарий от special-k

HTML затем, что в документе помимо картинки есть и текстовая информация с определённым оформлением. Которая должна распечататься в формате A4 на нужное число листов с нужными переносами и тд. Если ты предлагаешь изначально весь документ генерировать в виде SVG с текстом и тд. Это будет очень неудобно и в реализации и в сопровождении.

vbr ★★★
() автор топика
Ответ на: комментарий от vbr

Я бы, конечно, генерировал весь документ в svg. Уж html-то вряд ли больше подходит для печати чем svg.

И еще есть такие штуки https://developer.mozilla.org/ru/docs/Web/SVG/Element/foreignObject, правда не знаю кто их умеет рендерить. Но тут все зависит от того как вы генерите этот хтмл, может у вас визивиг редактор какой-нибудь, от него и пляшете.

special-k ★★★
()
Последнее исправление: special-k (всего исправлений: 1)