当我尝试下载 pdf 时,它显示错误,如上所示。 代码: 公共无效 downloadPdfSample() {
Object object = FacesContext.getCurrentInstance().getExternalContext().getRequest();
if (!(object instanceof HttpServletRequest)) {
return;
}
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
try {
int countTotalPratical = 0;
List<SubjectResultDto> subjectResultDtos = sortSubjectOrder(marksLedgerDataModelJsf.getSubjectResultDtos());
for (SubjectResultDto subjectResultDto : subjectResultDtos) {
if (subjectResultDto.isHasPractical()) {
countTotalPratical++;
}
}
Collections.sort(subjectResultDtos, SubjectResultDto.comparatorBySubjectProgramSemesterMapOrder);
marks = false;
grade = false;
marksAndGrade = false;
showGraceMarks = false;
int subjectResultSize = 0;
float length = 0;
if ("Marks".equals(marksLedgerDataModelJsf.getReportType())) {
marks = true;
subjectResultSize = 1 + subjectResultDtos.size() + countTotalPratical;
length = 410 + (subjectResultDtos.size()) * 80 + countTotalPratical * 65;
}
if ("Grade".equals(marksLedgerDataModelJsf.getReportType())) {
grade = true;
subjectResultSize = 2 * subjectResultDtos.size() + 2 * countTotalPratical;
length = 330 + (subjectResultDtos.size()) * 90 + countTotalPratical * 95;
}//other codes to set length as required
length = Math.min(length, 1550);
int breadth = 800;
Rectangle rectange = new Rectangle(length, breadth);
Document document = new Document(rectange);
PdfWriter.getInstance(document, response.getOutputStream());
document.open();
//其他代码 文档.add(表);
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline;filename=Marks_Ledger.pdf");
try (OutputStream out = response.getOutputStream()) {
document.close();
out.close();
}
FacesContext.getCurrentInstance().responseComplete();
} catch (DocumentException | IOException | RuntimeException e) {
log.error("An error occurred during PDF generation:", e);
}
}
未按要求下载 PDF。某些情况下的下载主要发生在大页面大小时。
public void downloadPdfSample() {
Object object = FacesContext.getCurrentInstance().getExternalContext().getRequest();
if (!(object instanceof HttpServletRequest)) {
return;
}
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
try {
int countTotalPratical = 0;
List<SubjectResultDto> subjectResultDtos = sortSubjectOrder(marksLedgerDataModelJsf.getSubjectResultDtos());
for (SubjectResultDto subjectResultDto : subjectResultDtos) {
if (subjectResultDto.isHasPractical()) {
countTotalPratical++;
}
}
Collections.sort(subjectResultDtos, SubjectResultDto.comparatorBySubjectProgramSemesterMapOrder);
marks = false;
grade = false;
marksAndGrade = false;
showGraceMarks = false;
int subjectResultSize = 0;
float length = 0;
if ("Marks".equals(marksLedgerDataModelJsf.getReportType())) {
marks = true;
subjectResultSize = 1 + subjectResultDtos.size() + countTotalPratical;
length = 410 + (subjectResultDtos.size()) * 80 + countTotalPratical * 65;
}
if ("Grade".equals(marksLedgerDataModelJsf.getReportType())) {
grade = true;
subjectResultSize = 2 * subjectResultDtos.size() + 2 * countTotalPratical;
length = 330 + (subjectResultDtos.size()) * 90 + countTotalPratical * 95;
}
if ("Marks And Grade".equals(marksLedgerDataModelJsf.getReportType())) {
marksAndGrade = true;
subjectResultSize = 2 + 3 * subjectResultDtos.size() + 3 * countTotalPratical;
length = 355 + (subjectResultDtos.size()) * 125 + countTotalPratical * 130;
}
if (marksLedgerDataModelJsf.isShowGraceMarks()) {
subjectResultSize = 1 + 3 * subjectResultDtos.size() + 3 * countTotalPratical;
length = 345 + (subjectResultDtos.size()) * 125 + countTotalPratical * 130;
showGraceMarks = true;
}
length = Math.min(length, 1550);
int breadth = 800;
Rectangle rectange = new Rectangle(length, breadth);
ProgramSemesterDto programSemesterDto = programSemesterService.getById(marksLedgerDataModelJsf.getProgramSemesterDto().getId());
Document document = new Document(rectange);
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "attachment;filename=Marks_Ledger.pdf");
PdfWriter.getInstance(document, response.getOutputStream());
document.open();
CollegeDto collegeDto = adminAuthenticationBean.getCollegeDto();
Paragraph heading = new Paragraph(collegeDto.getName(), new Font(Font.FontFamily.TIMES_ROMAN, 16, Font.BOLD));
heading.setAlignment(Element.ALIGN_CENTER);
document.add(heading);
Paragraph subHeading = new Paragraph("MARKS LEDGER", new Font(Font.FontFamily.TIMES_ROMAN, 14, Font.BOLD));
subHeading.setAlignment(Element.ALIGN_CENTER);
document.add(subHeading);
document.add(Chunk.NEWLINE);
Font boldFont = new Font(Font.FontFamily.TIMES_ROMAN, 11, Font.BOLD);
Font cellFont = new Font(Font.FontFamily.TIMES_ROMAN, 11, Font.NORMAL);
Font smallAndBoldFont = new Font(Font.FontFamily.TIMES_ROMAN, 9, Font.BOLD);
PdfPTable table = new PdfPTable(6 + subjectResultSize);
table.setWidthPercentage(100);
table.addCell(createHeadingCell("Program : " + programSemesterDto.getAcademicYearOfferedProgramDto().getProgramDto().getName(), boldFont, 2, Element.ALIGN_CENTER, Element.ALIGN_CENTER));
table.addCell(createHeadingCell(marksLedgerDataModelJsf.getGradingPeriodDto().getExamTitleDto().getName(), boldFont, subjectResultSize, Element.ALIGN_CENTER, Element.ALIGN_CENTER));
table.addCell(createHeadingCell("Class/Program Semester : " + programSemesterDto.getName(), boldFont, 4, Element.ALIGN_CENTER, Element.ALIGN_CENTER));
//other codes to set table it is working properly
document.add(table);
document.close();
response.getOutputStream().close();
FacesContext.getCurrentInstance().responseComplete();
} catch (DocumentException | IOException | RuntimeException e) {
log.error("An error occurred during PDF generation:", e);
}
}
}