导读:
近期要做一个根据关键字定位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);
-
//根据关键字和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 版权协议,转载请附上原文出处链接和本声明。