通过pdfbox在pdf中指定坐标上添加文字

添加依赖

  <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>2.0.22</version>
        </dependency>

编写程序入口

 try {
            // 打开 PDF 文件
            File file = new File("文件地址");
            PDDocument document = PDDocument.load(file);
            // 修改pdf的页数
            PDPage page = document.getPage(0);
            // 在页面上添加文字
            addText(document, page);
            // addText(document, page, result);
            // 保存修改后的 PDF 文件
            document.save("文件地址");
            // 关闭文档
            document.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

单次添加

 private static PDPageContentStream addText(PDDocument document, PDPage page) throws IOException {
        // 创建一个新的页面内容流
        PDPageContentStream contentStream = new PDPageContentStream(document, page,true, true, true);
        // 设置字体和文字大小
        contentStream.setFont(PDType1Font.HELVETICA, 12);
        // 设置文字颜色
        contentStream.setNonStrokingColor(Color.BLACK);
        // 在指定位置添加文字
        contentStream.beginText();
        //此坐标为从下往上
        contentStream.newLineAtOffset(230, 620);
        //中文会报错
        contentStream.showText("2023/10/25");
        contentStream.endText();
        // 关闭页面内容流
        contentStream.close();
        return contentStream;
    }

批量添加

private static PDPageContentStream addText(PDDocument document, PDPage page, List<Map<String, Object>> result) throws IOException {
        // 创建一个新的页面内容流
        PDPageContentStream contentStream = new PDPageContentStream(document, page, true, true, true);
        // 设置字体和文字大小
        contentStream.setFont(PDType1Font.HELVETICA, 12);

        // 设置文字颜色
        contentStream.setNonStrokingColor(Color.BLACK);
        //加粗
//        contentStream.setRenderingMode(RenderingMode.FILL);
        // 在指定位置添加文字
        for (Map<String, Object> map : result) {
            contentStream.beginText();
            if (ObjectUtils.isNotEmpty(map.get("tx")) && ObjectUtils.isNotEmpty(map.get("ty"))) {
                contentStream.newLineAtOffset(Float.parseFloat(map.get("tx").toString()), Float.parseFloat(map.get("ty").toString()));
            }
            if (ObjectUtils.isNotEmpty(map.get("time"))) {
                contentStream.showText(map.get("time").toString());
            }
            contentStream.endText();
        }
        // 关闭页面内容流
        contentStream.close();
        return contentStream;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值