记录一次使用itext生成pdf,并添加水印的过程

本地字体路径:C:\Windows\Fonts

Maven导入:

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.4</version>
</dependency>
<dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version>
</dependency>

代码:

    public void pdf() {System.out.println(System.getProperty("user.dir"));BaseFont bf;Font titleFont = null;Font font = null;Font underlineFont = null;Font noFont = null;Font signatureFont = null;try {bf = BaseFont.createFont("font/simfang.ttf", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);//创建字体titleFont = new Font(bf, 20, Font.BOLD);//使用字体font = new Font(bf, 15);//使用字体underlineFont = new Font(bf, 15, Font.UNDERLINE);noFont = new Font(bf, 14);signatureFont = new Font(bf, 14);} catch (Exception e) {e.printStackTrace();}try {String name = "xxx";String idCode = "xxxxxxxxxxxxxxxxxx";String year = "2020";String month = "3";String day = "20";String number = "xxxxxxxxxxxxxxx";String expireDay = "7";String signPlace = "xxxxxxxxxx所";String signDate = "2020年3月20日";//实现A4纸页面Document document = new Document();PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("F:/解除医学观察告知书.pdf"));//打开文档document.open();// 加入水印PdfContentByte waterMar = pdfWriter.getDirectContentUnder();// 开始设置水印waterMar.beginText();// 设置水印透明度PdfGState gs = new PdfGState();// 设置填充字体不透明度为0.4fgs.setFillOpacity(0.1f);try {// 设置水印字体参数及大小 (字体参数,字体编码格式,是否将字体信息嵌入到pdf中(一般不需要嵌入),字体大小)waterMar.setFontAndSize(BaseFont.createFont("font/simfang.ttf", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED), 50);// 设置透明度waterMar.setGState(gs);// 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度waterMar.showTextAligned(Element.ALIGN_RIGHT, "数据修复平台", 450, 900, 20);waterMar.showTextAligned(Element.ALIGN_RIGHT, "数据修复平台", 450, 700, 20);waterMar.showTextAligned(Element.ALIGN_RIGHT, "数据修复平台", 450, 500, 20);waterMar.showTextAligned(Element.ALIGN_RIGHT, "数据修复平台", 450, 300, 20);waterMar.showTextAligned(Element.ALIGN_RIGHT, "数据修复平台", 450, 100, 20);// 设置水印颜色waterMar.setColorFill(BaseColor.GRAY);//结束设置waterMar.endText();waterMar.stroke();} catch (IOException e) {e.printStackTrace();} finally {waterMar = null;gs = null;}//段落Paragraph p = new Paragraph("NO:" + number, noFont);p.setIndentationLeft(380);document.add(p);p = new Paragraph("解除医学观察告知书", titleFont);p.setLeading(30);p.setAlignment(Element.ALIGN_CENTER);document.add(p);p = new Paragraph();//短语Phrase ph = new Phrase();//块Chunk space = new Chunk("    ", font);Chunk c0 = new Chunk(" " + name + " ", underlineFont);Chunk c1 = new Chunk("先生/女士(身份证号码:", font);Chunk c2 = new Chunk(" " + idCode + " ", underlineFont);Chunk c3 = new Chunk("),按照《中华人民共和国传染病防治法》相关规定,经卫健部门评估后决定自", font);Chunk c4 = new Chunk(" " + year + " ", underlineFont);Chunk c5 = new Chunk("年", font);Chunk c6 = new Chunk(" " + month + " ", underlineFont);Chunk c7 = new Chunk("月", font);Chunk c8 = new Chunk(" " + day + " ", underlineFont);Chunk c9 = new Chunk("日(期满", font);Chunk c10 = new Chunk(" " + expireDay + "天 ", underlineFont);Chunk c11 = new Chunk(")起解除对您的医学观察,并对您给予我们工作的支持和配合表示衷心感谢。", font);ph.add(space);ph.add(c0);ph.add(c1);ph.add(c2);ph.add(c3);ph.add(c4);ph.add(c5);ph.add(c6);ph.add(c7);ph.add(c8);ph.add(c9);ph.add(c10);ph.add(c11);p.add(ph);p.setSpacingBefore(20);p.setLeading(40);document.add(p);p = new Paragraph();ph = new Phrase();ph.add(new Chunk(signPlace+"\n", signatureFont));p.add(ph);ph = new Phrase();ph.add(new Chunk(signDate+"\n", signatureFont));p.add(ph);ph = new Phrase();ph.add(new Chunk("医生签名:", signatureFont));p.add(ph);p.setSpacingBefore(50);p.setIndentationLeft(300);p.setLeading(30);document.add(p);document.close();pdfWriter.close();} catch (Exception e) {System.out.println("file create exception");}}

最终效果:

二维码插入代码:

// 生成二维码BufferedImage
public BufferedImage get() throws Exception {String text = "http://47.115.86.208:8080/";int width = 95;int height = 95;Hashtable hints = new Hashtable();hints.put(EncodeHintType.CHARACTER_SET, "utf-8");BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);return MatrixToImageWriter.toBufferedImage(bitMatrix);}
// 水印部分加上二维码
ByteArrayOutputStream out = new ByteArrayOutputStream();
ImageIO.write(get(), "png",out);
byte[] b = out.toByteArray();
Image itextimage = Image.getInstance(b);
// 水印图片位置
itextimage.setAbsolutePosition(50, 730);
// 附件加上水印图片
waterMar.addImage(itextimage);

最终效果:

Java使用itext生成pdf并添加水印、二维码字节流相关推荐

  1. Java使用itext生成Pdf

    Java使用itext生成Pdf 背景 所需依赖 解决jpedal-lgpl jar包问题 示例代码 生成带图片的PDF(使用本地文件系统图片) 生成带图片的PDF(使用网络图片) 背景 在某些业务场 ...

  2. java 生成字体文件,java使用itext生成pdf文件-设置字体,itextpdf,import com.l

    java使用itext生成pdf文件-设置字体,itextpdf,import com.limport com.lowagie.text.Document;import com.lowagie.tex ...

  3. 通过Java组件iText生成PDF报表或合同,完成pdf上传,预览,存入数据库

    因业务需要,做了一个通过Java组件iText生成PDF合同,运行成功了,做个记录,也分享给大家. 首先,我们需要准备好一个有文本域的pdf文件. 1.先用word做出你需要的模板,并保存. 2.通过 ...

  4. java 生成pdf itext_使用Java组件itext 生成pdf介绍

    iText是一个能够快速产生PDF文件的Java类库.iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的.它的类库尤其与java Servlet有很好的给合.使用iText与 ...

  5. java itext 设计器_使用Java组件itext 生成pdf的介绍

    [IT168 技术]iText是一个能够快速产生PDF文件的java类库.iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的.它的类库尤其与java Servlet有很好的给 ...

  6. java使用iText生成pdf文档的对齐方式

    一.前言 在企业的信息系统中,报表处理一直占比较重要的作用,本文将介绍一种生成PDF报表的Java组件--iText.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超级连接显示或 ...

  7. Java:iText生成pdf文档

    依赖 <!-- pdf:start --> <dependency><groupId>com.itextpdf</groupId><artifac ...

  8. 【PDF】java使用Itext生成pdf文档--详解

    [API接口] 一.Itext简介 API地址:javadoc/index.html:如 D:/MyJAR/原JAR包/PDF/itext-5.5.3/itextpdf-5.5.3-javadoc/i ...

  9. Java使用itext生成PDF 然后将多个PDF打包zip下载

    先上pom依赖 用于生成pdf文件 <!--pdf start--><dependency><groupId>com.itextpdf</groupId> ...

最新文章

  1. 二叉树的先序遍历(非递归)
  2. Spring boot切换Servlet容器
  3. 如何保证access_token长期有效
  4. 【Python】一行python代码利用人工智能去除工作照背景
  5. 囚犯生存概率引发的循环思考
  6. ubuntu 14.04 LTS(64bit) Anacoda2环境下安装gensim
  7. Java 并发编程CyclicBarrier的应用与源码解析(基于ReentrantLock实现)
  8. recv函数返回0_函数VLOOKUP与LOOKUP的PK,大战一触即发 Excel神技能!
  9. 污水处理中php是什么药剂,污水处理中需要用到哪些药剂?
  10. 前端怎么携带cookie发送php,PHP如何执行传递cookie的http请求并将结果保存到字符串...
  11. IdleHandler,页面启动优化神器
  12. matlab 韦达公式,三次方程的根式求解(通俗版本)
  13. 微信小程序的封装和登录
  14. 山寨小小军团开发笔记 之 GamePool
  15. 实验一-波士顿房价预测
  16. Python实现图形界面猜数字游戏(GUI)
  17. 嵌入式ARM设计编程(一) 简单数据搬移
  18. 负数的二进制表示及左移功能的验证
  19. 深挖用户需求,教你4招搞定精准营销
  20. 惊了!苹果高通在中国纠缠时 iPhone7/8却在德国惨遭下架

热门文章

  1. Android Studio Maven仓库设置aliyun、google、jcenter
  2. JS实现身份证号显示前3位和后4位,中间用***替代
  3. 鸿蒙系统能装在小米电视上吗,小米会用鸿蒙系统吗_小米会不会用鸿蒙系统
  4. Java输出当前年月日
  5. 手眼标定函数(eye -to-hand)
  6. 这个南方古镇靠什么解决城市排水难题
  7. c语言gets,getc,C++_C语言的getc()函数和gets()函数的使用对比,C语言getc()函数:从流中读取字 - phpStudy...
  8. 【3D数学基础】三维空间折射向量计算
  9. 你不得不知道的 IP 包详解(傻瓜式讲解)
  10. 输出第N个斐波那契数