需求分析

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. Item 27: 明白什么时候选择重载,什么时候选择universal引用

    本文翻译自<effective modern C++>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 Item 26已经解释了,不管是对全局函数还是成员 ...

  2. Ubuntu 完全卸载MySQL 重装步骤

    sudo rm /var/lib/mysql/ -R 删除mysql的数据文件   sudo rm /etc/mysql/ -R 删除mqsql的配置文件   sudo apt-get autorem ...

  3. Linux下Samba服务器的安装和配置

    第一步:sudo apt-get install samba smbclient 安装samba服务器. 第二步:打开/etc/samba/smb.conf文件,在末尾添加下面的字段: [用户名] c ...

  4. 汉字转拼音,TinyPinyin、Pinyin4j与JPinyin哪个库更快

    1. 介绍 本文对TinyPinyin.Pinyin4j与JPinyin三个汉字转拼音库的用法.测试代码及转换的结果做一个简单的总结. TinyPinyin 适用于Java和Android的快速.低内 ...

  5. Microsoft Azure IoTHub Serials 1 - 使用Android设备与Azure IoTHub进行交互

    Azure IoTHub的目标是为物联网的应用场景提供方便的设备接入,完成消息的发送和接收(C2D和D2C).经过持续不断的努力,目前Azure IoTHub已经支持多种操作系统设备的接入,包括And ...

  6. web socket教程

    web socket是一种网络通信协议,很多网页应用中都会使用到它,比如聊天室,选票等等. 一.为什么需要WebSocket? HTTP是无连接(无连接的含义是限制每次连接只处理一个请求.服务器处理完 ...

  7. web工作过程

    了解浏览器与服务器进行通信和访问的过程 打开浏览器-输入URL地址 当我们访问一个网页时,如http://www.baidu.com,这个网址包含四个部分的内容: 1.第一部分:协议类型:这里是htt ...

  8. pythion 第二弹

    ################################第二节################################################python中数据类型的常见的方法 ...

  9. TreeSet集合排序方式一:自然排序Comparable

    TreeSet集合默认会进行排序.因此必须有排序,如果没有就会报类型转换异常. 自然排序 Person class->实现Comparable,实现compareTo()方法 package H ...

  10. 通过wireshark学习Traceroute命令(UDP,ICMP协议)

    traceroute: 通过TTL限定的ICMP/UDP/TCP侦测包来发现从本地主机到远端目标主机之间的第三层转发路径.用来调试网络连接性和路由问题. mtr: traceroute的一个变种,能根 ...