美文网首页
PdfBox文字定位并且插入图片

PdfBox文字定位并且插入图片

作者: 后来猫走丢了 | 来源:发表于2022-02-14 17:06 被阅读0次

    Github地址

    PDF文字定位插入图片

    核心库

    <!--    PDF解析核心    -->
    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>2.0.22</version>
    </dependency>
    

    效果示例

    所有演示基于AllPdfSearch

    普通文档PDF

    // 传入需要查找的文字和图片插入时需要定位的文字下标
    PrintTextLocations stripper = new PrintTextLocations("审核单位盖章", 5);
    
    image
    PrintTextLocations stripper = new PrintTextLocations("授权签署人签字", 6);
    
    image
    可以看到图片定位到下标5的"章"字,以及下标6的"字"字

    特殊类PDF

    image
    PrintTextLocations stripper = new PrintTextLocations("北京/广州办事处", 7);
    
    image

    核心代码

    • 重写 writeString获取文字坐标相关信息
    @Override
    protected void writeString(String text, List<TextPosition> textPositions) throws IOException {
        for (int i = 0; i < textPositions.size(); i++) {
            TextPosition textInfo = textPositions.get(i);
            String pdfStringTxt = textInfo.getUnicode();
            List<String> targetStringList = List.of(this.targetString.split(""));
            int targetSize = targetStringList.size();
            String firstString = targetStringList.get(0);
            boolean findTarget = false;
            // 打印文字
    //            log.info("{}, X: {}, Y: {}", pdfStringTxt, textInfo.getX(), textInfo.getY());
            if (firstString.equals(pdfStringTxt)) {
                for (int j = 1; j <targetSize; j++) {
                    String nextString = targetStringList.get(j);
                    if (i + targetSize <= textPositions.size()
                            && nextString.equals(textPositions.get(i + j).getUnicode())) {
                        findTarget = true;
                    } else {
                        findTarget = false;
                        break;
                    }
                }
                if (findTarget) {
                    // 定位,只定位第一次出现
                    // X轴定时时需要加上文字的宽度,让添加的图片定位准确
                    fontSize = textPositions.get(i + targetIndex).getFontSizeInPt();
                    xTarget = textPositions.get(i + targetIndex).getX();
                    yTarget = textPositions.get(i + targetIndex).getY();
                    break;
                }
            }
        }
    }
    

    提示

    • 获取的文字Y轴是没有计算空行的,解析时忽略的空行
    • 目前定位文字跨行了就无法定位因为PDFbox的原因,本人暂时未做处理

    相关文章

      网友评论

          本文标题:PdfBox文字定位并且插入图片

          本文链接:https://www.haomeiwen.com/subject/smqhlrtx.html