PDFBOX调整文字及图片位置

通过PDFBOX调整整页的文字/图片(不包括线条)位置或字体 仅供参考

PDDocument document = PDDocument.load(new File("原PDF文件目录"));
        for (PDPage page : document.getPages()) {
            float width = page.getMediaBox().getWidth();
            float height = page.getMediaBox().getLowerLeftY() + 
            page.getMediaBox().getHeight();
            //获取图片
            PDResources resources = page.getResources();
            Iterable<COSName> cosNames = resources.getXObjectNames();
            PDImageXObject pdImageXObject = null;
            if (cosNames != null) {
                for (COSName cosName : cosNames) {
                    //根据自己需求过滤图片 或者 直接使用集合存储所有图片
                    if (resources.isImageXObject(cosName) && 
                        cosName.getName().equals("I1")) {
                        pdImageXObject = (PDImageXObject) resources.getXObject(cosName);
                    }
                }
            }
            //可自己继承PDFTextStripper 实现文本提取
            PrintTextTripper printTextTripper= new PrintTextTripper(document);
            printTextTripper.setEndPage(count);
            printTextTripper.setStartPage(count);
            List<LineText> lineTexts = printTextTripper.process();
            boolean firstFlag = true;
            for (LineText lineText : lineTexts) {
                //通过文本提取 获取所有字符 这里是每个字符的坐标 切记 坐标原点为左下角
                for (TextPosition textPosition : lineText.getTextPositions()) {
                    PDPageContentStream contentStream = null;
                    if (firstFlag) {
                        contentStream = new PDPageContentStream(document, page,
                                PDPageContentStream.AppendMode.OVERWRITE, true);
                        firstFlag = false;
                    } else {
                        contentStream = new PDPageContentStream(document, page,
                                PDPageContentStream.AppendMode.APPEND, true);
                    }
                    contentStream.beginText();
                    contentStream.newLineAtOffset("X坐标", "Y坐标");
                    //字体及大小
                    contentStream.setFont(textPosition.getFont(), textPosition.getFontSize());
                    //处理的字符
                    contentStream.showText(textPosition.getUnicode());
                    contentStream.endText();
                    contentStream.close();
                }
            }
            //添加提取的图片 如果使用集合存入则需要循环处理
            if (Objects.nonNull(pdImageXObject)) {
                PDPageContentStream contents = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true);
                contents.drawImage(pdImageXObject, "X坐标", "Y坐标", "图片宽", "图片高");
                contents.close();
            }
        }
        document.save("处理后的PDF存储位置");
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值