java使用itext生成pdf,超简单教学,有手就行

前言:以前出过两期用itext填充pdf的文章,有人说那个会那字体加入到pdf中,导致pdf占用内存过大,那么今天就来分享一期另外的方法。

java使用itext生成pdf

  • 1、导包
  • 2、直接贴代码,然后大家看注释
  • 3、效果

1、导包

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.2</version>
</dependency>

2、直接贴代码,然后大家看注释

import cn.hutool.core.date.DateUtil;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;import javax.imageio.ImageIO;
import java.io.*;public class Demo2 {public static void main(String[] args) {Demo2.pdf();}public static void pdf() {PdfContentByte waterMar;try {//文档对象  实现A4纸页面Document document = new Document(PageSize.A4);//document.setMarginMirroring(true);//设置文档的页边距就是距离页面边上的距离,分别为:左边距,右边距,上边距,下边距document.setMargins(70, 70, 20, 10);//这个是生成破pdf的位置以及名称String fileName = "C:\\Users\\Desktop\\" + System.currentTimeMillis() + ".pdf";PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(fileName));//打开文档document.open();// 加载字体,因为我们标题和正文可能用的不是同一种字体,所以我们创建两种字体//有其他需求的就可以创建更多的字体//字体都是电脑自带的,如果你想要的电脑没有,就去网上下载//创建标题字体BaseFont title = BaseFont.createFont("c://windows//fonts//simhei.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//创建正文字体BaseFont bf = BaseFont.createFont("c://windows//fonts//simfang.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//上面是基础的字体,代表使用哪一种字体,下面设置的是字体的字号,粗细等等属性//使用上面的title 字体 加粗,这个是标题字体Font titleFont = new Font(title, 22, Font.BOLD);//使用字体,正文字体Font font = new Font(bf, 16);// 这个是我们动态填充的字体,Font.UNDERLINE带下划线的Font underlineFont = new Font(bf, 16, Font.UNDERLINE); // -------------------设置 二维码图片 ----------------// 加入水印waterMar = pdfWriter.getDirectContentUnder();// 开始设置水印图片waterMar.beginText();ByteArrayOutputStream out = new ByteArrayOutputStream();//QrCodeUtils.createQrCodeBufferdImage这个方法就是将网址变成二维码图片ImageIO.write(QrCodeUtils.createQrCodeBufferdImage("https://www.baidu.com",100, 100), "png", out);byte[] b = out.toByteArray();Image itextimage = Image.getInstance(b);// 水印图片位置 第一个参数为x轴,第二个参数为y轴itextimage.setAbsolutePosition(120, 410);// 附件加上水印图片waterMar.addImage(itextimage);//结束设置waterMar.endText();waterMar.stroke();// -------------------设置 段落 ----------------//这里面可以设置段落和短语(块),如果是那种固定文字的段落就可以用段落//如果我们需要生成的段落里有需要动态填充的就用块,一点一点的拼起来,直到达到我们的效果//段落Paragraph p = null;p = new Paragraph("哈哈哈哈哈哈哈哈哈哈哈哈哈哈", titleFont);p.setLeading(30);p.setAlignment(Element.ALIGN_CENTER);//设置对齐方式,这个是居中对齐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();//块ph.add(new Chunk("哈哈哈哈哈哈哈", font));ph.add(new Chunk("2022" + " ", underlineFont));//年份ph.add(new Chunk("第", font));ph.add(new Chunk("100" + " ", underlineFont));// 号数ph.add(new Chunk("号", font));p.add(ph);p.setSpacingBefore(20);//段落与段落的间距,我们一个ph就组成一个段落p.setAlignment(Element.ALIGN_RIGHT);//设置对齐方式,右对齐p.setLeading(20);//行间距document.add(p);p = new Paragraph();ph = new Phrase();ph.add(new Chunk("哈哈哈哈哈哈哈:", underlineFont));//机构名称p.add(ph);//设置和上行的间隔p.setSpacingBefore(10);//p.setLeading(20);document.add(p);p = new Paragraph();ph = new Phrase();ph.add(new Chunk("    哈哈哈哈哈哈哈", font));ph.add(new Chunk("哈哈哈哈哈哈哈1", underlineFont));//项目名称ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈2", font));ph.add(new Chunk("哈哈哈哈哈哈哈3", underlineFont));//医院名称ph.add(new Chunk("哈哈哈哈哈哈哈4", font));ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈5", underlineFont));//建设项目名称ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈6", font));ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈7", underlineFont));//号ph.add(new Chunk("哈哈哈哈哈哈哈8", font));//ph.setMultipliedLeading(20);p.add(ph);p.setSpacingBefore(5);p.setLeading(30);document.add(p);p = new Paragraph();ph = new Phrase();ph.add(new Chunk("    哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈9", font));ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈10", underlineFont));//项目名称ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈11", font));p.add(ph);p.setSpacingBefore(5);p.setLeading(30);document.add(p);p = new Paragraph();ph = new Phrase();ph.add(new Chunk("    哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈12。", font));p.add(ph);p.setSpacingBefore(5);p.setLeading(30);document.add(p);p = new Paragraph();ph = new Phrase();ph.add(new Chunk("    此复", font));p.add(ph);p.setSpacingBefore(5);p.setLeading(30);document.add(p);p = new Paragraph();ph = new Phrase();ph.add(new Chunk("哈哈哈哈哈哈哈哈哈哈哈哈哈哈13", font));p.add(ph);p.setSpacingBefore(5);p.setAlignment(Element.ALIGN_RIGHT);//设置对齐方式p.setLeading(30);document.add(p);p = new Paragraph();ph = new Phrase();String date = DateUtil.now();ph.add(new Chunk(date.substring(0, 4) + " ", underlineFont));//年ph.add(new Chunk("年", font));ph.add(new Chunk(date.substring(5, 7) + " ", underlineFont));//月ph.add(new Chunk("月", font));ph.add(new Chunk(date.substring(8, 10) + " ", underlineFont));//日ph.add(new Chunk("日", font));p.add(ph);p.setSpacingBefore(5);p.setAlignment(Element.ALIGN_RIGHT);//设置对齐方式p.setLeading(30);document.add(p);document.close();pdfWriter.close();System.out.println("创建成功!");} catch (Exception e) {e.printStackTrace();}}
}

3、效果

在这里插入图片描述

怎么样,是不是超级简单呢,只需要简单的调试,就可以达到我们所需要的效果,简直yyds。

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

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

相关文章

2018-2019-1 20165221 《信息安全系统设计基础》第一周学习总结

2018-2019-1 20165221 《信息安全系统设计基础》第一周学习总结 教材学习总结 有关vim 打开方式&#xff1a;vim [文件名]按i会进入insert模式&#xff0c;可以对代码进行编辑按Esc会进入普通模式&#xff0c;此时可以使用快捷键进行编辑&#xff0c;编辑方式为&#xff1a; 指…

itext5固定段落Paragraph,指定段落位置

前几期分析了怎么用itext生成pdf&#xff0c;有兴趣的可以去看看。 1&#xff0c;java使用itext生成pdf&#xff0c;超简单教学&#xff0c;有手就行 2&#xff0c;java使用itext填充pdf模板&#xff0c;超简单教学&#xff0c;有手就行 然后现在有了新的需求&#xff0c;需…

wordcount C

Gitee 代码链接&#xff1a;https://gitee.com/huangxue1111/codes/12rfs3ztj5ga8ymce7qi910 #include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#define IN 1#define OUT 0void main() {FILE *fp;int length;fp fopen("…

PS中如何使用通道计算来进行美白

打开本机的Photoshow&#xff0c;把要美白的图片添加进来。 通过快捷键ctrlj 创建一个图层副本。 然后选择通道中的蓝色&#xff0c;复制通道&#xff0c;这里说明一下为什么要选择蓝色&#xff1a;因为蓝色和绿色是较暗的&#xff0c;把暗的选出来&#xff0c;目的是为了更…

[学习笔记]质数

&#xff08;本篇并不适合初学者看&#xff09; 质数&#xff1a;除1和本身之外&#xff0c;没有一个数能够整除它。&#xff08;否则是合数&#xff09; 1.质数判定&#xff1a; ①根号试除法。 优点&#xff1a;容易写&#xff0c;对于少量的需要判断的质数&#xff0c;比较可…

Eclipse中导入Java项目出现“No projects are found to import”

如图所示&#xff1a; &#xff0c; 这其实是你的项目中缺少了两个文件&#xff1a;.classpath文件和 .project文件 所以eclipse找不到你的项目了。 解决办法&#xff1a; 在你的Eclipse中再新建一个新的项目&#xff0c;项目的类型和项目名和你想要导入的项目名一样&am…

USB 设备驱动(写给自己看的)

集线器与控制器&#xff08;USB地址7bit&#xff09;设备&#xff0c;配置&#xff0c;端点&#xff0c;接口USB1.0&#xff08;低速1.2&#xff09;&#xff0c;1.1&#xff08;全速450m&#xff09;,2.0&#xff08;高速&#xff0c;电流传输&#xff09;区别引脚4根&#xf…

为什么tomcat在eclipse中启动了,访问不了

tomcat在eclipse中启动不了&#xff0c;有很多中情况。 我把这些可能出现的情况总结了起来&#xff1a; 原因1&#xff1a; 项目的发布目录没有在tomcat下的webapps文件下&#xff0c;导致项目启动不了。 解决&#xff1a;先把tomcat中的服务remove出来 然后双击test1服务…

数据库(表)导入导出备份

一、介绍逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程。逻辑恢复是指当数据库对象被误操作而损坏后使用工具import利用备份的文件把数据对象导入到数据库的过程。物理备份即可在数据库open的状态下进行也可在关闭数据库后进行&#xff0c;但是逻辑备份和…

Can not find the tag library descriptor for http://java.sun.com/jsp/jstl/core

在eclipse的jsp里面出现这个错误&#xff0c;主要是缺少.jar文件或是你的.jar版本不匹配。 主要是&#xff1a;JSTL.jar 和 Standard.jar 文件。 去重新下载一下&#xff0c;然后添加到你的lib文件里面 就不会报错了。

Android TV Overscan

本文来自网易云社区 作者&#xff1a;孙有军 开发的TV应用发现在部分电视上可以显示完整&#xff0c;而其他部分电视显示不全&#xff0c;周围都会遮挡了。 原因 这是因为部分老的电视有一个overscan的概览&#xff0c;什么叫overscan呐&#xff1f;官方解释如下&#xff1a; D…

jsp页面中出现“String cannot be resolved to a type”

右键你的项目&#xff0c;Build Path–>Configure Build Path 按照步骤1–>2 –>3。 然后就大功告成了。

Druid学习之路 (四)Druid的数据采集格式

作者&#xff1a;Syn良子 出处&#xff1a;https://www.cnblogs.com/cssdongl/p/9715735.html 转载请注明出处 Druid的数据采集格式 Druid可以采集非标准化的数据诸如JSON,CSV或者以某种分隔符隔开的TSV格式,当然还支持自定义格式.虽然大部分的文档使用JSON格式,但是通过druid来…

“Found interface com.mysql.jdbc.Connection, but class was expected ”

In mysql-connecter-java-5.0 Statement is a class. in 5.1, it’s an interface. The code you write shouldn’t care too much. But if you compile against the new version, then run against the old version, you’ll have this problem. 我项目中用的是5.1的版本&am…

1. 冒泡与选择排序及其比较

冒泡排序 1. 思想 冒泡排序&#xff08;Bubble Sort&#xff09;是一种交换排序&#xff0c;基本思路是&#xff1a;两两比较相邻记录的关键字&#xff0c;如果反序则交换&#xff0c;直到没有反序的记录为止。 2. 实现 2.1 初学常用的一种 public static <T extends Compar…

Java如何实现分页

先阐述一下具体的思路&#xff1a; 第一步&#xff1a;编写一个分页的类里面包含了&#xff08;第一页&#xff0c;最后一页&#xff0c;下一页&#xff0c;上一页&#xff0c;当前页&#xff0c;页码等等&#xff09;对象和方法。第二步&#xff1a;进行分页的业务处理。 &g…

删除服务中的mysql服务

以管理员身份运行命令提示符&#xff0c;然后输入sc delete mysql 这里的mysql是你服务中的mysql名&#xff08;有些可能是mysql5&#xff0c;或者之类&#xff09;。

2018.09.28 hdu5435A serious math problem(数位dp)

传送门 数位dp卡常题。 写了一发dfs版本的发现过不了233。 于是赶紧转循环版本。 预处理出f数组。f[i][j]f[i][j]f[i][j]表示前i位数异或和为j的方案数。 然后每次直接数位dp就行了。 代码&#xff1a; #include<bits/stdc.h> #define mod 1000000007 #define N 100005 #…

在有原来的数据的情况下,恢复数据库的数据

只要把mysql安装目录下的data文件中的ibdata1&#xff08;储存文件的数据&#xff09;替换&#xff0c;再把你的库名的文件&#xff08;只是表结构&#xff09;加进去。

photoshop切图

1.传统切图 &#xff08;1&#xff09;打开一个psd文件&#xff0c;选择ps左边菜单栏的裁剪工具&#xff0c;选择切片工具。首先我们对这个psd文件进行分析&#xff0c;有意识的将其划分成几个选区&#xff0c;然后通过鼠标的拖拽用切片工具将我们所需要的图案切下来&#xff0…