Использование PdfStamper для добавления изображения с AffineTransform
Я использую PdfStamper getOverContent(), чтобы я мог добавить изображение в выходной PDF-файл, используя AffineTransform типа Identity.
PdfContentByte content = stamper.getOverContent(1);
data.image.setAbsolutePosition(desc.X,desc.Y);
content.addImage(data.image,desc.transform);
//content.addImage(data.image);
Если я использую закомментированную строку без преобразования, она отлично работает, добавляя изображение в сгенерированный PDF, но с AffineTransform (setToIdentity()) оно не отображается.
кто-нибудь может мне помочь с этим? Я намереваюсь использовать более сложные преобразования, но Identity должен работать в первую очередь...
РЕДАКТИРОВАТЬ (скопировано с неверного ответа)
Я удалил вызов setAbsolutePosition и использовал setToIdentity () в качестве единственного преобразования, а изображение не показывается... Затем добавил setToTranslation(X,Y), где X и Y - те же значения, которые используются в успешном случае, когда я делаю НЕ дает преобразование в качестве второго параметра, и все же оно НЕ показывает изображение. Есть ли пример с AffineTransform в качестве параметра для вызова PdfContentByte addImage() с использованием AffineTransform в качестве параметра? Я купил вашу книгу, но не смог найти никаких плавников.
1 ответ
Я изучил вашу проблему и уверен, что ваше изображение будет добавлено. Однако: вы не можете видеть это, потому что размер изображения составляет 1 пользовательскую единицу на 1 пользовательскую единицу.
Я сделал пример, чтобы показать вам, как решить эту проблему: AddImageAffineTransform
public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
Image image = Image.getInstance(IMG);
AffineTransform at = AffineTransform.getTranslateInstance(36, 300);
at.concatenate(AffineTransform.getScaleInstance(image.getScaledWidth(), image.getScaledHeight()));
PdfContentByte canvas = stamper.getOverContent(1);
canvas.addImage(image, at);
stamper.close();
reader.close();
}
В этом примере я начинаю с перевода: 36 пользовательских единиц с левой границы и 300 пользовательских единиц снизу. Если бы я добавил изображение с помощью этого преобразования, я бы добавил изображение с этими координатами, но оно было бы слишком маленьким, чтобы его можно было увидеть невооруженным глазом.
Чтобы убедиться, что изображение видимое, я объединяю масштабное преобразование, масштабируя изображение до его ширины в направлении X и до его высоты в направлении Y.