java itext PDF简略笔记

一、 jar包依赖

iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
项目要使用iText,必须引入jar包。才能使用,maven依赖如下:

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

输出中文,还要引入下面itext-asian.jar包:

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

设置pdf文件密码,还要引入下面bcprov-jdk15on.jar包:

	<dependency>
		 <groupId>org.bouncycastle</groupId>
		 <artifactId>bcprov-jdk15on</artifactId>
		 <version>1.54</version>
	</dependency>

二、简单创建PDF的demo

public static void main(String[] args) {
        Document document = null;
        PdfWriter writer = null;
        try {
            OutputStream os = new FileOutputStream(new File("E://test.pdf"));
            // 1.新建document对象
            document = new Document(PageSize.A4);
            // 2.建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中。
            writer = PdfWriter.getInstance(document, os);
            // 3.打开文档
            document.open();
            // 4.添加内容
            Paragraph graph = new Paragraph("Hello Itext pdf!");
            document.add(graph);
            writer.flush();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                // 5.关闭文档
                if(document != null) document.close();
                //关闭书写器
                if(writer != null) writer.close();
            }catch (Exception e){
            }
        }
    }

三、常用组件

1、段落

Paragraph graph = new Paragraph()

2、表格

	Font font = new Font();
    font.setSize(10f);
	PdfPTable pdfPTable = new PdfPTable(4);//列数
	java.util.List<PdfPRow> listRow = pdfPTable.getRows();
	PdfPCell cells[]= new PdfPCell[4];
	PdfPRow row = new PdfPRow(cells);
	String[] titles = {"text1", "", "text2", ""};
	for(int j = 0; j < titles.length; j++){
		cells[j] = new PdfPCell(new Paragraph(titles[j], font));//单元格内容
		cells[j].setHorizontalAlignment(Element.ALIGN_LEFT);//水平居中
		cells[j].setVerticalAlignment(Element.ALIGN_MIDDLE);//垂直居中
		cells[j].setBorder(PdfPCell.NO_BORDER);//无边框
		cells[j].setColspan(2);//合并单元格
		cells[j].setMinimumHeight(30f);//单元格最小高度
	}
	listRow.add(row);
	document.add(pdfPTable);

3、有序队列

	com.itextpdf.text.List orderedList = new com.itextpdf.text.List(com.itextpdf.text.List.ORDERED);
	orderedList.add(new ListItem(leading, text, font)); // leading:行距, text:文本, font:字体

四、加载自定义字体

    public static Font createFont(float fontSize) throws Exception{
        // 加载自定义字体
        ClassPathResource cpr = new ClassPathResource("arial.ttf");
        BaseFont bf = BaseFont.createFont(cpr.getPath(),BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        Font font = new Font(bf, fontSize);
        return font;
    }

注:windows系统下的字体路径:
C:\Windows\Fonts
控制面板\外观和个性化\字体

五、中文支持

输出中文,引入下面itext-asian.jar包:

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

代码如下:

   //BaseFont-确认支持中文
   BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
   //设置字体
   Font fontChinese = new Font(bfChinese, 20, Font.NORMAL);
   String content = "凭证表单";
   Paragraph pagragraph = new Paragraph(content, fontChinese);

六、添加水印

目前,找到的方法有两种。1、读取已存在的PDF文件,添加水印;2、在生成PDF的同时,添加水印。

1)、读取已存在的PDF文件,添加水印

 PdfReader reader = new PdfReader("E://CMX60201904180007.pdf");
 PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("E://111.pdf"));
 BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
 PdfGState gs1 = new PdfGState();
 gs1.setFillOpacity(0.1f);
 PdfContentByte under = stamper.getUnderContent(1);
 under.beginText();
 under.setGState(gs1);
 under.setFontAndSize(bfChinese, 30);
 under.setColorFill(BaseColor.GRAY);// 文字水印 颜色
 // 水印文字成45度角倾斜
 under.showTextAligned(Element.ALIGN_LEFT, "水印.......summer........", 230, 660, 45);
 // 添加水印文字
 under.endText();


//添加图片水印
 Image image = Image.getInstance(IOUtils.toByteArray(new FileInputStream("E:\\u=3283476423,4126530767&fm=26&gp=0.jpg")));
 image.setAbsolutePosition(100, 300);
 under.addImage(image);
 
 stamper.close();

2、在生成PDF的同时,添加水印

说明:透明度的设置必须在文本设置之前,否则不起作用。(切记)

自测的代码如下:

 //BaseFont-确认支持中文
  BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
  //添加水印
  PdfContentByte under = writer.getDirectContentUnder();
  //打开设置水印的文本
  under.beginText();

  //设置透明度
  PdfGState gState = new PdfGState();
  gState.setFillOpacity(0.1f);
//gState.setStrokeOpacity(0.9f);
  //水印颜色
  under.setColorFill(BaseColor.RED);
  under.setGState(gState);

  under.setFontAndSize(bfChinese, 18);
  // 水印文字成45度角倾斜
  under.showTextAligned(Element.ALIGN_LEFT, "水印.......summer........", 230, 660, 45);

  //关闭设置水印的文本
  under.endText();
  writer.flush();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值