新增方法
This commit is contained in:
parent
839555c33e
commit
f6d48921d6
@ -167,6 +167,47 @@ public class PDFUtil {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean addImageReplaceKeyword(String sourceFile, String keyword, String outFile, String imageFile) {
|
||||||
|
PdfReader pdfReader = null;
|
||||||
|
PdfStamper pdfStamper = null;
|
||||||
|
try {
|
||||||
|
pdfReader = new PdfReader(sourceFile);
|
||||||
|
pdfStamper = new PdfStamper(pdfReader, new FileOutputStream(outFile));
|
||||||
|
CharInfo lastCharInfo = readPdfAndGetFirstKeywordCharInfo(pdfReader, keyword);
|
||||||
|
if (lastCharInfo == null) {
|
||||||
|
LOG.debug("未在PDF正文中匹配到关键字");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// 合成PDF
|
||||||
|
Image image = Image.getInstance(imageFile);
|
||||||
|
image.scalePercent(50F);
|
||||||
|
// image.scaleAbsolute(200);
|
||||||
|
|
||||||
|
image.setAbsolutePosition((float) (lastCharInfo.getX() + 10), (float) (lastCharInfo.getY() - 25));
|
||||||
|
PdfContentByte underContent = pdfStamper.getUnderContent(1);
|
||||||
|
underContent.addImage(image);
|
||||||
|
pdfStamper.close();
|
||||||
|
pdfReader.close();
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.error(e.getMessage(), e);
|
||||||
|
return false;
|
||||||
|
} finally {
|
||||||
|
if (pdfStamper != null) {
|
||||||
|
try {
|
||||||
|
pdfStamper.close();
|
||||||
|
} catch (DocumentException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pdfReader != null) {
|
||||||
|
pdfReader.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 读取pdf并获取关键字最后一个字符信息
|
* 读取pdf并获取关键字最后一个字符信息
|
||||||
*
|
*
|
||||||
@ -174,6 +215,49 @@ public class PDFUtil {
|
|||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public static CharInfo readPdfAndGetLastKeywordCharInfo(PdfReader pdfReader, String keyword) throws Exception {
|
public static CharInfo readPdfAndGetLastKeywordCharInfo(PdfReader pdfReader, String keyword) throws Exception {
|
||||||
|
List<PageInfo> pageInfos = listPageInfo(pdfReader);
|
||||||
|
// 关键字最后一个字符
|
||||||
|
CharInfo lastCharInfo = null;
|
||||||
|
for (PageInfo pageInfo : pageInfos) {
|
||||||
|
int index = pageInfo.getContent().indexOf(keyword);
|
||||||
|
if (index < 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
lastCharInfo = pageInfo.getCharInfos().get(index + keyword.length() - 1);
|
||||||
|
}
|
||||||
|
return lastCharInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 读取pdf并获取关键字第一个
|
||||||
|
*
|
||||||
|
* @param pdfReader
|
||||||
|
* @param keyword
|
||||||
|
* @return
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public static CharInfo readPdfAndGetFirstKeywordCharInfo(PdfReader pdfReader, String keyword) throws Exception {
|
||||||
|
List<PageInfo> pageInfos = listPageInfo(pdfReader);
|
||||||
|
// 关键字第一个字符
|
||||||
|
CharInfo firstCharInfo = null;
|
||||||
|
for (PageInfo pageInfo : pageInfos) {
|
||||||
|
int index = pageInfo.getContent().indexOf(keyword);
|
||||||
|
if (index < 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
firstCharInfo = pageInfo.getCharInfos().get(index);
|
||||||
|
}
|
||||||
|
return firstCharInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* pdf信息列表
|
||||||
|
*
|
||||||
|
* @param pdfReader
|
||||||
|
* @return
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
private static List<PageInfo> listPageInfo(PdfReader pdfReader) throws IOException {
|
||||||
List<PageInfo> pageInfos = new ArrayList<>();
|
List<PageInfo> pageInfos = new ArrayList<>();
|
||||||
// 获取PDF有多少页
|
// 获取PDF有多少页
|
||||||
int pageCount = pdfReader.getNumberOfPages();
|
int pageCount = pdfReader.getNumberOfPages();
|
||||||
@ -193,17 +277,7 @@ public class PDFUtil {
|
|||||||
pdfContentStreamProcessor.processContent(ContentByteUtils.getContentBytesForPage(pdfReader, pageNum), resourcesPdfDictionary);
|
pdfContentStreamProcessor.processContent(ContentByteUtils.getContentBytesForPage(pdfReader, pageNum), resourcesPdfDictionary);
|
||||||
pageInfos.add(new PageInfo(pdfRenderListener.getContent(), pdfRenderListener.getCharInfos()));
|
pageInfos.add(new PageInfo(pdfRenderListener.getContent(), pdfRenderListener.getCharInfos()));
|
||||||
}
|
}
|
||||||
|
return pageInfos;
|
||||||
// 关键字最后一个字符
|
|
||||||
CharInfo lastCharInfo = null;
|
|
||||||
for (PageInfo pageInfo : pageInfos) {
|
|
||||||
int index = pageInfo.getContent().indexOf(keyword);
|
|
||||||
if (index < 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
lastCharInfo = pageInfo.getCharInfos().get(index + keyword.length() - 1);
|
|
||||||
}
|
|
||||||
return lastCharInfo;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class PdfRenderListener implements RenderListener {
|
public static class PdfRenderListener implements RenderListener {
|
||||||
|
Loading…
Reference in New Issue
Block a user