Решение для добавления нескольких изображений в PDF вверху каждой страницы с масштабированием.
Я нашел решение для этой проблемы.Я хотел, чтобы другие, кто мог столкнуться с подобной проблемой, извлекли выгоду из моего решения, поэтому я публикую его как ответ вместо того, чтобы комментировать мой вопрос.
Получается, что метод getImageScaledHeight()
не работает, если автоматическое масштабирование включено с помощью setAutoScale(true)
.Автоматическое масштабирование произойдет, но только после того, как изображение будет добавлено в документ, но для установки положения изображения в верхней части страницы нам понадобится масштабированная высота изображения при вызове следующего метода
image.setFixedPosition(i + 1, 0, PageSize.A4.getHeight()-image.getImageScaledHeight());
Чтобы включить масштабированиеизображения, чтобы поместиться на странице, а также расположить их в нужном месте на странице, вам нужно
Сначала масштабируйте изображение, используя метод image.scaleToFit(fitWidth, fitHeight)
, а затем рассчитайте нижнее положение, используямасштабированный
Рассчитать нижнюю позицию, используя масштабированную высоту изображения (image.getImageScaledHeight()
) и высоту страницы .
Теперь, если вы хотите, чтобы в вашем файле PDF были поля, вам придется изменить код для масштабирования изображения и соответственно установить фиксированное положение.Ниже приведен пример кода решения для обоих сценариев.
Решение № 1.Несколько изображений в PDF на отдельной странице вверху без полей
image.scaleToFit(pdfA4usableWidth, pdfA4usableHeight);
image.setFixedPosition(i + 1, 0, PageSize.A4.getHeight()-image.getImageScaledHeight());
Нажмите здесь, чтобы увидеть пример кода с консольным выводом
Решение № 2.Несколько изображений в PDF на отдельной странице сверху с полями
float leftMargin = document.getLeftMargin(), rightMargin = document.getRightMargin();
float topMargin = document.getTopMargin(), bottomMargin = document.getBottomMargin();
float pdfA4usableWidth = PageSize.A4.getWidth() - leftMargin - rightMargin;
float pdfA4usableHeight = PageSize.A4.getHeight() - topMargin - bottomMargin;
System.out.println("A4 usable width: "+pdfA4usableWidth+", usable height: "+pdfA4usableHeight);
image.scaleToFit(pdfA4usableWidth, pdfA4usableHeight);
image.setFixedPosition(i + 1, 0, PageSize.A4.getHeight()-image.getImageScaledHeight());
Щелкните здесь, чтобы увидеть пример кода с консольным выводом
PDF сгенерировано ...
Изображение добавлено в PDF без полей
Изображение добавлено в PDF с полями по умолчанию
Измерение полей в PDF
Примечания:
- На прилагаемых снимках экрана PDF-файлов серый цвет является просто фоном средства просмотра PDF.
- Файлы изображений представлены в виде test1.jpg и test2.jpg, чтобы этот пример кода был простым.