java生成pdf加密_java使用iText 生成PDF全攻略(表格,加密)

java使用iText 生成PDF全攻略,包括创建文档,设置字体,添加表格(PdfPTable),创建新页(newPage),设置布局,加密

主要使用的jar包: itextpdf-5.4.2.jar,itext-pdfa-5.4.2.jar,itext-xtra-5.4.2.jar,如果用到中文,需要CJK字体的扩展包:itext-asian.jar

如果用到特殊符号的,需要另一个扩展包:itext-hyph-xml.jar。所有这些使用的jar包都可以在itext 5.4.2 官方下载地址:itext-5.4.2.zip

运行环境: java version 1.6.0_18 + iText 5.4.2

创建文档

package com.pdf;

import java.io.FileOutputStream;

import com.itextpdf.text.BaseColor;

import com.itextpdf.text.Chunk;

import com.itextpdf.text.Document;

import com.itextpdf.text.Font;

import com.itextpdf.text.PageSize;

import com.itextpdf.text.Paragraph;

import com.itextpdf.text.pdf.BaseFont;

import com.itextpdf.text.pdf.PdfWriter;

public class ItextHelloword {

public static void test() {

// 常用页面大小 PageSize.A4;

Document doc = new Document(PageSize.A4);

try {

// 定义输出位置并把文档对象装入输出对象中

PdfWriter.getInstance(doc,

new FileOutputStream("f:/hello.pdf"));

// 打开文档对象

doc.open();

// 加入文字"HelloWorld"

doc.add(new Paragraph("HelloWorld"));

// 关闭文档对象,释放资源

doc.close(); } catch (Exception e) { e.printStackTrace(); } } }

设置字体

亚洲国家的字体你可以从http://itext.sourceforge.net/downloads/iTextAsian.jar下载这个包。然后把它直接放到你的ClassPath中就可以了

