2013-06-06 2 views
0

У меня есть jsp, который вызывает сервлет, который создает «на лету» pdf.Сохранить диалог, создав pdf

public class HelloWorld extends Action 
    { 
    public static final String RESULT= "C:\hello.pdf"; 

    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 
    { 
     try { 
      new HelloWorld().createPdf(RESULT); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      return mapping.findForward("Failure"); 
     } 
     return mapping.findForward("Success"); 
    } 

    public void createPdf(String filename) throws IOException, DocumentException { 
     Document document = new Document(); 
     PdfWriter.getInstance(document, new FileOutputStream(filename)); 
     document.open(); 
     PdfPTable table = createTable1(); 
     document.add(table); 
     document.close(); 
    } 

    public static PdfPTable createTable1() throws DocumentException { 
     ... 
    } 
    } 

Я хотел бы иметь окно сообщения, как «Сохранить как» вместо статического пути C:\hello.pdf

+0

** имя ** из файла может быть установлен в текстовом поле ** ** перед тем сервлет называется, и его значение будет извлекаться через * ActionForm *. ** путь ** файла будет определен ** после ** вызова сервлета, когда клиент получает ответ и обрабатывает двоичный файл (тогда пользователь будет выбирать открытие или сохранение файла). –

+0

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

ответ

1

Вместо того, чтобы создать FileOutputStream, вы можете создать свой PDF в памяти, используя выходной буфер потока, то вы можете использовать свой jsp, чтобы вернуть ваш pdf-файл в виде двоичного файла и позволить вашему браузеру обрабатывать его (показывая окно сохранения как окно).

Ваш код JSP будет что-то вроде (предполагается, что вы будете иметь байт [], представляющий файл PDF):

response.setContentType("application/pdf"); 
response.addHeader("Content-Disposition", "inline; filename=\"filename.pdf\""); 
response.setBufferSize(pdf.length); 
response.setContentLength(pdf.length); 
response.getOutputStream().write(pdf); 

Будьте уверены, чтобы не писать символ перед этим инструкции в вашем ответе.

Надеется, что это помогает,
Привета

+0

Спасибо, я принял намек и изменил для своей цели, но это было так полезно. – Nogothwen

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