PDFBOX使用记录

这篇博客记录了使用PDFBox库在PDF文件中添加文本和图片的过程,包括加载模板、设置字体、添加文本和图片的方法。作者遇到了PDFBox在处理表单插入时自动调整字号导致文字大小不一的问题,并分享了代码实现。
摘要由CSDN通过智能技术生成

pdfbox的一些使用记录

链接: [接口文档](链接: link.

业务需求:在pdf上添加一些文本和图片生成一个新的pdf

这种需求你们可以花点钱嘛,花点,哪怕用itext呢,花不了多少钱,哪怕偷偷摸摸的呢?

使用pdfBox就是有些难受,但是itext商用要钱,就使用了pdfbox 这个开源框架

下面开始
加载pdf模板

//加载pdf模板
ClassPathResource classPathResource = new ClassPathResource("/template/selfHelpApplication_dadi.pdf");
InputStream in = classPathResource.getInputStream();
PDDocument document = PDDocument.load(in);
// 获取第0页
PDPage page = document.getPage(0);
PDPageContentStream contentStream = new PDPageContentStream(document, page,
        PDPageContentStream.AppendMode.PREPEND, false);
//设置字体
InputStream inFont = DaDiApi.class.getClassLoader().getResourceAsStream("template/simfang.ttf");
PDType0Font font = PDType0Font.load(document, inFont);
contentStream.setFont(font, 10.56f);

添加文本方法

    /**
     * 设置x轴和Y轴的时候按照66.66的大小显示pdf模板的像素位置进行设置,然后再微调
     * @param overContent
     * @param txt 文本
     * @param def 默认文本
     * @param x X轴坐标
     * @param y Y轴坐标
     * @throws Exception
     */
    public static void showTextByLeft(PDPageContentStream overContent, String txt, String def, float x, float y) throws Exception{
        overContent.beginText();

        if (null == txt) {
            txt = def;
        }
        
        overContent.newLineAtOffset(x, y);

        overContent.showText(txt);

        overContent.endText();
    }

设置文字

 PDFBoxUtil.showTextByLeft(contentStream, "√", "", 148,630);

用这种方法设置的窜在的问题是文本会从像素所在位置直接向后写,会和模板原有文字重叠
可以通过计算文字的宽度,设置多行解决这个问题

//插入网络图片 
BufferedImage bufferImage = ImageIO.read("URL");
PDImageXObject pdImage = LosslessFactory.createFromImage(document, bufferImage);
contentStream.drawImage(pdImage, 255, 80, 60, 60);

//插入本地图片
 // Loading img from file
PDImageXObject pdImage = PDImageXObject.createFromFile("src/main/resources/song.png", document);
contentStream.drawImage(pdImage, 255, 80, 50, 50);

以from表单方式插入文本
待续,
我遇上一个问题,form表单方式插入,pdfbox会根据from表单的大小和文本长度自动设定字号,造成文字大小不一致,小生才疏学浅,没找到解决办法

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值