實現點擊超連結下載pdf檔案,該pdf檔案的內容又跟jsp頁面的資料有關。實質就是一個列印吧。
若對此列印有一個pdf的template,要先載入template,即把template裡面的東西讀出來。
PdfReader reader = new PdfReader("SimpleRegistrationForm.pdf");
設定頁面的大小
Rectangle rectPageSize = reader.getPageSizeWithRotation(1);
Document doc = new Document(rectPageSize, 40, 40, 40, 40);// 其餘4個參數,設定了頁面的4個邊距
清空response,不這麼做的話有時對程式有影響,因為在此之前有可能也用到了response,若不reset後面的setContentType()有可能無效.
response.reset();
setContentType()設定檔案類型為pdf
response.setContentType("application/pdf");
設定下載檔案的名稱
response.setHeader("content-disposition", "attachment; filename=test.pdf");
ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 設定字型
BaseFont font = BaseFont.createFont("HeiseiMin-W3", "UniJIS-UCS2-HW-H",
BaseFont.NOT_EMBEDDED);
// Font font = FontFactory.getFont(FontFactory.HELVETICA, 14, Font.BOLD,
// Color.BLUE);
PdfWriter pw = PdfWriter.getInstance(doc, baos);
doc.open();
PdfContentByte pcb = pw.getDirectContent();
//在此加入商務邏輯
pcb.beginText();
pcb.setFontAndSize(font, 10);
String page = String.valueOf(1);
pcb.showTextAligned(PdfContentByte.ALIGN_LEFT, page, 530, 40, 0);
pcb.endText();
doc.close();
// Send PDF to client
baos.writeTo(response.getOutputStream());
baos.close();
以上是用流輸出檔案內容,比產生臨時檔案再輸出應該簡單快捷些。