Java实现PDF导出功能的示例代码

 更新时间:2023年09月18日 14:07:17   作者:爱打羽球的码猿  
这篇文章主要为大家详细介绍了Java实现PDF导出功能的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下

一、添加依赖

 <dependency>
            <groupId>com.lowagie</groupId>
            <artifactId>itext</artifactId>
            <version>2.1.5</version>
        </dependency>

二、实现示例代码

如下代码中使用了 【SIMYOU.TTF】幼圆字体,根据需要可以自行下载

package com.lyp;
import com.lowagie.text.*;
import com.lowagie.text.Font;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.List;
public class downLoadPDF {
    public static void main(String[] args) {
        String fileName = "test.pdf";
        String path = "D:pdf/";
        try {
            //创建文档,设置页面大小、左右上下边距
            Document document = new Document();
            //处理中文显示问题,使用资源字体
            BaseFont bfChinese = BaseFont.createFont("/font/SIMYOU.TTF",BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
            Font dateTitle = new Font(bfChinese,7,Font.NORMAL);
            Font title = new Font(bfChinese,12,Font.BOLD);//文字加粗
            Font textFont = new Font(bfChinese,7,Font.NORMAL);//文字正常
            //给出输出路径
            PdfWriter.getInstance(document, new FileOutputStream(path+fileName));
            //打开文档
            document.open();
            //标题
            PdfPTable tableTitle = new PdfPTable(3);
            PdfPTable codeTitle = new PdfPTable(1);
            //生成一个7列的表格
            PdfPTable table = new PdfPTable(7);
            //定义每个单元格的宽度
            float[] widthsHeaderTitle = {1f,1f,1f};
            float[] widthsCodeTitle = {1f};
            float[] widthsHeader = {1f,1f,1f,1f,1f,1f,2f};
            float lineHeight = (float)20.0;
            //设置表格每一格的宽度
            tableTitle.setWidths(widthsHeaderTitle);
            codeTitle.setWidths(widthsCodeTitle);
            table.setWidths(widthsHeader);
            //设置表格总体宽度
            tableTitle.setWidthPercentage(100);
            codeTitle.setWidthPercentage(100);
            table.setWidthPercentage(100);
            int colSpan = 1;
            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date(System.currentTimeMillis());
            //添加标题
            createTableCellLeft("导出人:行如火", textFont, tableTitle, lineHeight, colSpan);
            createTableCellCenter("确认出差记录表", title, tableTitle, lineHeight, colSpan);
            createTableCellRight(formatter.format(date), dateTitle, tableTitle, lineHeight, colSpan);
            document.add(tableTitle);
            createTableCellRight("功能码: XXXXXXXXX",textFont, codeTitle, lineHeight, colSpan);
            document.add(codeTitle);
            document.add(new Paragraph("\n"));
            String[] array = {"报表生成日期 ","状态 ", "经办人员 ", "提交时间 ","复核人员 ", "复核时间 ", "情况补充 "};
            for (String s : array) {
                createTableCell(s, textFont, table, lineHeight, colSpan);
            }
            List<Map<String, Object>> dataResult = getResult();
            for (Map<String, Object> map : dataResult) {
                String dataTime = map.get("dateTime") != null?map.get("dateTime").toString():"0";
                String status = "0";
                if (null != map.get("status")) {
                    if ("0".equals(map.get("status"))) {
                        status = "待确认";
                    }
                    if ("1".equals(map.get("status"))) {
                        status = "待复核";
                    }
                    if ("2".equals(map.get("status"))) {
                        status = "已复核";
                    }
                }
                String creator = map.get("creator") != null?map.get("creator").toString():"0";
                String createTime = map.get("createTime") != null?map.get("createTime").toString():"0";
                String updator = map.get("updator") != null?map.get("updator").toString():"0";
                String updateTime = map.get("updateTime") != null?map.get("updateTime").toString():"0";
                String description = map.get("description") != null?map.get("description").toString():"0";
                createTableCell(dataTime, textFont, table, lineHeight, colSpan);
                createTableCell(status, textFont, table, lineHeight, colSpan);
                createTableCell(creator, textFont, table, lineHeight, colSpan);
                createTableCell(createTime, textFont, table, lineHeight, colSpan);
                createTableCell(updator, textFont, table, lineHeight, colSpan);
                createTableCell(updateTime, textFont, table, lineHeight, colSpan);
                createTableCell(description, textFont, table, lineHeight, colSpan);
            }
            document.add(table);
            document.close();
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        File file = new File(fileName);
        System.out.println(file);
    }
    private static void createTableCell(String text, Font font, PdfPTable table, float lineHeight, int colSapn) {
        PdfPCell cell;
        cell = new PdfPCell(new Paragraph(text,font));
        //合并单元格列
        cell.setColspan(colSapn);
        //设置水平居中
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        //设置垂直居中
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        cell.setFixedHeight(lineHeight);
        //将单元格内容添加到表格中
        table.addCell(cell);
    }
    private static void createTableCellLeft(String text, Font font, PdfPTable table, float lineHeight ,int colSapn) {
        PdfPCell cell;
        cell = new PdfPCell(new Paragraph(text,font));
        //合并单元格列
        cell.setColspan(colSapn);
        //设置水平
        cell.setHorizontalAlignment(Element.ALIGN_LEFT);
        //设置垂直
        cell.setVerticalAlignment(Element.ALIGN_BOTTOM);
        cell.setFixedHeight(lineHeight);
        cell.setBorderWidthRight(0);
        cell.setBorderWidthBottom(0);
        cell.setBorderWidthLeft(0);
        cell.setBorderWidthTop(0);
        //将单元格内容添加到表格中
        table.addCell(cell);
    }
    private static void createTableCellCenter(String text, Font font, PdfPTable table, float lineHeight ,int colSapn) {
        PdfPCell cell;
        cell = new PdfPCell(new Paragraph(text,font));
        //合并单元格列
        cell.setColspan(colSapn);
        //设置水平居中
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        //设置垂直居中
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        cell.setFixedHeight(lineHeight);
        cell.setBorderWidthLeft(0);
        cell.setBorderWidthRight(0);
        cell.setBorderWidthBottom(0);
        cell.setBorderWidthTop(0);
        //将单元格内容添加到表格中
        table.addCell(cell);
    }
    private static void createTableCellRight(String text, Font font, PdfPTable table, float lineHeight , int colSapn) {
        PdfPCell cell;
        cell = new PdfPCell(new Paragraph(text,font));
        //合并单元格列
        cell.setColspan(colSapn);
        //设置水平
        cell.setHorizontalAlignment(Element.ALIGN_RIGHT);
        //设置垂直
        cell.setVerticalAlignment(Element.ALIGN_TOP);
        cell.setFixedHeight(lineHeight);
        //将单元格内容添加到表格中
        //去除边框
        cell.setBorderWidthLeft(0);
        cell.setBorderWidthBottom(0);
        cell.setBorderWidthRight(0);
        cell.setBorderWidthTop(0);
        table.addCell(cell);
    }
    private static List<Map<String, Object>> getResult() {
        List<Map<String, Object>> result = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            Map<String, Object> map = new HashMap<>();
            map.put("dateTime", "2022/10/11");
            map.put("creator", "行如火");
            map.put("createTime", "2022/10/10");
            map.put("updator", "疾如风");
            map.put("updateTime", "2022/10/11");
            if(i == 0) {
                map.put("status", "0");
                map.put("description", "测试导出PDF");
            } else if (i < 4){
                map.put("status", "1");
                map.put("description", "测试导出PDF"+i);
            } else {
                map.put("status", "2");
                map.put("description", "测试导出PDF"+i);
            }
            result.add(map);
        }
        System.out.println(result);
        return result;
    }
}

三、效果展示

对应目录下生成test.pdf 文件

生成效果如下所示:

以上就是Java实现PDF导出功能的示例代码的详细内容,更多关于Java导出PDF的资料请关注脚本之家其它相关文章!

相关文章

