2016-10-20 1 views
0

Кто-нибудь знает, как файл изображения можно легко преобразовать в формат PDF. Мне нужно получить изображение из базы данных и отобразить его на экране в формате PDF. Что я делаю не так? Я пытался использовать iText, но без результатов. Мой код:Vaadin Преобразование и отображение изображения в формате PDF

StreamResource resource = file.downloadFromDatabase();//get file from db 
Document converToPdf=new Document();//Create Document Object 
PdfWriter.getInstance(convertToPdf, new FileOutputStream(""));//Create PdfWriter for Document to hold physical file 
convertToPdf.open(); 
Image convertJpg=Image.getInstance(resource); //Get the input image to Convert to PDF 
convertToPdf.add(convertJpg);//Add image to Document 
Embedded pdf = new Embedded("", convertToPdf);//display document 
pdf.setMimeType("application/pdf"); 
pdf.setType(Embedded.TYPE_BROWSER); 
pdf.setSizeFull(); 

Спасибо.

+2

разделить его на два этапа. Правильно ли создан PDF-файл? Отобразите его. (Но зачем идти через PDF, чтобы отображать изображение, отображать изображение напрямую было бы более эффективным –

+0

Зачем вам нужно конвертировать и изображение в PDF? Это потребует от некоторых пользователей установки программы PDF. изображение будет работать в любом браузере? –

+0

Крис, проблема в том, что при отображении изображения с Vaadin - его размер (масштаб) всегда зависит от браузера. Firefox отображает изображение в ширину окна, а Chrome показывает то же изображение, что и больше и шире, чем размер экрана. Но мне нужно быть уверенным, что изображение tt всегда отображается в полной ширине экрана и не вырезается браузером. – Lena

ответ

1

Вы правильно не используете IText:

  1. Вы никогда не закроете писатель, так что добавление изображения никогда не будет написано в OutputStream.

  2. Вы передаете пустую строку в ваш FileOutputStream. Если вы хотите сохранить PDF в памяти, используйте ByteArrayOutputStream. Если нет, укажите вместо этого временное имя.

  3. Вы передаете свой объект Document, который является объектом iText для вашего объекта Embedded и обрабатывает его как файл. Это не pdf-файл или байт []. Вы, вероятно, захотите передать либо ваш ByteArrayOutputStream, либо прочитать временный файл как ByteArrayOutputStream в память и передать его Embedded.

0

Может быть кто-то будет использовать (Vaadin + IText)

Button but = new Button("FV"); 

    StreamResource myResource = getPDFStream(); 
    FileDownloader fileDownloader = new FileDownloader(myResource); 
    fileDownloader.extend(but); 

    hboxBottom.addComponent(but); 


private StreamResource getPDFStream() { 
    StreamResource.StreamSource source = new StreamResource.StreamSource() { 

     public InputStream getStream() { 

      // step 1 
     com.itextpdf.text.Document document = new com.itextpdf.text.Document(); 
     // step 2 
     ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

      try { 
       com.itextpdf.text.pdf.PdfWriter.getInstance(document, baos); 

       // step 3 
       document.open(); 

       document.add(Chunk.NEWLINE); //Something like in HTML :-) 

       document.add(new Paragraph("TEST")); 


       document.add(Chunk.NEWLINE); //Something like in HTML :-)        

       document.newPage();   //Opened new page 

       //document.add(list);   //In the new page we are going to add list 

       document.close(); 

       //file.close(); 

       System.out.println("Pdf created successfully.."); 




      } catch (DocumentException ex) { 
       Logger.getLogger(WndOrderZwd.class.getName()).log(Level.SEVERE, null, ex); 
      } 

      ByteArrayOutputStream stream = baos; 
      InputStream input = new ByteArrayInputStream(stream.toByteArray()); 
       return input; 

     } 
    }; 
    StreamResource resource = new StreamResource (source, "test.pdf"); 
    return resource; 
} 
Смежные вопросы