pdf文件之itextpdf操作实例
需求分析
1、需要创建一个pdf文件,包含文件的基本属性
2、文件需要包含附件,通过点击链接直接打开
3、生成的pdf文件不能直接修改(需要输入密码)
4、pdf文件需要有文字或图片水印
准备jar包
itextpdf-5.5.9.jar
itext-xtra-5.5.9.jar
itext-pdfa-5.5.9.jar
commons-imaging-1.0-SNAPSHOT.jar
commons-io-2.4.jar
xmlworker-5.5.9.jar
slf4j-log4j12-1.7.18.jar
slf4j-api-1.7.18.jar
log4j-1.2.17.jar
bcprov-jdk15on-1.47.jar
开始编码
声明变量
static String pdfFile = "results/pdf文件.pdf";
static String attchFile1 = "file/附件1.txt";
static String attchFile2 = "file/附件2.zip";
static String ownerPassword = "abcdefg1234567";
static String stamperText = "pdf文件测试";
创建临时pdf文件
File tmpFile = File.createTempFile(String.valueOf(System.currentTimeMillis()), ".tmp");
Document document = new Document();
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(tmpFile));
添加pdf文件属性
document.open();//操作前一定要先打开文档
//头部信息
document.addTitle("文件");
document.addAuthor("*******");
document.addCreationDate();
准备中文字体(如果内容中没有中文可以忽略)
//字体
BaseFont songTtf = BaseFont.createFont("songti.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font sf = new Font(songTtf, 12);
添加内容
//段落
document.add(new Paragraph("我是一个中文的段落!",sf));
//块
document.add(new Chunk("我只是字符块",sf));
//附件
attchDesc.add(new Chunk("附件",sf));
PdfAnnotation annotation = PdfAnnotation.createFileAttachment(pdfWriter, null, attchFile1, null, attchFile1,attchFile1);
Chunk chunk = new Chunk(" ",sf);
chunk.setAnnotation(annotation);
attchDesc.add(chunk);
文档加密并将临时文件转为正式文件
//文档创建后设置添加密码
PdfReader reader = new PdfReader(tmpFile.getAbsolutePath());
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(pdfFile));
//加密
stamper.setEncryption(null, ownerPassword.getBytes(), PdfWriter.ALLOW_MODIFY_CONTENTS, PdfWriter.STANDARD_ENCRYPTION_128);
添加文字水印
//加文字水印
int pages = reader.getNumberOfPages();
PdfContentByte over = null;
for (int i = 1; i <= pages; i++) {
over = stamper.getUnderContent(i);
over.beginText();
over.setRGBColorFill(245,245,245);
over.setFontAndSize(songTtf, 18);
over.setTextMatrix(30, 30);
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 4; y++) {
over.showTextAligned(Element.ALIGN_LEFT, stamperText, x*250, y*240+x*100, 45);
}
}
}
添加图片水印
//加图片水印
Image image = Image.getInstance("file/logo.png");
image.scaleAbsoluteWidth(50);
image.scaleAbsoluteHeight(50);
image.setAbsolutePosition(500, 780);
over.addImage(image);
over.endText();
stamper.close();
reader.close();
添加图片
try (ByteArrayOutputStream byteArray = new ByteArrayOutputStream();){
Document document = new Document();
PdfWriter.getInstance(document, byteArray);
document.open();
float maxWith = 500;// 图片最大宽度
// 插入图片
List<String> imgUrls = new ArrayList<>();
imgUrls.add("ftcar.jpeg");
imgUrls.add("fli.jpg");
imgUrls.add("fli.jpeg");
for(String imgUrl : imgUrls){
Image jpeg = PngImage.getImage (FileUtil.readBytes(imgUrl));
jpeg.setAlignment(Image.MIDDLE);
float width = jpeg.getWidth();
float height = jpeg.getHeight();
// 等比例缩小
if (width>maxWith){
jpeg.scaleAbsoluteWidth(maxWith);
jpeg.scaleAbsoluteHeight(height*maxWith/width);
}
document.add(jpeg);
}
document.close();
// 存入文件
File file = new File("/Users/sanxing/Downloads/pdf文件1.pdf");
file.createNewFile();
byteArray.writeTo(new FileOutputStream(file));
}
pdf文件之itextpdf操作实例的更多相关文章
- 记一次为解决Python读取PDF文件的Shell操作
目录 一.背景 二.问题 三.解决 四.一顿分析及 Shell 操作 五.后续 一.背景 本想将 PDF 文件转换为 Word 文档,然后网上搜索了一下发现有挺多转换的软件.有的是免费的.收费,咱也不 ...
- pdf文件之itextpdf插入html内容以及中文解决方案
简述 目前网上已经有很多种html文件直接转pdf的技术帖子,但是很少有直接将部分html作为段落插入到pdf中,而且也没有一个可以很好的解决中文显示的问题. 因此今天上午围绕这个问题进行了研究,把解 ...
- JAVA简单的文件I/O操作实例
如果只是对文件进行普通的读写,可以不用文件流. 以下是实例: File file = new File("test1.txt"); //向文件写入数据的 PrintWriter p ...
- 第9.11节 Python中IO模块文件打开读写操作实例
为了对前面学习的内容进行一个系统化的应用,老猿写了一个程序来进行文件相关操作功能的测试. 一. 测试程序说明 该程序允许测试人员选择一个文件,自己输入文件打开模式.写入文件的位置以及写入内容,程序按照 ...
- 如何通过WPS 2013 API 将Office(Word、Excel和PPT)文件转PDF文件
1. 描述 PDF 文件是一种便携文件格式,是由Adobe公司所开发的独特的跨平台文件格式.PDF文件以PostScript语言图象模型为基础,无论在哪种打印机上都可保证精确的颜色和准确的打印效果,即 ...
- kali 系列学习10-渗透攻击MySQL数据库服务、PostgreSQL数据库服务、Tomcat服务和PDF文件
介绍使用MSFCONSOLE工具渗透攻击MySQL数据库服务.PostgreSQL数据库服务.Tomcat服务和PDF文件等. 6.4.1 渗透攻击MySQL数据库服务 MySQL是一个关系型数据库管 ...
- 【电子签章】HTML格式合同转化成PDF文件
代码地址如下:http://www.demodashi.com/demo/12476.html 一.主要思路 通过itextpdf 生成想要的pdf 文件 通过itextpdf 中 XMLWorker ...
- Java最全文件操作实例汇总
本文实例汇总了Java文件操作.分享给大家供大家参考,具体如下: 1.创建文件夹 ? 1 2 3 4 5 6 7 8 9 10 11 //import java.io.*; File myFolder ...
- java操作office和pdf文件java读取word,excel和pdf文档内容
在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...
随机推荐
- Android 模块化探索与实践
首发于<程序员>杂志五月刊 一.前言 万维网发明人 Tim Berners-Lee 谈到设计原理时说过:"简单性和模块化是软件工程的基石:分布式和容错性是互联网的生命." ...
- 自己写的书《深入理解Android虚拟机内存管理》,不出版只是写着玩
百度网盘地址:https://pan.baidu.com/s/1jI4xZgE 我给起的书名叫做<深入理解Android虚拟机内存管理>.本书分为两个部分,前半部分主要是我对Linux0. ...
- Spring Boot 整合 Elasticsearch,实现 function score query 权重分查询
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 预见未来最好的方式就是亲手创造未来 – <史蒂夫·乔布斯传> 』 运行环境: ...
- php-fpm 与 fastCgi的浅谈
首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者. web server(比如说nginx)只是内容的分发者.比如,如果请求/index.h ...
- MySQL优化总结,百万级数据库优化方案
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- php笔记一
一.Login登陆验证步骤: 1.赋值,用$_POST将id和password传递给loginProcess.php登陆验证页面. 2.建立数据库连接 $conn=mysql_connect($hos ...
- 一般处理程序+htm C#l简单的增删查改
首先引用两个文件一个dll: 数据库表已创建 首先编写数据读取部分 /// <summary> /// 查询 /// </summary> /// <param name ...
- 初识Tensorboard
1.什么是Tensorboard? PPT设计原则中有这样一条,叫"文不如表,表不如图",可见图表在表达中更为直观.明确.程序设计中也是一样,我们经常用图表来描述程序的结构和流程, ...
- javaCV开发详解之4:转流器实现(也可作为本地收流器、推流器,新增添加图片及文字水印,视频图像帧保存),实现rtsp/rtmp/本地文件转发到rtmp流媒体服务器(基于javaCV-FFMPEG)
javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...
- JS学习笔记——数组去重
<script type="text/javascript"> //indexOf"是ECMAScript5方法,IE8以下不支持,需多写兼容低版本浏览器代码 ...