java pdf添加图片_Java编辑PDF写入文字 插入图片

本文展示了如何使用Java的iText库编辑PDF文件,包括在PDF中添加文字、设置字体颜色和大小,以及插入图片,并提供了一个具体的代码示例。通过这个例子,读者可以了解到如何定位文本和图片在PDF页面上的位置。
摘要由CSDN通过智能技术生成

package com.test;

import com.itextpdf.text.BaseColor;

import com.itextpdf.text.Font;

import com.itextpdf.text.Image;

import com.itextpdf.text.pdf.*;

import org.junit.Test;

import java.io.FileOutputStream;

/**

*编辑PDF

*/

public class PDFTest {

@Test

public void testPDF(){

generatePDF("D:/1.pdf","D:/2.pdf","D:1.png");

}

/**

* 生成新的PDF

* @param pdfPath 要编辑的PDF路径

* @param newPDFPath 生成新的PDF路径

* @param imagePath 插入图片路径

*/

public void generatePDF(String pdfPath,String newPDFPath,String imagePath){

PdfReader reader = null;

PdfStamper stamper = null;

try{

//创建一个pdf读入流

reader = new PdfReader(pdfPath);

//根据一个pdfreader创建一个pdfStamper.用来生成新的pdf.

stamper = new PdfStamper(reader,new FileOutputStream(newPDFPath));

//这个字体是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();

PdfContentByte over;

//页数是从1开始的

for (int i=1; i<=reader.getNumberOfPages(); i++){

//获得pdfstamper在当前页的上层打印内容.也就是说 这些内容会覆盖在原先的pdf内容之上.

over = stamper.getOverContent(i);

//当前页的下层打印内容 按自己需求选择

//over = stamper.getUnderContent(i);

//用pdfreader获得当前页字典对象.包含了该页的一些数据.比如该页的坐标轴信息.

PdfDictionary p = reader.getPageN(i);

//拿到mediaBox 里面放着该页pdf的大小信息.

PdfObject po = p.get(new PdfName("MediaBox"));

//po是一个数组对象.里面包含了该页pdf的坐标轴范围.

PdfArray pa = (PdfArray) po;

//开始写入文本

over.beginText();

//设置字体和大小

over.setFontAndSize(font.getBaseFont(), 90);

//设置字体颜色

over.setColorFill(new BaseColor(0,110,107,100));

com.itextpdf.text.pdf.PdfGState gState = new PdfGState();

gState.setStrokeOpacity(0.1f);

over.setGState(gState);

//要输出的text 对齐方式 写的字 设置字体的输出位置 字体是否旋转

over.showTextAligned(0,"HELLO WORLD",0,100,100);

over.endText();

//创建一个image对象.

Image image = Image.getInstance(imagePath);

//设置image对象的输出位置pa.getAsNumber(pa.size()-1).floatValue() 是该页pdf坐标轴的y轴的最大值 0, 0, 841.92, 595.32

image.setAbsolutePosition(0,pa.getAsNumber(pa.size()-1).floatValue());

//设置插入的图片大小

image.scaleToFit(50,50);

over.addImage(image);

//画一个圈.

over.setRGBColorStroke(0xFF, 0x00, 0x00);

over.setLineWidth(5f);

over.ellipse(250, 450, 350, 550);

over.stroke();

}

stamper.close();

}catch (Exception e){

e.printStackTrace();

}

finally {

try {

if (null != is)

is.close();

} catch (Exception e) {

e.printStackTrace();

}

try {

if (null != os)

os.close();

} catch (Exception e) {

e.printStackTrace();

}

}

} }

PDF开发包下载地址:http://pdfbox.apache.org/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值