Используя iText 7.1.9 java edition, я пытаюсь добавить изображение в PDF в фиксированном / абсолютном месте. Если PDF не в альбомной ориентации, я поворачиваю его на 90 градусов, однако, как только страница поворачивается исходная точка (была в левом нижнем углу) также поворачивается (теперь в верхнем левом углу и повернута на 90 градусов), поэтому, когда я вставляю изображение, оно поворачивается и использует неправильную исходную точку. См. Два примера PDF, ссылки на которые приведены ниже, для визуального представления о том, что происходит.
Есть ли способ изменить исходную точку страницы в нижний левый угол после поворота страницы? Есть ли лучший способ повернуть страницу, чем использовать PdfDocument.getPage(p).setRotation
?
Должен ли я просто повернуть изображение и выполнить некоторые математические расчеты, чтобы определить новое местоположение для каких-либо дополнительных элементов? Я попытался повернуть изображение, используя imageData.setRotation(90)
, но оно, похоже, ничего не делает.
Ниже приведены входные данные с использованием PDF, прикрепленные в нижней части этого вопроса:
//String pdfPath = "before_expected.pdf";
//String pdfDest = "after_expected.pdf";
//Or
String pdfPath = "before_unexpected.pdf";
String pdfDest = "after_unexpected.pdf";
Ниже приведен мой код для поворота страниц и добавления изображения:
//Open existing PDF
FileInputStream inputStream = new FileInputStream(pdfPath);
PdfReader reader = new PdfReader(inputStream).setUnethicalReading(true);
//Create new PDF
FileOutputStream outputStream = new FileOutputStream(pdfDest);
PdfWriter writer = new PdfWriter(outputStream);
PdfDocument pdfDocument = new PdfDocument(reader, writer);
//Load sample image
ImageData imageData = ImageDataFactory.create("C:/sample_image.png");
Image image = new Image(imageData);
//Get root element of PDF
Document document = new Document(pdfDocument);
//Get orientation
Rectangle pageSize = pdfDocument.getPage(1).getPageSize();
System.out.println("Original rotation " + pdfDocument.getPage(1).getRotation() + System.lineSeparator() + pageSize.toString());
//Rotate 90 if page is not landscape - placeholder
if (pageSize.getHeight() > pageSize.getWidth())
{
pdfDocument.getPage(1).setRotation(pdfDocument.getPage(1).getRotation() + 90);
}
//Find page size
Rectangle currentPageSize = pdfDocument.getPage(1).getPageSizeWithRotation();
//Locate image 40% across page and 20% up page
float absoluteXpos = currentPageSize.getWidth() * 0.4f;
float absoluteYpos = currentPageSize.getHeight() * 0.2f;
System.out.println("Image location from origin: " + absoluteXpos + ", "+absoluteYpos);
//Add image
image.setFixedPosition(absoluteXpos, absoluteYpos);
document.add(image);
//Removed code to close any tidy up
document.close();
Вывод второго PDF-файла (before_unexpected.pdf) показывает, что он поворачивается, но, как уже упоминалось выше, при дальнейшем вращении страницы появляется без разницы при добавлении дополнительного контента:
Original rotation 90
Rectangle: 842.0x1191.0
Image location from origin: 336.80002, 238.2
Вот файлы PDF, которые я использовал для тестирования:
Первые два изображения показывают ожидаемое / желаемое поведение, последние два показать, как изображение вставлено в неправильное место (на основании неправильного начала координат / поворота).
Щелкните здесь для получения исходного файла для первого файла pdf
Нажмите здесь, чтобы получить обработанный файл для первого файла pdf
Нажмите здесь для просмотра оригинального файла для второго pdf
Нажмите здесь, чтобы получить обработанный файл для второго файла pdf