Программно создавать фотоальбомы в формате PDF - PullRequest
2 голосов
/ 24 ноября 2010

У меня есть набор шаблонов фотоальбомов в формате PDF (в них есть пустые квадраты, куда должны идти текст и фотографии).Мне нужно использовать эти шаблоны для создания реальных альбомов.

Я планировал использовать iText и Java.Я бы отправил приложению массив всех URL-адресов изображений для использования.Я точно буду знать, где изображения должны быть размещены на шаблонах, и буду использовать абсолютное позиционирование для их размещения.

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

Ответы [ 3 ]

1 голос
/ 24 ноября 2010

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

0 голосов
/ 30 ноября 2010
PdfReader reader = new PdfReader("template.pdf");
PdfStamper stamper = new PdfStamper( reader, new FileOutputStream("output.pdf"));

PdfContentByte content = stamper.getOverContent(1); // first page == 1

Image image = Image.createInstance("someImage.png");
image.setAbsolutePosition( x, y );
image.setAbsoluteHeight( hei );
image.setAbsoluteWidth( wid );

content.addImage(image);

// instead of absolutely positioning the image, you can do:
//content.addImage( image, wid, 0f, 0f, hei, x, y ); 
// that's a transformation matrix, you can skew, rotate, scale, etc.

stamper.close();

Если вы не знаете точное местоположение, у вас есть несколько вариантов.

1) Замените существующее изображение.

С помощью этой опции вы можете получить шаблон, немного нависающий над изображением, использовать альфа-смешение и так далее.Получить фантазии.Вы можете сделать то же самое с приведенным выше кодом, если вы использовали stamper.getUnderContent(1) и создали свой шаблон с прозрачным фоном.Я только что ответил на вопрос о замене изображения , который должен помочь в этом вопросе.

Новое изображение унаследует все графическое состояние изображения заполнителя.x, y, wid, hei, необязательные группы содержимого, прозрачность, всевозможные вещи.

2) Добавьте аннотацию (поля легко доступны) к шаблону в Acrobat (или, я полагаю, с iText) ииспользуйте RECT для указания x, y, wid, hei для приведенного выше кода.

// given the above stamper
AcroFields fields = stamper.getAcroFields();
PdfDictionary replaceAnnot = fields.getFieldItem("ReplaceMe").getMerged(0);

//we can remove the field from the PDF without breaking the info in replaceAnnot.
fields.removeField("ReplaceMe");

// rects are laid out [llx, lly, urx, ury]
PdfArray rect = replaceAnnot.getAsArray(PdfName.RECT);
float x = rect.getAsNumber(0).floatValue();
float y = rect.getAsNumber(1).floatValue();
float width = rect.getAsNumber(2).floatValue() - x;
float height = rect.getAsNumber(3).floatValue() - y;

Введите эти координаты в приведенный выше код изображения, и все готово.

0 голосов
/ 24 ноября 2010

Не ясно, есть ли у вас текст, оборачивающий фотографии.В любом случае я бы посмотрел на Apache-FOP .Я много использовал это - это может занять немного настройки.

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