您当前的位置: 首页 >  学无止境 >  文章详情

java多个pdf文件合并,与实时数据合并

时间: 2025-11-14 【学无止境】 阅读量:共2人围观

简介 需要将多个PDF文件或者文件流合并为一个文件。

具体实现代码

public void generatingPdf(HttpServletResponse response, GetAllAgencyMedalRankVo vo, List<ExamStandardPlayerVo> playerVos) { // 先将要合并的已有PDF文件列表准备好 String fileName = "pdfModule/training.pdf"; ClassPathResource resource = new ClassPathResource(fileName); String path = resource.getPath(); String fileName2 = "pdfModule/introduction.pdf"; ClassPathResource resource2 = new ClassPathResource(fileName2); String path2 = resource2.getPath(); List<String> existingPdfFiles = Arrays.asList(path2,path); try { response.setContentType("application/pdf"); // 创建合并文档 Document mergedDocument = new Document(); PdfCopy copy = new PdfCopy(mergedDocument, response.getOutputStream()); mergedDocument.open(); // 1. 先生成动态内容到内存 byte[] dynamicContent = generateDynamicContent(vo, playerVos); PdfReader dynamicReader = new PdfReader(dynamicContent); // 添加动态生成的内容 for (int i = 1; i <= dynamicReader.getNumberOfPages(); i++) { copy.addPage(copy.getImportedPage(dynamicReader, i)); } copy.freeReader(dynamicReader); dynamicReader.close(); // 2. 添加已有的PDF文件 for (String existingFile : existingPdfFiles) { PdfReader existingReader = new PdfReader(existingFile); for (int i = 1; i <= existingReader.getNumberOfPages(); i++) { copy.addPage(copy.getImportedPage(existingReader, i)); } copy.freeReader(existingReader); existingReader.close(); } mergedDocument.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 生成动态内容到字节数组 */ private byte[] generateDynamicContent(GetAllAgencyMedalRankVo vo, List<ExamStandardPlayerVo> playerVos) { Document document = new Document(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { PdfWriter writer = PdfWriter.getInstance(document, baos); document.setPageSize(PageSize.A4); // 设置页眉 PdfPTable pdfPTable = buildHead(vo); pdfPTable.setWidthPercentage(50); ExamTablePdf.Header headerTable = new ExamTablePdf.Header(pdfPTable); headerTable.setTableHeader(writer, pdfPTable); document.open(); // 你原有的内容生成代码 PdfPTable title = getTable(null, 560, new PdfPTable(1)); PdfPCell cellTile = getTableCell(new Paragraph("", miniHeadfont), 15, Element.ALIGN_CENTER, false); title.addCell(cellTile); document.add(title); document.add(new Paragraph("\n")); PdfPTable titleTable = getTable(null, 560, new PdfPTable(3)); PdfPCell cell = getTableCell(new Paragraph("体能测评", smallHeadfont), 13, Element.ALIGN_LEFT, false); titleTable.addCell(cell); cell = getTableCell(new Paragraph("", smallHeadfont), 13, Element.ALIGN_CENTER, false); titleTable.addCell(cell); cell = getTableCell(new Paragraph("", smallHeadfont), 13, Element.ALIGN_RIGHT, false); titleTable.addCell(cell); document.add(titleTable); document.add(new Paragraph("\n")); // 构建内容表头 PdfPTable contentTable = buildRankDetailTable(); writeCombatDetailTableContext(contentTable, playerVos, false, document); document.add(contentTable); document.close(); } catch (Exception e) { e.printStackTrace(); if (document.isOpen()) { document.close(); } } return baos.toByteArray(); }

上一篇:python网站使用了自动发布重启后,加载配置文件.env失效

文章评论
Copyright (C) 2023-现在 小祥驿站 保留所有权利 蜀ICP备 17034318号-2  公安备案号 50010302004554 sitemap.xml