欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用itext简单的编辑PDF文件

程序员文章站 2022-07-07 17:55:36
...
Document document = new Document();
		try {
			PdfReader reader = new PdfReader("D://1.pdf");   
	        //根据一个pdfreader创建一个pdfStamper.用来生成新的pdf.  
			PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("D://2.pdf"));
			PdfContentByte over = stamper.getOverContent(1);
			// 开始写入文本
			// 这个字体是itext-asian.jar中自带的 所以不用考虑操作系统环境问题.
			BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
			// baseFont不支持字体样式设定.但是font字体要求操作系统支持此字体会带来移植问题.
			Font font = new Font(bf, 10);
			font.setStyle(Font.BOLD);
			font.getBaseFont();

			// 用pdfreader获得当前页字典对象.包含了该页的一些数据.比如该页的坐标轴信息.
			PdfDictionary p = reader.getPageN(1);
			// 拿到mediaBox 里面放着该页pdf的大小信息.
			PdfObject po = p.get(new PdfName("MediaBox"));
			// po是一个数组对象.里面包含了该页pdf的坐标轴范围.
			PdfArray pa = (PdfArray) po;
			System.out.println(pa.size());
			// 看看y轴的最大值.
			System.out.println(pa.getAsNumber(pa.size() - 1));

			// 开始写入文本
			over.beginText();
			// 设置字体和大小
			over.setFontAndSize(font.getBaseFont(), 10);
			// 设置字体颜色
			over.setColorFill(BaseColor.RED);
			// 设置字体的输出位置
			over.setTextMatrix(107, 540);
			over.showText("HELLO WORLD ");
			over.endText();

			// 画一个圈.
			over.setRGBColorStroke(0xFF, 0x00, 0x00);
			over.setLineWidth(5f);
			over.ellipse(250, 450, 350, 550);
			over.stroke();

			// 插入一页
			stamper.insertPage(2, reader.getPageSize(1));

			PdfContentByte over2 = stamper.getOverContent(2);

			// 第2页画圈
			over2.setRGBColorStroke(0xFF, 0x00, 0x00);
			over2.setLineWidth(5f);
			over2.ellipse(350, 200 + 450, 450, 200 + 550);
			over2.stroke();

			stamper.close();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("file create exception");
		}