ItextPdf 下载问题

问题描述 投票:0回答:1

error 当我尝试下载 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。某些情况下的下载主要发生在大页面大小时。

java pdf itext
1个回答
0
投票

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);
        
    }
        
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.