使用java代码生成pdf、Excel

该博客主要介绍了使用Java进行PDF和Excel文件操作。在PDF部分,讲解了创建Maven项目、导入依赖、常用类解释及文件生成步骤,还提及未解决的字体显示、页眉页脚和水印功能问题。Excel部分介绍了基本API使用、引入依赖和一个简单示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.PDF

1.1.首先创建maven项目,并导入依赖

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

1.2.一些常用类的解释

一、页面对象
1.Document:生成pdf文件的对象,也可以理解为pdf对象,这个跟pdf文件的位置无关,就是说可以使用一个该对象生成不同位置的相同内容的pdf文件;
需要注意的是,如果要写入内容到之前已经存在的pdf文件,那么写入的时候会先将旧的内容删除掉,然后再写入新的内容,也就是说,新写入的内容会覆盖旧的内容
1)构造方法
Document(Rectangle pageSize, float marginLeft, float marginRight, float marginTop,float marginBottom):
分别指pdf页面大小和内容距离文档边的距离。默认,Document()为:A4,36,36,36,36
2)常用api
document.newPage():创建新的一页,会在新的页面上写入内容;如果新创建的页面没有内容(空白页),那么则不会显示该空白页

2.Rectangle:页面对象,实际上创建Document对象时传入的参数,就是该对象,该对象有更加详细的属性设置(页面大小、页边距啥的)
1)常用构造方法和属性
        Rectangle tRectangle = null;  
        tRectangle = PageSize.A4;// PageSize封装了大量常用的Rectangle数据  
        tRectangle = new Rectangle(800, 600);// 长宽  
        tRectangle = new Rectangle(0, 0, 800, 600);// 等于上面  
        // 2-1 其他页面属性:不能和PageSize封装的静态一起使用  
        tRectangle.setBackgroundColor(BaseColor.BLACK);// 背景色  
        tRectangle.setBorder(1220);// 边框  
        tRectangle.setBorderColor(BaseColor.BLUE);  
        tRectangle.setBorderWidth(244.2f);  
        document = new Document(tRectangle);
        //增加一个超链接
        Anchor baidu = new Anchor("baidu");
        baidu.setReference("www.baidu.com");
        document.add(baidu);
        //给pdf文件中添加图片
        Image instance = Image.getInstance("E:\\myFile\\Picture\\1.jpg");
        //图片对其的方式
        instance.setAlignment(Image.ALIGN_CENTER);
        //图片需要扩大的倍数        
        instance.scalePercent(1);
        document.add(instance);

3.PdfWriter:写入pdf文件前,首先要使用该对象,不然无法写入pdf文件,不管要写入的pdf文件是否之前已经存在,都要先使用该对象
1)常用api
//获取当前所在页的页码
pdfWriter.getCurrentPageNumber();
//所有pdf文件总共有多少页
pdfWriter.getPageNumber();


二、内容对象
1.Font:字体的设置,如颜色、字体、大小等
public Font getChineseFont() {  
        BaseFont bfChinese;  
        Font fontChinese = null;  
        try {
            bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);  
            // fontChinese = new Font(bfChinese, 12, Font.NORMAL);  
            fontChinese = new Font(bfChinese, 12, Font.NORMAL, BaseColor.BLUE);  
        } catch (DocumentException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        return fontChinese;  
  
    }  

2.Element接口
内容对象基本都实现这个接口。如Chunk、Phrase、Paragraph;他们之间的关系如下图1-1:
2.1.Chunk:最小的单位,比cell还要小
2.2.Phrase:
2.3.Paragraph:段落,每一个该对象都会从新的一行开始
1)常用api
        //设置文字居中方式;靠左:0,居中:1,靠右2
        paragraph.setAlignment(1);
        //设置左缩进
        paragraph.setIndentationLeft(12);
        //设置右缩进
        paragraph.setIndentationRight(12); 
        //设置首行缩进
        paragraph.setFirstLineIndent(24); 
        //段落中上下两行的行间距
        paragraph.setLeading(100f);
        //当前段落后的距离,跟下一个段落前的距离有相同的作用
        paragraph.setSpacingAfter(100);
        //增加一条实线
        paragraph.add(new Chunk(new LineSeparator()));
        //增加一条有连续点构成的线
        paragraph1.add(new Chunk(new DottedLineSeparator()));

