You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.6 KiB

package cn.teammodel.utils;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import org.springframework.core.io.ClassPathResource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;
/**
* @author winter
* @create 2024-01-24 16:02
*/
public class PdfUtil {
public static void fillStudentPdfForm(Map<String, String> data, HttpServletResponse response) throws IOException, DocumentException {
response.reset();
response.setContentType("application/pdf");
response.setHeader("Content-disposition",
"attachment;filename=report_student_" + System.currentTimeMillis() + ".pdf");
ClassPathResource resource = new ClassPathResource("templates/pdf_templates/template.pdf");
InputStream in = resource.getInputStream();
ServletOutputStream os = response.getOutputStream();
fillPdfForm(in, os, data);
}
public static void fillPdfForm(InputStream in, OutputStream os, Map<String, String> data) throws IOException, DocumentException {
PdfReader pdfReader = new PdfReader(in);
PdfStamper stamper = new PdfStamper(pdfReader, os);
AcroFields fields = stamper.getAcroFields();
for (Map.Entry<String, String> entry : data.entrySet()) {
fields.setField(entry.getKey(), entry.getValue());
}
stamper.setFormFlattening(true);
stamper.close();
os.close();
}
}