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

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){

try{

//创建一个pdf读入流

PdfReader reader = new PdfReader(pdfPath);

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

PdfStamper 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();

}

}

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值