2009-10-28 4 views
3

Я работаю над веб-приложением (используя Grails), которое сгенерирует подарочный сертификат. Я думаю о таком рабочем процессе:, где библиотека Java/Groovy для наложения текста на изображение

  1. Пользователь выберет шаблон, который будет сохранен как изображение.

  2. Затем текст (имя, дата, сумма и т. Д.) Будет накладываться на изображение, чтобы сделать окончательный сертификат. Существует набор координат, связанных с каждым шаблоном, который описывает, где положить каждый бит текста.

  3. В браузере есть своего рода «предварительный просмотр», который показывает пользователю, как будет выглядеть окончательный сертификат.

  4. Когда пользователь доволен результатами, они загружают сертификат в формате PDF и распечатывают его.

Может ли кто-нибудь порекомендовать библиотеку для Java (или Groovy), которая упростит это? Меня не особенно беспокоит скорость, поскольку я подозреваю, что webapp будет использоваться только несколькими людьми за раз.

ОБНОВЛЕНИЕ: в конце я использовал библиотеку iText PDF для наложения текста в формате PDF с использованием PDFStamper.

ответ

0

Вы можете использовать Batik, чтобы сделать это как SVG. Ваш образ будет <img> тег, и ваш текст будет одним или несколькими <text> теги. Там есть конвертер (называемый FOP, я считаю), который даст вам выход в формате PDF.

+0

Спасибо за предложение - не могу поверить, что я не думал об использовании SVG, это отличная идея. Наличие текстовых битов в качестве масштабируемого объекта может значительно упростить определение того, как помещать их в пробелы в шаблоне, не прибегая к беспорядку с размером шрифта. – mojones

4

Вы можете сделать это со стандартными библиотеками 2D 2D-графики - создайте BufferedImage из изображения, get its Graphics и используйте drawString(), чтобы поместить текст сверху. Разумеется, тогда текст будет частью растрового изображения в полученном PDF-файле и не будет использовать полное разрешение печати.

1

В дополнение к ответам выше, я столкнулся с библиотекой GraphicsBuilder и плагином Grails j2D, которые также являются потенциальными решениями.