java使用itex读取pdf,并搜索关键字,为其盖章

  • Post author:
  • Post category:java



导读:

近期要做一个根据关键字定位pdf的盖章位置的相关需求,其中关键字可配置多个(包含pdf文档中可能不存在的关键字),当页面显示盖章完成时,打开pdf显示已经损坏。

排查后发现,当itext搜索的关键字在pdf文档中不存在时,就已经将结果返回到前台界面,这时itex读取的流还未关闭,导致pdf读取未结束,pdf文档才被损坏。

下面是读取pdf的操作,记录一下:


所需包

: itext-2.06.jar itext-asian,jar itextpdf-5.4.0.jar


****搜索关键字操作:****
  /*sourcePDF: pdf的文档路径
  splitParentkeyValues[i]:关键字,其中对关键字进行特殊符号的过滤,不然会导致后面的匹配结果有误。*/
  matches = MatchItemUtil.matchPage(sourcePDF, splitParentkeyValues[i]);

/*找出关键字后,将要盖章的图片准确定位到关键字周围,也可以采用坐标的方MatchItem matchItem  = new MatchItem();
int pageNum = matches.get(j).getPageNum();
float pageWidth = reader.getPageSize(pageNum).getWidth();
float pageHeight = reader.getPageSize(pageNum).getHeight();
matchItem.setX(matches.get(j).getX()-splitParentkeyValues.length * 20);
matchItem.setY(matches.get(j).getY() - 150 / 1.527731f);
img.setAbsolutePosition(matchItem.getX(), matchItem.getY());// 位置
PdfContentByte over = stamp.getOverContent(pageNum);
over.addImage(img);
  1. //根据关键字和pdf路径,全文搜索关键字

    /**

    • 查找所有
    • @param fileName 文件路径
    • @param keyword 关键词
    • @return
    • @throws Exception

      */

    public static List matchPage(String fileName,String keyword) throws Exception {

    List items = new ArrayList();

    PdfReader reader = new PdfReader(fileName);

    int pageSize = reader.getNumberOfPages();

    fo



版权声明:本文为sdizoea原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。