iText7生成多个PDF,直接把PDF写入zip输出流并下载,IText7的使用参考我另一篇文章
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
// 假设您已经有了从数据库读取数据的方法getDataForPdf()
// 这里是一个简化的示例,仅展示关键逻辑部分
public class PdfZipGenerator {
// 方法:将数据库数据转换为多个PDF,并打包到ZIP流中
public void generatePdfInZipFromDatabase(ZipOutputStream zipOut, List<DataObject> dataList) throws IOException {
for (DataObject data : dataList) {
ByteArrayOutputStream pdfStream = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(pdfStream);
PdfDocument pdfDoc = new PdfDocument(writer);
Document layoutDoc = new Document(pdfDoc);
// 在这里添加页面内容,根据data对象填充PDF
addPageContent(layoutDoc, data);
layoutDoc.close();
// 将单个PDF作为ZIP条目写入ZIP输出流
ZipEntry entry = new ZipEntry("data_" + data.getId() + ".pdf");
zipOut.putNextEntry(entry);
// 写入PDF字节流到ZIP条目
pdfStream.writeTo(zipOut);
pdfStream.close(); // 可以考虑使用try-with-resources来自动关闭
zipOut.closeEntry();
}
// 不要忘记最后关闭ZIP输出流
zipOut.finish();
zipOut.flush();
}
private void addPageContent(Document document, DataObject data) {
// 根据您的数据结构添加文本、表格等元素
}
}