java实现PDF模板替换

24 篇文章 0 订阅
17 篇文章 0 订阅

1. 引入pom

		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itextpdf</artifactId>
			<version>5.5.10</version>
		</dependency>

		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>font-asian</artifactId>
			<version>7.1.2</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itext-asian</artifactId>
			<version>5.2.0</version>
		</dependency>

2. 生成pdf模板(用adobe编辑文本)

3.代码实现

    public void createPdf(){
        String templatePath = "G:\\car.pdf";
        // 生成的新文件路径
        String newPDFPath = "G:\\carNew.pdf";
        PdfReader reader;
        FileOutputStream out;
        ByteArrayOutputStream bos;
        PdfStamper stamper;
        try {
            out = new FileOutputStream(newPDFPath);// 输出流
            reader = new PdfReader(templatePath);// 读取pdf模板
            bos = new ByteArrayOutputStream();
            stamper = new PdfStamper(reader, bos);
            AcroFields form = stamper.getAcroFields();

            form.setField("username","牵引江");
            form.setField("address","阿猫阿狗");
            form.setField("Year","2020");
            form.setField("month","07");
            form.setField("day","16");

            stamper.setFormFlattening(true);// 如果为false那么生成的PDF文件还能编辑,一定要设为true
            stamper.close();

            Document doc = new Document();
            PdfCopy copy = new PdfCopy(doc, out);
            doc.open();
            PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), 1);
            copy.addPage(importPage);
            doc.close();

        } catch (IOException e) {
            System.out.println(1);
        } catch (DocumentException e) {
            System.out.println(2);
        }

4.结果输出

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Java PDF动态模板替换生成PDF,可以使用Apache PDFBox库。下面是大致的步骤: 1. 创建一个PDF文档对象,可以使用PDFBox中的PDDocument类。 2. 打开PDF模板文件,可以使用PDFBox中的PDFTextStripper类读取PDF模板中的文本内容。 3. 使用Java的字符串替换方法替换PDF模板中的文本占位符。 4. 使用PDFBox中的PDFont类设置字体和字号。 5. 使用PDFBox中的PDPageContentStream类将替换后的文本内容写入PDF文档。 6. 关闭PDPageContentStream和PDDocument对象,保存PDF文档。 下面是一个简单的示例代码: ``` import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.font.PDFont; import org.apache.pdfbox.pdmodel.font.PDType1Font; import org.apache.pdfbox.text.PDFTextStripper; public class PdfTemplateGenerator { public static void main(String[] args) { try { // 打开PDF模板文件 PDDocument document = PDDocument.load(new File("template.pdf")); PDFTextStripper pdfStripper = new PDFTextStripper(); String text = pdfStripper.getText(document); // 替换模板中的文本占位符 Map<String, String> data = new HashMap<>(); data.put("name", "John Doe"); data.put("email", "johndoe@example.com"); data.put("age", "30"); for (Map.Entry<String, String> entry : data.entrySet()) { text = text.replace("${" + entry.getKey() + "}", entry.getValue()); } // 创建PDF文档对象 PDDocument pdfDocument = new PDDocument(); PDPage page = new PDPage(); pdfDocument.addPage(page); // 设置字体和字号 PDFont font = PDType1Font.HELVETICA; int fontSize = 12; // 将替换后的文本内容写入PDF文档 PDPageContentStream contentStream = new PDPageContentStream(pdfDocument, page); contentStream.beginText(); contentStream.setFont(font, fontSize); contentStream.newLineAtOffset(100, 700); contentStream.showText(text); contentStream.endText(); contentStream.close(); // 关闭PDPageContentStream和PDDocument对象,保存PDF文档 pdfDocument.save("output.pdf"); pdfDocument.close(); document.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 需要注意的是,该示例代码只处理了一个页面的情况,如果需要处理多页PDF模板,则需要在循环中创建多个PDPage对象,并将其添加到PDDocument对象中,同时在PDPageContentStream中指定不同的坐标偏移量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值