2016-03-02 2 views
1

У меня вопрос о написании изображения в pdf с использованием pdfbox. Мое требование очень просто, я получаю изображение из веб-службы, используя Spring restTemplate: я храню его в переменной byte [], но мне нужно нарисовать изображение в pdf-документ. Я знаю, что следующее предоставляются:Печать байта [] в pdf с использованием pdfbox

final byte[] image = this.restTemplate.getForObject(this.imagesUrl + cableReference + this.format, byte[].class); 

JPEGFactory.createFromStream для формата JPEG, CCITTFactory.createFromFil для TIFF изображений, LosslessFactory.createFromImage, если начиная с буферизованными изображениями, но я не знаю, что использовать, поскольку единственная информация, которую я знаю о них, - это то, что они (формат THUMBNAIL), и я не знаю, как конвертировать из байта [] в этот формат. Большое спасибо за любую помощь или указание.

ответ

1

(Это относится к версии 2.0, а не 1.8)

Я не знаю, что вы имеете в виду с форматом КРАТКИМ, но дать этому попытку:

final byte[] image = ... // your code 
    ByteArrayInputStream bais = new ByteArrayInputStream(image); 
    BufferedImage bim = ImageIO.read(bais); 
    PDImageXObject pdImage = LosslessFactory.createFromImage(doc, bim); 

можно было бы создать более продвинутое решение с помощью

PDImageXObject.createFromFileByContent() 

, но это один использует файл, а не поток, поэтому он будет медленнее (но производит наилучший тип изображения).

Чтобы добавить это изображение в формат PDF, используйте этот код:

PDDocument doc = new PDDocument(); 
    try 
    { 
     PDPage page = new PDPage(); 
     doc.addPage(page); 

     PDPageContentStream contents = new PDPageContentStream(doc, page); 

     // draw the image at full size at (x=20, y=20) 
     contents.drawImage(pdImage, 20, 20); 

     // to draw the image at half size at (x=20, y=20) use 
     // contents.drawImage(pdImage, 20, 20, pdImage.getWidth()/2, pdImage.getHeight()/2); 

     contents.close(); 
     doc.save(pdfPath); 
    } 
    finally 
    { 
     doc.close(); 
    } 
+0

Спасибо за ваш ответ, на самом деле после тестирования javax.imageio.IIOException: неподдерживаемый тип изображения брошен на этой линии: ** BufferedImage bim = ImageIO.read (bais); ** – saadoune

+0

@saadoune Можете ли вы сохранить массив байтов изображения в файл? FileOutputStream fos = new FileOutputStream (новый файл (....)); fos.write (массив); fos.close(); и затем откройте этот файл с IrfanView, когда нажмите «I» (мне нравится Информация). Какой тип? –

+0

При открытии изображения отображается предупреждение о том, что это файл JPG с неправильным расширением, но в справке говорится: «сжатие: JPEG, CMYK, качество: 100, подвыборка выключена». Спасибо. – saadoune

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