热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java实现pdf定位签章

很多时候,在项目中需要打单子,生成pdf格式,还需要盖章。这个时候,就需要对pdf文件进行再次处理。处理的方式就是:1、获取要处理的位置2、将要盖章的图片添加上去代码如下:publ


很多时候,在项目中需要打单子,生成pdf格式,还需要盖章。

这个时候,就需要对pdf文件进行再次处理。

处理的方式就是:

1、获取要处理的位置

2、将要盖章的图片添加上去

代码如下:

public void printSign(OutputStream outputStream){
List keyWords = new ArrayList();
keyWords.add("打印人,打印机构");//支持多关键字,默认选择第一个找到的关键字
PdfReader pdfReader;
PdfStamper pdfStamper;
try {
pdfReader = new PdfReader(((ByteArrayOutputStream)outputStream).toByteArray());
pdfStamper = new PdfStamper(pdfReader, outputStream);
List> arrayLists = findKeywords(keyWords, pdfReader);//查找关键字所在坐标
//一个坐标也没找到,就返回
if (ObjectUtil.isEmpty(arrayLists)) {
return;
}
if (!ObjectUtil.isEmpty(arrayLists.get(0))) {
for (int i=0; i> findKeywords(final List keyWords, PdfReader pdfReader) {
if (keyWords == null || keyWords.size() == 0) {
return null;
}
int pageNum = pdfReader.getNumberOfPages();
final List> arrayLists = new ArrayList>(keyWords.size());
for (int k=0; k List positiOns= new ArrayList();
arrayLists.add(positions);
}
PdfReaderContentParser pdfReaderCOntentParser= new PdfReaderContentParser(pdfReader);
try {
for (int i = 1; i <= pageNum; i++) {
final int finalI = i;
pdfReaderContentParser.processContent(i, new RenderListener() {
private StringBuilder pdfsb = new StringBuilder();
private float yy = -1f;
@Override
public void renderText(TextRenderInfo textRenderInfo) {
String text = textRenderInfo.getText();
com.itextpdf.awt.geom.Rectangle2D.Float boundingRectange =
textRenderInfo.getBaseline().getBoundingRectange();
if(yy == -1f) {
yy = boundingRectange.y;
}
if(yy != boundingRectange.y) {
yy = boundingRectange.y;
pdfsb.setLength(0);
}
pdfsb.append(text);
if (pdfsb.length()>0) {
for (int j=0; j List key_words = ListUtil.parseList
(keyWords.get(j), ",");
//假如配置了多个关键字,找到一个就跑
for (final String key_word : key_words) {
if (arrayLists.get(j) != null)
{
break;
}
if (pdfsb.length()>0 && pdfsb.toString
().contains(key_word)) {
float[] resu = new float[3];
resu[0] = boundingRectange.x +
boundingRectange.width * (key_word.length()-1);
resu[1] = boundingRectange.y;
resu[2] = finalI;
arrayLists.get(j).add(resu);
pdfsb.setLength(0);
break;
}
}
}
}
}
@Override
public void renderImage(ImageRenderInfo arg0) {
//renderImage
}
@Override
public void endTextBlock() {
//endTextBlock
}
@Override
public void beginTextBlock() {
//beginTextBlock
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
return arrayLists;
}
public static List parseList(String source, String regex) {
if (source == null || "".equals(source)) {
return null;
}
List strList = new ArrayList();
if (regex== null || "".equals(regex)) {
strList.add(source);
} else {
String[] strArr = source.split(regex);
for (String str : strArr) {
if (str!= null || !"".equals(str)) {
strList.add(str);
}
}
}
return strList;
}

1、将上面的代码考到项目中,把该导的包导好。该方法所需的类都在iTextpdf里 https://download.csdn.net/download/esc_tab_end/10730983 。如果你的报表里还需要什么条形码生成的。可以下载条形码所需的包: https://download.csdn.net/download/esc_tab_end/10730999

2、然后调用printSign方法。

2.1 printSign方法入参是pdf的二进制流对象。

2.2 还有就是关键字写上自己所需要的关键字就行了。方法内的代码都是现成的,不需要改动,若有特殊需求可以自己微调。

注意:pdf中的关键字的字体必须是中文字体,例如:宋体,黑体,楷体等等。如果pdf生成的时候关键字是用英文字体例如:Arial,Dialog等等这些。

效果图如下:

在这里插入图片描述



推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文介绍如何通过注册表编辑器自定义和优化Windows文件右键菜单,包括删除不需要的菜单项、添加绿色版或非安装版软件以及将特定应用程序(如Sublime Text)添加到右键菜单中。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • [论文笔记] Crowdsourcing Translation: Professional Quality from Non-Professionals (ACL, 2011)
    Time:4hoursTimespan:Apr15–May3,2012OmarZaidan,ChrisCallison-Burch:CrowdsourcingTra ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 中科院学位论文排版指南
    随着毕业季的到来,许多即将毕业的学生开始撰写学位论文。本文介绍了使用LaTeX排版学位论文的方法,特别是针对中国科学院大学研究生学位论文撰写规范指导意见的最新要求。LaTeX以其精确的控制和美观的排版效果成为许多学者的首选。 ... [详细]
  • 本文详细介绍了福昕软件公司开发的Foxit PDF SDK ActiveX控件(版本5.20),并提供了关于其在64位Windows 7系统和Visual Studio 2013环境下的使用方法。该控件文件名为FoxitPDFSDKActiveX520_Std_x64.ocx,适用于集成PDF功能到应用程序中。 ... [详细]
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
author-avatar
木易_迪迪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有