2013-07-05 3 views
1

Ну я stucked с проблемой,Преобразование OutputStream в файл

Мне нужно создать PDF с источником HTML и я сделал так:

File pdf = new File("/home/wrk/relatorio.pdf"); 
OutputStream out = new FileOutputStream(pdf); 
InputStream input = new ByteArrayInputStream(build.toString().getBytes());//Build is a StringBuilder obj 
Tidy tidy = new Tidy(); 
Document doc = tidy.parseDOM(input, null); 
ITextRenderer renderer = new ITextRenderer(); 
renderer.setDocument(doc, null); 
renderer.layout(); 
renderer.createPDF(out); 
out.flush(); 
out.close(); 

хорошо я использую JSP так Мне нужно загрузить этот файл пользователю, который не пишет на сервере ...

Как преобразовать этот выход Outputstream в файл в java без записи этого файла на жесткий диск?

+1

Вы хотите написать файл и не иметь этот файл на жестком диске? Я не получаю ваш вопрос – Tala

+0

Мне нужно загрузить pdf-файл, не записываемый на жесткий диск. – gmlyranetwork

+0

Загрузка файла означает его хранение на жесткий диск ... – Tala

ответ

2

Если вы используете VRaptor 3.3.0+, вы можете использовать класс ByteArrayDownload. Начиная с вашего кода, вы можете использовать это:

@Path("/download-relatorio") 
public Download download() { 
    // Everything will be stored into this OutputStream 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 

    InputStream input = new ByteArrayInputStream(build.toString().getBytes()); 
    Tidy tidy = new Tidy(); 
    Document doc = tidy.parseDOM(input, null); 
    ITextRenderer renderer = new ITextRenderer(); 
    renderer.setDocument(doc, null); 
    renderer.layout(); 
    renderer.createPDF(out); 
    out.flush(); 
    out.close(); 

    // Now that you have finished, return a new ByteArrayDownload() 
    // The 2nd and 3rd parameters are the Content-Type and File Name 
    // (which will be shown to the end-user) 
    return new ByteArrayDownload(out.toByteArray(), "application/pdf", "Relatorio.pdf"); 
} 
0

Объект A File фактически не содержит данные, но делегирует все операции в файловую систему (см. this discussion). Вы можете, однако, создать временный файл, используя File.createTempFile. Также посмотрите here на возможную альтернативу без использования объекта File.

0

использовать временные файлы.

File temp = File.createTempFile(prefix ,suffix); 

префикс - префиксная строка определяет имя файла; должно быть не менее трех символов.

суффикс - строка суффикса определяет расширение файла; если нуль будет использоваться суффикс «.tmp».

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