2015-12-06 2 views
1

Я использую PdfStamper getOverContent(), поэтому я могу добавить изображение в выходной файл PDF с использованием типа AffineTransform Identity.Использование PdfStamper для добавления изображения с помощью AffineTransform

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()) он не отображается.

может кто-то помочь мне с этим? Я намерен использовать более сложные преобразования, но стиль должен работать первым ...


EDIT (скопированный из недействительного ответа)

Я удалил вызов setAbsolutePosition и использовал setToIdentity() в качестве единственного преобразование и изображение не отображаются ... Затем добавлено setToTranslation (X, Y), где X и Y - те же значения, что и в успешном случае, когда я НЕ передаю преобразование в качестве второго параметра, и все же он НЕ показывает образ. Есть ли пример с AffineTransform в качестве параметра для вызова PdfContentByte addImage() с использованием параметра AffineTransform в качестве параметра? Я купил твою книгу, но не смог ее заплатить.

+0

Как выглядит ваше 'преобразование'? Возможно, он поворачивает изображение за пределами видимой области страницы. Кроме того: AFAIK вы не можете комбинировать 'setAbsolutePosition()' (удобный метод, так что вам не нужно определять перевод) с добавлением документа, определяющего ваше собственное преобразование. –

+0

Я удалил вызов setAbsolutePosition и использовал setToIdentity() как единственное преобразование, и изображение не показано ... Затем добавлено setToTranslation (X, Y), где X и Y - те же значения, что и в успешном случае, когда I НЕ давайте преобразование в качестве второго параметра, и все же он НЕ показывает изображение. Есть ли пример с 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.

+0

Уважаемый Бруно, я ценю вашу помощь. Теперь он отлично работает, и я следовал вашим указаниям. Честно говоря, для меня не имеет смысла для платформы iText требовать масштабирования для правильного отображения изображения, но еще раз благодарю вас за ваше время и пожелаю, чтобы я мог больше сотрудничать с вашими усилиями, если это звучит как правильно для вас. заботиться. –

Смежные вопросы