需求分析

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. 随笔-关于公网IP无法访问服务器的解决办法

    笔者的环境: windows server 2008 r2 .IIS,php,MySql. 理论上来讲,服务器,其实就是一个大型计算机,我们通过访问服务器的某个端口请求某个资源. 正常情况下,如果没有 ...

  2. Day4-内置函数--未完待续,慢慢写

    内置函数:https://docs.python.org/3/library/functions.html?highlight=built#ascii 未完待续....

  3. 初码-Azure系列-迁移PHP应用至Azure的一些实践记录和思考

    最近客户在逐步迁移应用从阿里云到Azure,这次又轮到一个PHP+MySQL应用了,顺便也记一下流水账. 需求:迁移部署在阿里云上的ECS服务器(系列2,IO优化+2核4G+50G的SSD云盘+10M ...

  4. mac下eclipse安装svn插件-subclipse

    目前Eclipse最常用的svn插件莫非subclipse,在windows系统下的安装svn client和subclipse比较简单.本文介绍如何在mac安装svn插件和subclipse. 一. ...

  5. 一步一步实现基于GPU的pathtracer(一):基础

    出于3D计算机图形学和图形渲染方面的个人兴趣,脑子里便萌生出了自己实现一个渲染器的想法,主要是借助pathtracing这种简单的算法,外加GPU加速来实现,同时也希望感兴趣的朋友们能够喜欢,也欢迎提 ...

  6. nodejs 路径

    在学习的时候遇到了 一些路劲方面的疑惑 便查询了一些 module.filename:开发期间,该行代码所在的文件.__filename:始终等于 module.filename.__dirname: ...

  7. 你真的知道组件中的v-model吗?

    v-model的神奇 html <div id="app"> <input v-model="poin"> {{ poin }} < ...

  8. 做一枚精致的程序猿,Fighting!

    这几天我和我们的团队正在做一个公司管理系统的项目,团队分工根据成员的水平高低来分工,这样看似公平,但其实不公平,如此这样一来,那些水平稍不如别人的成员就没有发展的机会?那么问题来了,对于水平稍逊色的程 ...

  9. java基础(五章)

    一.        调试 步骤1:设置断点(不能在空白处设置断点) 步骤2:启动调试 步骤3:调试代码(F6单步跳过)笔记本Fn+F6(F5) 步骤4:结束调试 掌握调试的好处? l  很清晰的看到, ...

  10. Python爬虫-爬小说

    用途 用来爬小说网站的小说默认是这本御天邪神,虽然我并没有看小说,但是丝毫不妨碍我用爬虫来爬小说啊. 如果下载不到txt,那不如自己把txt爬下来好了. 功能 将小说取回,去除HTML标签 记录已爬过 ...