ความต้องการของฉันคือการใส่แผนภูมิที่สร้างโดย JFreeChart ลงในเอกสาร PDF ของฉัน
เพื่อแสดงรายการแผนภูมิ ฉันกำลังรับรายการวัตถุ BufferedImage
private BufferedImage generateChartForPDF (DefaultCategoryDataset dataset,String threadName) {
String title = "Skill : "+threadName ;
JFreeChart chart = ChartFactory.createBarChart(title, "Work Completion",
"Perce %", dataset, PlotOrientation.VERTICAL, true, true,
false);
return chart.createBufferedImage(500, 300) ;
}
จากนี้ ฉันกรอกรายการรูปภาพที่บัฟเฟอร์ และกำลังกรอกแผนภูมิในรูปแบบ PDF ด้วยวิธีด้านล่าง
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Document pdfDocument = new Document();
PdfWriter pdfWriter = PdfWriter.getInstance(pdfDocument, baos);
setGraphImagesInPDF(pdfDocument, buffImageList) ;
private void setGraphImagesInPDF (Document pdfDocument,List<BufferedImage> buffImageList) throws DocumentException, IOException {
for (BufferedImage bufferedImage : buffImageList) {
Image image = Image.getInstance(bufferedImage,Color.LIGHT_GRAY);
pdfDocument.newPage();
image.setAbsolutePosition(300, 300) ;
pdfDocument.add(image);
}
}
นี่คือวิธีที่ฉันเติมแผนภูมิใน PDF ของฉัน ตอนนี้เมื่อฉันตั้งค่าการจัดการเนื้อหาเป็นไฟล์แนบ ฉันไม่ได้รับการตอบสนองเป็นไฟล์แนบใน UI ของฉัน แต่เบราว์เซอร์กำลังเปิด PDF ในหน้าอื่น
ServletOutputStream outputStream = response.getOutputStream();
baos.writeTo(outputStream);
setResponseHeaders(response,"Data");
outputStream.flush();
outputStream.close();
private void setResponseHeaders(HttpServletResponse response,String reportingType) {
System.out.println("setting response headers .. ");
response.setHeader("Content-Disposition",
"attachment; filename=\""+reportingType+" Reports.pdf\"");
response.setContentType("application/pdf");
}
แม้ว่าฉันจะตั้งค่าประเภทการกำจัดเนื้อหาเป็นไฟล์แนบในส่วนหัวของการตอบกลับ แต่สิ่งนี้ไม่ได้เปิดเป็นไฟล์แนบ ใช้งานได้ดีเช่นเดียวกันหลังจากลบส่วนแผนภูมิของโค้ดออก โปรดช่วยฉันในเรื่องนี้ ขอบคุณ