java利用itext导出pdf

项目中有一功能是导出历史记录,可以导出pdf和excel,这里先说导出pdf。在网上查可以用那些方式导出pdf,用itext比较多广泛。

导出pdf可以使用两种方式,一是可以根据已有的pdf模板,进行生成文档。二是直接用代码生成pdf

一、使用模板生成pdf

1、添加依赖

__

2、创建word,创建需要的样式,例如,保存为pdf格式,

java利用itext导出pdf

3、使用Adobe Acrobat 打开,打开内容编辑,选择编辑域,编辑域的名称与代码的数据属性名对应。

java利用itext导出pdf

4、java代码

import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.util.Iterator;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

/*
* @Title: CreatePdf.java
* @Description: TODO
* @author zhangjunhong
* @date 2018年10月22日
/
public class CreatePdf {
public static void fillTemplate() throws Exception {
//读取的模板
String templatePath = “D:/mypdf1.pdf”;
//生成的pdf存储的路径
String targetPath = “D:/test1.pdf”;
PdfReader reader;
FileOutputStream outputStream;
ByteArrayOutputStream bos;
PdfStamper stamper;
reader = new PdfReader(templatePath);
outputStream = new FileOutputStream(targetPath);
bos = new ByteArrayOutputStream();
stamper = new PdfStamper(reader, bos);
//取得模板表单对应的域
AcroFields from = stamper.getAcroFields();
String[] strings = { “12222”, “zahang”, “男”, “1992-09-12” };
int i = 0;
Iterator

}

5、结果

java利用itext导出pdf

二、根据数据生成pdf并导出,这个好像挺简单的,直接代码一波,看注释,也可以生成表格之类的

@RequestMapping(“/export/pdf”)
public void exPdf(HttpServletResponse response){
OutputStream os=null;
try {
// 指定解析器
System.setProperty(“javax.xml.parsers.DocumentBuilderFactory”,
“com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl”);
String filename = “大面积延误历史记录详情.pdf”;
response.setContentType(“application/pdf”);
response.setHeader(“Content-Disposition”,
“attachment;fileName=” + URLEncoder.encode(filename, “UTF-8”));
os = new BufferedOutputStream(response.getOutputStream());
//生成pdf
Document document=new Document();
PdfWriter writer=PdfWriter.getInstance(document, os);
// 页面大小
Rectangle rectangle = new Rectangle(PageSize.A4);
// 页面背景颜色
rectangle.setBackgroundColor(BaseColor.WHITE);
document.setPageSize(rectangle);
// 页边距 左,右,上,下
document.setMargins(20, 20, 20, 20);
document.open();
//中文字体 —-不然中文会乱码
BaseFont bf = BaseFont.createFont(“STSong-Light”, “UniGB-UCS2-H”,BaseFont.NOT_EMBEDDED);
//设置字体
Font font = new Font(bf, 14, Font.BOLD, BaseColor.BLACK);
Paragraph p=new Paragraph(“设置了字体样式的标题哈哈哈哈哈今天比较闲嘤嘤嘤”, font);
document.add(p);
document.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}

java利用itext导出pdf

还有很多对pdf的操作,如添加page,表格等,可查看itext的官方文档,

或者看这个博客:https://blog.csdn.net/weixin_36380516/article/details/76984283

最后是不是贴上我花了几天写的pdf导出,这个技术是简单了,尼玛项目业务逻辑贼复杂。周五任务完成截止日期,昨天写完啦,等前端对接接口,,就写写博客,算了,先不贴代码。我再整理整理

Original: https://www.cnblogs.com/junnnnnnnn/p/9956964.html
Author: 小小小小青石
Title: java利用itext导出pdf

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/609494/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MyBatis源码解析

    在讲解MyBatis之前,先说下传统JDBC连接数据库的弊端:1.JDBC底层没有实现连接池,从而导致操作数据库需要频繁的创建和释放,影响性能;2.JDBC的代码散落在Java代码…

    Java 2023年5月30日
    089
  • 观察者模式与事件处理

    观察者模式简介 观察者模式用于建立对象之间一对多的依赖关系,当一个对象状态发生改变,其他对象得到通知并做出响应。在观察者模式中,我们将状态发生改变的对象称为观察目标,将被通知的对象…

    Java 2023年6月8日
    0104
  • 网关Zuul、Gateway、nginx的区别

    zuul:是Netflix的,早期在微服务中使用较广泛,是基于servlet实现的,阻塞式的api,不支持长连接。只能同步,不支持异步。不依赖spring-webflux,可以扩展…

    Java 2023年5月30日
    084
  • BF算法和KMP算法

    什么是串 数据结构中,字符串要单独用一种存储结构来存储,称为串存储结构。这里的串指的就是字符串。字符串通常是由零个或多个字符组成的有限序列。 一般地,由n个字符串构成的串记作: S…

    Java 2023年6月5日
    081
  • 吴世枫老师指导下的团队作业—系统设计和任务分配

    一、建立团队项目 的码云git代码库: 地址为:https://gitee.com/ZZUOldUncle/rich-app 二、讨论制定团队的编码规范,讨论之前和讨论之后,队员阅…

    Java 2023年6月6日
    088
  • AsList()方法详解

    AsList()方法详解 在Java中,我们应该如何将一个数组array转换为一个List列表并赋初始值?首先想到的肯定是利用List自带的add()方法,先new一个List对象…

    Java 2023年6月8日
    074
  • PTA第4、5次大作业及期中考试总结

    期中考试题目总结 (1)总结:期中考试主要考察的是点线面类的设计,之前没有接触过类,或者说对类没有什么很清晰的概念和认知。现在才发现”类”是一个非常强大的工…

    Java 2023年6月5日
    078
  • 引路蜂地图API:Gis.Navigation包定义

    本包提供了路口到路口实时导航API,从地图服务器返回的路径信息含有文字和路径的地理坐标信息,类NavigationEngine根据路径和当前坐标实现实时导航。它内部含用三个工作线程…

    Java 2023年5月30日
    093
  • JS 模块化- 01 模块化前传

    前端技术的发展不断融入了很多后端的思想,逐步形成前端的 “四个现代化”:工程化、模块化、规范化、流程化。这个主题介绍 模块化 ,主要内容包括模块化前传(早期…

    Java 2023年6月16日
    088
  • leetcode-数组中两元素的最大乘积

    给你一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)*(nums[j]-1) 取得最大值。 请你计算并返回该式的最大值。 &#x8…

    Java 2023年6月14日
    091
  • RabbitMQ 之 HelloWorld(生产者-消费者)

    RabbitMQ 之 HelloWorld(生产者-消费者) 安装rabbitmq环境 见上一篇文章rabbitmq安装 pom.xml 4.0.0 com.atguigu.rab…

    Java 2023年6月9日
    072
  • ant-design-vue中tree增删改

    1. 使用背景 新项目中使用了 ant-design-vue组件库.该组件库完全根基数据双向绑定的模式实现.只有表单组件提供少量的方法.所以,在使用 ant-design-vue时…

    Java 2023年6月13日
    065
  • 订单系统学习

    概述 本文主要讲述了在传统电商企业中,订单系统应承载的角色,就订单系统所包含的主要功能模块梳理了设计思路,并对订单系统未来的发展做了一些思考。 1、订单系统在企业中的角色 在搭建企…

    Java 2023年5月29日
    082
  • 操作无权限的MSMQ队列

    首先,我们重现一个这样的”死”队列。在消息队列的管理器中新建一个队列(私有或公有均可),命名为test。右键单击该队列,选择Properties,然后进入S…

    Java 2023年5月30日
    070
  • 异常

    异常 异常分为两大类,运行时异常和编译时异常 运行时异常,编译器不要求强制处置的异常。一般是指编程时的逻辑错误,是程序员应该避免出现的异常。java.lang.RuntimeExc…

    Java 2023年6月5日
    0107
  • 通俗易懂的了解String中的intern方法

    首先,先看一下intern 方法(JDK1.8 )的官方文档: 全是英文,阅读起来有点困难怎么办?没关系,博主对此做了翻译: 返回字符串对象的规范表示形式。 最初为空的字符串池由类…

    Java 2023年6月16日
    073
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球