需求分析

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操作实例的更多相关文章

  1. 记一次为解决Python读取PDF文件的Shell操作

    目录 一.背景 二.问题 三.解决 四.一顿分析及 Shell 操作 五.后续 一.背景 本想将 PDF 文件转换为 Word 文档,然后网上搜索了一下发现有挺多转换的软件.有的是免费的.收费,咱也不 ...

  2. pdf文件之itextpdf插入html内容以及中文解决方案

    简述 目前网上已经有很多种html文件直接转pdf的技术帖子,但是很少有直接将部分html作为段落插入到pdf中,而且也没有一个可以很好的解决中文显示的问题. 因此今天上午围绕这个问题进行了研究,把解 ...

  3. JAVA简单的文件I/O操作实例

    如果只是对文件进行普通的读写,可以不用文件流. 以下是实例: File file = new File("test1.txt"); //向文件写入数据的 PrintWriter p ...

  4. 第9.11节 Python中IO模块文件打开读写操作实例

    为了对前面学习的内容进行一个系统化的应用,老猿写了一个程序来进行文件相关操作功能的测试. 一. 测试程序说明 该程序允许测试人员选择一个文件,自己输入文件打开模式.写入文件的位置以及写入内容,程序按照 ...

  5. 如何通过WPS 2013 API 将Office(Word、Excel和PPT)文件转PDF文件

    1. 描述 PDF 文件是一种便携文件格式,是由Adobe公司所开发的独特的跨平台文件格式.PDF文件以PostScript语言图象模型为基础,无论在哪种打印机上都可保证精确的颜色和准确的打印效果,即 ...

  6. kali 系列学习10-渗透攻击MySQL数据库服务、PostgreSQL数据库服务、Tomcat服务和PDF文件

    介绍使用MSFCONSOLE工具渗透攻击MySQL数据库服务.PostgreSQL数据库服务.Tomcat服务和PDF文件等. 6.4.1 渗透攻击MySQL数据库服务 MySQL是一个关系型数据库管 ...

  7. 【电子签章】HTML格式合同转化成PDF文件

    代码地址如下:http://www.demodashi.com/demo/12476.html 一.主要思路 通过itextpdf 生成想要的pdf 文件 通过itextpdf 中 XMLWorker ...

  8. Java最全文件操作实例汇总

    本文实例汇总了Java文件操作.分享给大家供大家参考,具体如下: 1.创建文件夹 ? 1 2 3 4 5 6 7 8 9 10 11 //import java.io.*; File myFolder ...

  9. java操作office和pdf文件java读取word,excel和pdf文档内容

    在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...

随机推荐

  1. JQuery控制下拉列表

    //遍历option和添加.移除option function changeShipMethod(shipping){ var len = $("select[@name=ISHIPTYPE ...

  2. 当一个JavaScripter初次进入PHP的世界,他将看到这样的风景

     本文将从以下11点介绍javascript和PHP在基础语法和基本操作上的异同: 1.数据类型的异同 2.常量和变量的定义的不同,字符串连接运算符不同 3.对象的创建方法的不同 4.PHP与JS在变 ...

  3. Tomcat Server处理一个http请求过程

    假设来自客户端的请求为: http://localhost:8080/lizhx/lizhx_index.jsp 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Conne ...

  4. 2017 UESTC Training for Graph Theory

    图论姿势太弱,这套题做了好久.. A:枚举最短那条边,然后最小生成树那种操作,1 和 n 联通就算答案 B:考虑到假如我们能凑出x的话,那很明显我们也能凑出任意数表示x + ai,考虑选取一个ai,然 ...

  5. aws 装机软件

  6. 深入理解C#中的String

    关于C#中的类型 在C#中类型分为值类型和引用类型,引用类型和值类型都继承自System.Object类,几乎所有的引用类型都直接从System.Object继承,而值类型具体一点则继承System. ...

  7. springboot 中使用websocket简单例子

    gradle 中添加依赖,引入websocket支持 compile("org.springframework.boot:spring-boot-starter-websocket:${sp ...

  8. JVM-6.即时编译器

    一.即时编译器 二.运行模式 三.基本原理 四.编译优化技术 五.Java与C/C++的编译器对比 六.参考       一.即时编译器 1.在部分虚拟机(如Hotspot.IBM J9)中,Java ...

  9. linux tesseract 安装及部署tess4j项目的常见问题

    linux上部署tess4j项目 在windows上项目是可以正常运行的,部署到Linux上后,运行报异常,异常内容为:Unable to load library 'tesseract': Nati ...

  10. 微信公众平台开发实战Java版之如何网页授权获取用户基本信息

    第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...