1. 添加依赖
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
2. java代码
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import java.io.FileOutputStream;
import java.util.Random;
public class PDFUtil {
private static final float IAMGE_HEIGHT = 110f;
private static final float IAMGE_WIDTH = 110f;
public static void createPdf(String filePath,String contents) {
Document document = null;
try {
document = new Document(PageSize.A4);
PdfWriter.getInstance(document,new FileOutputStream(filePath));
document.open();
document.addCreationDate();
BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
Font font = new Font(baseFont);
Paragraph paragraph = new Paragraph(contents,font);
paragraph.setAlignment(Element.ALIGN_CENTER);
document.add(paragraph);
}catch (Exception e){
e.printStackTrace();
}finally {
if (document!=null){
document.close();
}
}
}
public static void addPdfMark(String pdfPath,String logoPath, String outPath) throws Exception {
PdfReader reader = new PdfReader(pdfPath, "PDF".getBytes());
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(outPath));
int pageSize = reader.getNumberOfPages();
float pageHeight = reader.getPageSize(1).getHeight();
float pageWidth = reader.getPageSize(1).getWidth();
try {
int lineNum = (int) (pageHeight / IAMGE_HEIGHT);
int middleY = (int) pageWidth / 2;
for (int i = 1; i <= pageSize; i++) {
for (int j = 0, k = 0; j < lineNum; j = j + 4, k++) {
Random random = new Random();
Image img = Image.getInstance(logoPath);
img.scaleAbsolute(IAMGE_WIDTH, IAMGE_HEIGHT * 184 / 455);
img.setAlignment(Image.UNDERLYING);
int trueY;
while (true) {
trueY = random.nextInt(middleY);
if (trueY > IAMGE_WIDTH / 2 && trueY < (middleY - IAMGE_WIDTH)) {
break;
}
}
img.setAbsolutePosition(trueY, j * IAMGE_HEIGHT + (float) random.nextInt((int) IAMGE_HEIGHT) - (k % 2) * 10);
img.setRotationDegrees(random.nextInt(360));
PdfContentByte under = stamp.getUnderContent(i);
PdfGState gs = new PdfGState();
gs.setFillOpacity(0.5f);
under.setGState(gs);
under.addImage(img);
while (true) {
trueY = random.nextInt(middleY) + middleY;
if (trueY > middleY + IAMGE_WIDTH / 2 && trueY < (2 * middleY - IAMGE_WIDTH)) {
break;
}
}
img.setAbsolutePosition(trueY, j * IAMGE_HEIGHT + (float) random.nextInt((int) IAMGE_HEIGHT) - (k % 2) * 10);
img.setRotationDegrees(random.nextInt(360));
under.addImage(img);
}
}
} catch (Exception e) {
throw e;
} finally {
stamp.close();
reader.close();
}
}
}
3. 测试
public class TestPDFUtil {
public static void main(String[] args) throws Exception {
PDFUtil.createPdf("D:\\1.pdf","我是派大星");
PDFUtil.addPdfMark("D:\\1.pdf","D:\\go_logo.png","D:\\test.pdf");
System.out.println("done");
}
}