/**
* 生成带有章的文件
*
* @param pdfPath
* @param newPDFPath
* @param imagePath
* @author allen_lu
*/
public static 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);
//po是一个数组对象.里面包含了该页pdf的坐标轴范围.
float[] pa = getKeyWords(pdfPath, "珠光");
//开始写入文本
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);
over.endText();
if (i == pa[2]) {
//创建一个image对象.
Image image = Image.getInstance(imagePath);
//设置image对象的输出位置pa.getAsNumber(pa.size()-1).floatValue() 是该页pdf坐标轴的y轴的最大值 0, 0, 841.92, 595.32
image.setAbsolutePosition(pa[0] + 380, pa[1]);
//设置插入的图片大小
image.scaleToFit(70, 70);
over.addImage(image);
}
}
stamper.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* pdf文件加图片
*
* @param filePath
* @param keyWord
* @return
* @author allen_lu
*/
public static float[] getKeyWords(String filePath, String keyWord) {
final float[] resu = new float[3];
try {
PdfReader pdfReader = new PdfReader(filePath);
int pageNum = pdfReader.getNumberOfPages();
PdfReaderContentParser pdfReaderContentParser = new PdfReaderContentParser(pdfReader);
int i = 0;
for (i = 1; i <= pageNum; i++) {
int finalI = i - 1;
pdfReaderContentParser.processContent(i, new RenderListener() {
@Override
public void renderText(TextRenderInfo textRenderInfo) {
String text = textRenderInfo.getText();
if (null != text && text.contains(keyWord)) {
Rectangle2D.Float boundingRectange = textRenderInfo.getBaseline().getBoundingRectange();
resu[0] = boundingRectange.x;
resu[1] = boundingRectange.y;
resu[2] = finalI + 1;
}
}
@Override
public void renderImage(ImageRenderInfo arg0) {
}
@Override
public void endTextBlock() {
}
@Override
public void beginTextBlock() {
}
});
}
} catch (IOException e) {
e.printStackTrace();
}
return resu;
}
PDF文件加载图片
最新推荐文章于 2024-03-19 10:29:56 发布