package com.example;
import com.google.common.collect.Lists;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.ImageRenderInfo;
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
import com.itextpdf.text.pdf.parser.RenderListener;
import com.itextpdf.text.pdf.parser.TextRenderInfo;
import org.thymeleaf.util.StringUtils;
import java.io.IOException;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class KeywordPDFUtils {
// 定义返回页码
private static int i = 0;
private static com.itextpdf.awt.geom.Rectangle2D.Float boundingRectange =null;
private static List<KeyWordBean> lists = null;
private static Map<Integer, List<KeyWordBean>> map = new HashMap<Integer, List<KeyWordBean>>();
private static int pageNum = 0;
public static Map<Integer, List<KeyWordBean>> getPDFText(String filePath) {
try {
PdfReader pdfReader = new PdfReader(filePath);
pageNum = pdfReader.getNumberOfPages();
PdfReaderContentParser pdfReaderContentParser = new PdfReaderContentParser(pdfReader);
for (i = 1; i <= pageNum; i++) {
lists = Lists.newArrayList();
boundingRectange =new com.itextpdf.awt.geom.Rectangle2D.Float();
pdfReaderContentParser.processContent(i, new RenderListener() {
@Override
public void renderText(TextRenderInfo textRenderInfo) {
String text = textRenderInfo.getText(); // 整页内容
boundingRectange= textRenderInfo.getBaseline().getBoundingRectange();
KeyWordBean bean = new KeyWordBean();
bean.setX(boundingRectange.x);
bean.setY(boundingRectange.y);
bean.setPage(i);
bean.setText(text);
lists.add(bean);
}
@Override
public void renderImage(ImageRenderInfo arg0) {
// TODO Auto-generated method stub
}
@Override
public void endTextBlock() {
// TODO Auto-generated method stub
}
@Override
public void beginTextBlock() {
// TODO Auto-generated method stub
}
});
map.put(i, lists);
}
} catch (IOException e) {
e.printStackTrace();
}
return map;
}
public static void main(String[] args) {
Map<Integer, List<KeyWordBean>> keyWords = getPDFText("D:\\pdf\\src.pdf");
System.out.println(keyWords.size());
}
public static KeyWordBean getKeyWordXY(Map<Integer, List<KeyWordBean>> map2, int page, int num,String keyWord) {
int keyMatch = 1;
StringBuilder content = new StringBuilder();
List<KeyWordBean> list = map2.get(page);
Collections.sort(list);//正序比较
StringBuilder builder = new StringBuilder();
for(int i=0; i<list.size(); i++){
KeyWordBean bean = list.get(i);
String text = bean.getText();
if(i+1 != list.size()){
KeyWordBean beanNext = list.get(i+1);
float x = beanNext.getX()-bean.getX();
float y = beanNext.getY()-bean.getY();
if(y == 0 && x <= 1){
// System.out.print(“去除因字体加粗产生的重复数字”);
}else{
if (StringUtils.contains(content.toString(), keyWord) || StringUtils.contains(text, keyWord)) {
if(keyMatch == num){
return bean;
}else{
keyMatch ++;
}
}else if((!StringUtils.isEmpty(text) && keyWord.startsWith(text)) || content.length()>0){
content.append(text);
if(content.length() >= keyWord.length()){
if(StringUtils.contains(content.toString(), keyWord)){
if(keyMatch == num){
return bean;
}else{
keyMatch ++;
}
}
content = new StringBuilder();
}
}
}
}else{
if (StringUtils.contains(content.toString(), keyWord) || StringUtils.contains(text, keyWord)) {
if(keyMatch == num){
return bean;
}else{
keyMatch ++;
}
}else if((!StringUtils.isEmpty(text) && keyWord.startsWith(text)) || content.length()>0){
content.append(text);
if(content.length() >= keyWord.length()){
if(StringUtils.contains(content.toString(), keyWord)){
if(keyMatch == num){
return bean;
}else{
keyMatch ++;
}
}
content = new StringBuilder();
}
}
}
}
return null;
}
public static KeyWordBean getKeyWordXY1(Map<Integer, List<KeyWordBean>> map2,String keyWord) {
StringBuilder content = new StringBuilder();
for(int i = 1;i<=pageNum;i++){
List<KeyWordBean> list = map2.get(i);
Collections.sort(list);//正序比较
StringBuilder builder = new StringBuilder();
for(int j=0; j<list.size(); j++){
KeyWordBean bean = list.get(j);
String text = bean.getText();
if(j+1 != list.size()){
KeyWordBean beanNext = list.get(j+1);
float x = beanNext.getX()-bean.getX();
float y = beanNext.getY()-bean.getY();
if(y == 0 && x <= 1){
// System.out.print(“去除因字体加粗产生的重复数字”);
}else{
if (StringUtils.contains(content.toString(), keyWord) || StringUtils.contains(text, keyWord)) {
return bean;
}else if((!StringUtils.isEmpty(text) && keyWord.startsWith(text)) || content.length()>0){
content.append(text);
if(content.length() >= keyWord.length()){
if(StringUtils.contains(content.toString(), keyWord)){
return bean;
}
content = new StringBuilder();
}
}
}
}else{
if (StringUtils.contains(content.toString(), keyWord) || StringUtils.contains(text, keyWord)) {
return bean;
}else if((!StringUtils.isEmpty(text) && keyWord.startsWith(text)) || content.length()>0){
content.append(text);
if(content.length() >= keyWord.length()){
if(StringUtils.contains(content.toString(), keyWord)){
return bean;
}
content = new StringBuilder();
没有合适的资源?快使用搜索试试~ 我知道了~
perfect_demo.zip
共121个文件
xml:80个
java:10个
class:10个
5星 · 超过95%的资源 需积分: 10 19 下载量 13 浏览量
2019-05-29
14:20:49
上传
评论 1
收藏 192KB ZIP 举报
温馨提示
手写签名,在图片上签字保存,通过证书,签名盖章水印到pdf固定位置
资源推荐
资源详情
资源评论
收起资源包目录
perfect_demo.zip (121个子文件)
KeywordPDFUtils.class 6KB
SignPDFUtils.class 6KB
Test.class 5KB
KeyWordBean.class 2KB
KeywordPDFUtils$1.class 2KB
SignPDFBean.class 2KB
SignPDFRequestBean.class 2KB
EncryptPDF.class 1KB
Demo123Application.class 732B
Demo123ApplicationTests.class 621B
.classpath 1KB
mvnw.cmd 6KB
.gitignore 303B
index.html 7KB
index.html 7KB
demo123.iml 9KB
maven-wrapper.jar 47KB
KeywordPDFUtils.java 9KB
MavenWrapperDownloader.java 4KB
SignPDFUtils.java 3KB
Test.java 3KB
SignPDFBean.java 2KB
KeyWordBean.java 1KB
SignPDFRequestBean.java 1008B
EncryptPDF.java 1000B
Demo123ApplicationTests.java 329B
Demo123Application.java 306B
jquery-3.1.1.min.js 85KB
jquery-3.1.1.min.js 85KB
ajaxfileupload.js 8KB
ajaxfileupload.js 8KB
HELP.md 532B
mvnw 9KB
org.eclipse.jdt.core.prefs 243B
org.eclipse.core.resources.prefs 155B
org.eclipse.m2e.core.prefs 90B
.project 556B
pom.properties 194B
maven-wrapper.properties 116B
application.properties 63B
application.properties 63B
workspace.xml 27KB
pom.xml 3KB
pom.xml 2KB
Project_Default.xml 1KB
compiler.xml 855B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_1_5_RELEASE.xml 793B
Maven__org_springframework_boot_spring_boot_starter_thymeleaf_2_1_5_RELEASE.xml 786B
Maven__org_springframework_boot_spring_boot_starter_logging_2_1_5_RELEASE.xml 772B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_1_5_RELEASE.xml 765B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_1_5_RELEASE.xml 758B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_8.xml 753B
Maven__org_springframework_boot_spring_boot_starter_json_2_1_5_RELEASE.xml 751B
Maven__org_springframework_boot_spring_boot_starter_test_2_1_5_RELEASE.xml 751B
Maven__org_thymeleaf_extras_thymeleaf_extras_java8time_3_0_4_RELEASE.xml 749B
Maven__org_springframework_boot_spring_boot_starter_web_2_1_5_RELEASE.xml 744B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 724B
Maven__org_springframework_boot_spring_boot_starter_2_1_5_RELEASE.xml 716B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_8.xml 712B
Maven__org_hibernate_validator_hibernate_validator_6_0_16_Final.xml 705B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_8.xml 698B
Maven__org_springframework_boot_spring_boot_test_2_1_5_RELEASE.xml 695B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_19.xml 684B
Maven__org_springframework_spring_expression_5_1_7_RELEASE.xml 682B
Maven__com_google_errorprone_error_prone_annotations_2_1_3.xml 676B
Maven__org_codehaus_mojo_animal_sniffer_annotations_1_14.xml 674B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml 668B
Maven__org_thymeleaf_thymeleaf_spring5_3_0_11_RELEASE.xml 665B
Maven__org_springframework_spring_context_5_1_7_RELEASE.xml 661B
Maven__org_springframework_boot_spring_boot_2_1_5_RELEASE.xml 660B
Maven__org_springframework_spring_webmvc_5_1_7_RELEASE.xml 654B
Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_19.xml 649B
Maven__org_springframework_spring_beans_5_1_7_RELEASE.xml 647B
Maven__com_fasterxml_jackson_core_jackson_databind_2_9_8.xml 647B
Maven__org_checkerframework_checker_compat_qual_2_0_0.xml 644B
Maven__org_springframework_spring_test_5_1_7_RELEASE.xml 640B
Maven__org_springframework_spring_core_5_1_7_RELEASE.xml 640B
Maven__javax_annotation_javax_annotation_api_1_3_2.xml 635B
Maven__javax_validation_validation_api_2_0_1_Final.xml 635B
Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_19.xml 635B
Maven__org_springframework_spring_jcl_5_1_7_RELEASE.xml 633B
Maven__org_springframework_spring_web_5_1_7_RELEASE.xml 633B
Maven__org_springframework_spring_aop_5_1_7_RELEASE.xml 633B
Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml 632B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_11_2.xml 632B
Maven__com_fasterxml_jackson_core_jackson_core_2_9_8.xml 619B
Maven__org_attoparser_attoparser_2_0_5_RELEASE.xml 613B
Maven__com_google_j2objc_j2objc_annotations_1_1.xml 611B
Maven__org_thymeleaf_thymeleaf_3_0_11_RELEASE.xml 609B
Maven__org_unbescape_unbescape_1_1_6_RELEASE.xml 602B
Maven__net_bytebuddy_byte_buddy_agent_1_9_12.xml 602B
Maven__org_apache_logging_log4j_log4j_api_2_11_2.xml 597B
Maven__ch_qos_logback_logback_classic_1_2_3.xml 592B
Maven__org_bouncycastle_bcprov_jdk15on_1_47.xml 586B
Maven__org_hamcrest_hamcrest_library_1_3.xml 577B
Maven__ch_qos_logback_logback_core_1_2_3.xml 571B
Maven__com_jayway_jsonpath_json_path_2_4_0.xml 570B
Maven__com_google_code_findbugs_jsr305_1_3_9.xml 569B
Maven__org_assertj_assertj_core_3_11_1.xml 566B
Maven__org_mockito_mockito_core_2_23_4.xml 566B
共 121 条
- 1
- 2
资源评论
- DARENcdn2020-03-24可以,优质资源
飞彡鹏
- 粉丝: 2
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功