  • java中多态概念、实现原理详解

    java中多态概念、实现原理详解

    JAVA中多态性是对象多种表现形式的体现。在面向对象中,最常见的多态发生在使用父类的引用来引用子类的对象。下面这篇文章主要给大家介绍一下,需要的朋友可以参考下
    2017-04-04
  • 5个JAVA入门必看的经典实例

    5个JAVA入门必看的经典实例

    这篇文章主要为大家详细介绍了5个JAVA入门必看的经典实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • SpringBoot JPA实现查询多值

    SpringBoot JPA实现查询多值

    这篇文章主要为大家详细介绍了SpringBoot JPA实现查询多值,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Mybatis批量插入,返回主键ID不成功,巨坑记录

    Mybatis批量插入,返回主键ID不成功,巨坑记录

    这篇文章主要介绍了Mybatis批量插入,返回主键ID不成功,巨坑记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 简单了解Spring IoC相关概念原理

    简单了解Spring IoC相关概念原理

    这篇文章主要介绍了简单了解Spring IoC相关概念原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • Java Web十条开发实用小知识

    Java Web十条开发实用小知识

    这篇文章主要介绍了Java Web十条开发实用小知识的相关资料,需要的朋友可以参考下
    2016-05-05
  • Java 中的5个代码性能提升技巧

    Java 中的5个代码性能提升技巧

    这篇文章主要给大家分享了Java的5个代码性能提升的技巧,虽然大多数情况下极致优化代码是没有必要的,但是作为一名技术开发者,我们还是想追求代码的更小、更快,更强。如果哪天发现程序的运行速度不尽人意,就需要这样的文章了,需要的朋友可以参考一下
    2021-12-12
  • 对SpringBoot项目Jar包进行加密防止反编译的方案

    对SpringBoot项目Jar包进行加密防止反编译的方案

    最近项目要求部署到其他公司的服务器上,但是又不想将源码泄露出去,要求对正式环境的启动包进行安全性处理,防止客户直接通过反编译工具将代码反编译出来,本文介绍了如何对SpringBoot项目Jar包进行加密防止反编译,需要的朋友可以参考下
    2024-08-08
  • Java集合和数组的区别

    Java集合和数组的区别

    本文主要介绍了Java集合和数组的区别。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • Java 语言实现清除带 html 标签的内容方法

    Java 语言实现清除带 html 标签的内容方法

    下面小编就为大家带来一篇Java 语言实现清除带 html 标签的内容方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02

最新评论