Использование 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.

Другие вопросы по тегам