3.表格对象
3.1.PdfPTable
表格对象
1)构造函数
public PdfPTable(float[] relativeWidths):可以理解为当前表格单元格的个数以及长度,float数组对象的个数就是单元格的个数,
float数组对象的值就是单元格的长度,如果表格本身的长度过大或者float数组的值过大,就会根据float数组值的百分比在表格中进行分配
2)常用api
        //设置水平对齐方式,参照物为上一层对象,谁add这个table对象就以谁为参照物
        pdfPTable.setHorizontalAlignment(Element.ALIGN_CENTER);

3.2.PdfCell
单元格对象
1)构造函数
2)常用api
        //设置垂直对齐方式,注意这个并不是单元格的对齐方式,因为单元格在表格中的分布是固定的,这个是单元格中内容的对齐方式
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        //这个也是单元格中内容的对齐方式
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        //设置单元格中内容与单元格边框的距离,前提时上面那两个单元格的对齐方式没有设置,不然这个不会起作用;
        //这个是离左边框的距离,当然上下左右都可以设置,这里就不在都写出来了
        cell.setPaddingLeft(10f);
3)注意
创建单元格时,单元格的个数,要与上面的个数保持一致,PdfPTable构造方法中的那个数字,最少与那个数字相等,不然不会显示;
如果大于那个数字则且个数并非整数倍,只会显示整数倍的单元格(向下取整),多余的哪些不会显示;
如果大于那个数字,且个数为整数倍(PdfPTable构造方法中个数),则会全部显示

1-1

1.3.pdf文件生成的5步

public void createPdf() throws Exception {  
        // 1-创建文本对象 Document  
        Document document = new Document(PageSize.A4, 500, 150, 50, 50);  
        // 2-初始化 pdf输出对象 PdfWriter  
        PdfWriter.getInstance(document, new FileOutputStream(new File("D:\\test\\pdfExport2.pdf"));  
        // 3-打开 Document  
        document.open();  
        // 4-往 Document 添加内容  
        document.add(new Paragraph("Hello! PDF!!!"));  
        // 5-关闭 Document  
        document.close();  
    }  

1. 4.未解决问题

  • 文件中的中文字体无法显示。
  • 页眉、页脚功能还未实现;水印功能还未实现。

2.Excel

2.1.基本API的使用

首先,理解一下一个Excel的文件的组织形式,一个Excel文件对应于一个workbook(HSSFWorkbook),一个workbook可以有多个sheet(HSSFSheet)组成,一个sheet是由多个row(HSSFRow)组成,一个row是由多个cell(HSSFCell)组成。
基本操作步骤

  • 用HSSFWorkbook打开或者创建“Excel文件对象”
  • 用HSSFWorkbook对象返回或者创建Sheet对象
  • 用Sheet对象返回行对象,用行对象得到Cell对象
  • 对Cell对象读写。

2.2.引入maven依赖

<dependency>
  <groupId>org.apache.poi</groupId>
  <artifactId>poi-ooxml</artifactId>
  <version>3.10.1</version>
</dependency>

2.3.看一个简单的例子

//创建HSSFWorkbook对象(Excel文件对象)
HSSFWorkbook wb =  new  HSSFWorkbook();
//创建HSSFSheet对象(也就是一页,参数为页的索引)
HSSFSheet sheet = wb.createSheet( "sheet0" );
//创建HSSFRow对象(一行,参数为行的索引)
HSSFRow row = sheet.createRow( 0 );
//创建HSSFCell对象(一个单元格,参数为单元格的索引,0就表示该单元格是该行的第一个单元格)
HSSFCell cell=row.createCell( 0 );
//设置单元格的值(单元格的内容)
cell.setCellValue( "单元格中的中文" );
//输出Excel文件
FileOutputStream output= new  FileOutputStream( "d:\\workbook.xls" );
wkb.write(output);
output.flush();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值