BaseFont bfChinese = BaseFont.createFont("STSong-Light"

, "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

Font FontChinese = new Font(bfChinese, 12, Font.NORMAL);

表格

package com.pdf;

import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.Cell;

import com.EnumTypeExampe.Color;

import com.itextpdf.awt.geom.Rectangle;

import com.itextpdf.text.BaseColor;

import com.itextpdf.text.Chunk;

import com.itextpdf.text.Document;

import com.itextpdf.text.Element;

import com.itextpdf.text.Font;

import com.itextpdf.text.PageSize;

import com.itextpdf.text.Paragraph;

import com.itextpdf.text.pdf.BaseFont;

import com.itextpdf.text.pdf.PdfPCell;

import com.itextpdf.text.pdf.PdfPTable;

import com.itextpdf.text.pdf.PdfWriter;

public class ItextHelloword {

/**

* @param args

*/

public static void main(String[] args)

throws Exception {

test() ;

}

public static void test() {

// 常用页面大小 PageSize.A4;

Document doc = new Document(PageSize.A4);

try {

// 定义输出位置并把文档对象装入输出对象中

PdfWriter writer=PdfWriter.getInstance(doc,

new FileOutputStream("f:/hello.pdf"));

// 定义中文字体

BaseFont bfChinese = BaseFont.createFont("STSong-Light",

"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

Font fontCN = new Font(bfChinese, 12,

Font.NORMAL);

// 打开文档对象

doc.open();

// 加入文字"HelloWorld"

doc.add(new Paragraph("HelloWorld"));

//定义一个表格 创建一个有3列的表格

PdfPTable table = new PdfPTable(3);

// 定义一个表格单元

PdfPCell cell = new PdfPCell(

new Paragraph("some text"));

// cell.setBorder(1);

// 把单元加到表格中

table.addCell(cell);

// 把下面这9项顺次的加入到表格中,当一行充满时候自动折行到下一行

table.addCell("1.1");

table.addCell("2.1");

table.addCell("3.1");

table.addCell("1.2");

table.addCell("2.2");

table.addCell("3.2");

table.addCell("1.3");

table.addCell("2.3");

table.addCell("3.3");

// 增加到文档中

doc.add(table);

doc.add(new Paragraph("居右 50%", fontCN));

// 设置表格大小为可用空白区域的50%

table.setWidthPercentage(50);

// 设置水平对齐方式为 居右

table.setHorizontalAlignment(Element.ALIGN_RIGHT);

doc.add(new Paragraph("居左 50%", fontCN));

// 增加到文档中3

doc.add(table);

// 设置水平对齐方式为 居左

table.setHorizontalAlignment(Element.ALIGN_LEFT);

doc.add(table);

// 关闭文档对象,释放资源

doc.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

创建新页

// 创建第2的页面

document.newPage();

document.add(new Paragraph("Hello Earth"));

document.resetHeader();

// 创建第3的页面

document.newPage();

document.add(new Paragraph("Hello Sun"));

document.add(new Paragraph("Remark: the header has vanished!"));

document.resetPageCount();

加密

public static void test() {

// 常用页面大小 PageSize.A4;

Document doc = new Document(PageSize.A4);

try {

// 定义输出位置并把文档对象装入输出对象中

PdfWriter writer=PdfWriter.getInstance(doc,

new FileOutputStream("f:/hello.pdf"));

// 打开文档对象

doc.open();

// 加入文字"HelloWorld"

doc.add(new Paragraph("HelloWorld"));

// setEncryption方法中可以设置如下内容(这样打开pdf时需要输入口令)

// PdfWriter.STRENGTH128BITS, "userpass", "ownerpass",

// PdfWriter.AllowCopy | PdfWriter.AllowPrinting

writer.setEncryption("userpassword".getBytes()

, "ownerPassword".getBytes(), PdfWriter.ALLOW_COPY

, PdfWriter.EMBEDDED_FILES_ONLY);

// writer.setEncryption(PdfWriter.STRENGTH40BITS,

//"", "", PdfWriter.AllowCopy);

// 关闭文档对象,释放资源

doc.close();

} catch (Exception e) {

e.printStackTrace();

}

}

以下图片是上面代码中生成的表格:

5ff6f43ca7d7a0a7a839c7f74da2ab8c.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

恩智浦NXP I.MX6ULL芯片介绍下载官网资料

参考:NXP I.MX6ULL芯片介绍以及资料的获取 作者:一只青木呀 发布时间:2020-09-26 10:54:26 网址:https://blog.csdn.net/weixin_45309916/article/details/108808573 目录I.MX6ULL芯片介绍以及官网资料的获取I.MX6ULL芯片介绍以及…

变速不变调方法

语音变速不变调,即语音时长规整,是指不改变原说话人的音调及语义信息,只改变说话人的语速。 语音变速不变调算法有三大类:时域法、频域法、参量法,如表2-1所示。 表2-1 变速不变调算法分类 时域法 频域法 参量法 剪…

java开发高端说法_关于Java代码的设计和开发注意事项,下列哪些说法符合《集合开发规约》:...

案例分析一:假定CPU的主频是500MHz。硬盘采用DMA方式进行数据传送,其数据传输率为4MB/s, 每次DMA传输的数据量为8KB, 要求没有任何数据传输被错过。如果CPU在DMA初始化设置和启动硬盘操作等方面用了1000个时钟周期,并且在DMA传送完成后的中断…

ES6学习笔记六(Iterator和for..of)

{let arr[hello,world];let maparr[Symbol.iterator](); //返回false时继续执行,true停止执行!console.log(map.next());console.log(map.next());console.log(map.next()); }{let obj{start:[1,3,2],end:[7,8,9],[Symbol.iterator](){let selfthis;let…

判定点是否在不规则多边形内部的问题

2019独角兽企业重金招聘Python工程师标准>>> 问题如下: 话说在平面内有一个任意的不规则的封闭多边形,另外在这个平面内还有一个点,问题:如何高效的判定这个点是在这个多边形内部还是外部?补充&#xff1a…

Cortex-A7 MPCore 架构详细介绍(九种运行模式、内核寄存器组R0~R15,有特定的名字和功能)

目录0.ARM架构的历史简介1.Cortex-A7 MPCore(即多核) 简介2.Cortex-A 处理器九种运行模式3.Cortex-A 寄存器组(内核寄存器)3.1通用寄存器3.1.1未备份寄存器(R0~R7)3.1.2备份寄存器(R8~R12、SP指针R13、备份R14也叫LR)3.1.3程序计数器R15(PC)3.2程序状态寄…

Java开发中遇到具有挑战的事_Java并发编程的挑战:遇到的问题及如何解决

并发编程的目的是为了让程序运行得更快,但是,并不是启动更多的线程就能让程序最大限度地并发执行。在进行并发编程时,如果希望通过多线程执行任务让程序运行得更快,会面临非常多的挑战,比如上下文切换的问题、死锁的问…

jQuery 属性选择器

jQuery 使用 XPath 表达式来选择带有给定属性的元素。 $("[href]") 选取所有带有 href 属性的元素。 $("[href#]") 选取所有带有 href 值等于 "#" 的元素。 $("[href!#]") 选取所有带有 href 值不等于 "#" 的元素。 $("…

使用的 SQL Server 版本不支持数据类型“datetime2”的错误解决方法

THE VERSION OF SQL IN USE DOES NOT SUPPORT DATATYPE ‘DATETIME2′ 主要错误原因,在使用ado.net entity的时候,entity使用的数据库是sqlserver 2008,或者sqlserver 2008 r2 但后来实际使用的数据库是sqlserver 2005, sqlserver…

树莓派(TCP客户端 )和Wemos(TCP服务端连接红外模块)通讯实现对红外设备的控制

参考:U如何用树莓派连接语音模块,红外模块来控制红外设备详解 作者:一只青木呀 发布时间:2020-08-12 17:14:10 网址:https://blog.csdn.net/weixin_45309916/article/details/107960066 目录硬件软件红外解码步骤1.连接…

java反编译微信小程序_教你如何一键反编译获取任何微信小程序源代码(图形化界面,傻瓜式操作)...

一键获取微信小程序源代码1 Tips:2   一键获取微信小程序源码, 使用了C#加nodejs制作 直接解压在D盘根目录下后就可以使用 将小程序文件放到 wxapkg目录下3 这个目录下有一些demo 可以先进行实验 使用正确 wxapkg exe这些文件应该在 D:CrackMinApp目录下4 然后打开…

PM2管理工具的使用

linux上PM2可以管理服务程序,防止程序无故关闭,具有程序守护功能,自动重启服务器程序,监控程序等好处,很方便,具体自己去体会! 官网地址: http://pm2.keymetrics.io/ 文档指南: ht…

C语言常用字符串操作函数大全详解(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等)

参考:string.h中常用字符串操作函数说明(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等) 作者:一只青木呀 发…

java将030A转换为方块_JAVA试题

1、下面关于变量及其作用范围的陈述哪个是不对的?( B )A.实例变量是类的成员变量。B.实例变量用关键字static声明。//Static 声明的是类变量C.在方法中定义的局部变量在该方法被执行时创建。D.局部变量在使用前必须被初始化。2、…

python 后缀 .py .pyc .pyw .pyo .pyd的区别

1.py是源文件 2.pyc是源文件编译后的文件: pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由…

MVC中使用Entity Framework 基于方法的查询学习笔记 (二)

解释&#xff0c;不解释&#xff1a; 紧接上文&#xff0c;我们在Visual Studio2012中看到系统为我们自动创建的视图(View)文件Index.cshtml中&#xff0c;开头有如下这句话&#xff1a; model IEnumerable<GuestBook.Models.Book> 这句话是MVC通过强类型获取数据的方式&…

位运算(按位与、按位或、异或、取反)以及原码、反码、补码

参考&#xff1a;运算符的计算&#xff08;按位与 按位或 异或 取反&#xff09; 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-07-23 18:13:55 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107543919 参考&#xff1a;计算机原码&#…

Docker03 Docker基础知识、Docker实战

1 Docker基础知识 1.1 什么是Docker Docker是一个可以装应用的容器&#xff0c;就像杯子可以装水、书包可以装书一样&#xff1b;docker官网 Docker是Docker公司开发的&#xff0c;并开源到GitHub上; Docker是跨平台的&#xff0c;支持windows、linux、Macos 1.2 Docker思想 1.…

Java字符串简化_关于java查询语句 如何简化的问题

首先&#xff0c;请你告诉我你使用PreparedStatement的理由&#xff0c;为什么不使用Statement&#xff1f;二者有什么区别&#xff1f;然后 你用到了PreparedStatement的特性了吗&#xff1f;接下来我们在探讨这代码该怎么写。下面的代码仅供参考&#xff0c;基本不具有实践意…

phpcms_v9推送到其他栏目后再在其他栏目删除导致数据库出错

修改phpcms/model/content_model.class.php大概454行的update_category_items()函数private function update_category_items($catid,$action add,$cache 0) {$this->category_db pc_base::load_model(category_model);if($actionadd) {$this->category_db->update…