package com.jll.demo;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
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 com.itextpdf.text.pdf.PdfWriter;
/**
*
* @author jiang.lili
*
*/
public class PDFBuild {
/**
* 设置中文字体样式和大小
* @return
*/
private static Font setChineseFont() {
BaseFont base = null;
Font fontChinese = null;
// 所有者密码
try {
base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
BaseFont.EMBEDDED);
fontChinese = new Font(base, 12, Font.NORMAL);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return fontChinese;
}
// 所有者密码
// private static final String OWNERPASSWORD = "123456";
public static void buidPDF(String txtFilePath,String pdfFile, String imageFile,
String waterMarkName, int permission) {
try {
File file = File.createTempFile("tempFile", ".pdf"); // 创建临时文件
// 生成PDF
if (createPDFFile(txtFilePath,file)) {
waterMark(file.getPath(), imageFile, pdfFile,waterMarkName,
permission); // 添加水印
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 创建PDF文件
*
* @param file
* 临时文件
* @return 成功/失败
*/
public static boolean createPDFFile(String txtFilePath,File file) {
// 设置纸张
Rectangle rect = new Rectangle(PageSize.A4);
Document doc = new Document(rect, 50.0F, 50.0F, 50.0F, 50.0F);
try {
FileReader fileRead = new FileReader(txtFilePath);
BufferedReader read = new BufferedReader(fileRead);
PdfWriter.getInstance(doc, new FileOutputStream(file));
doc.open();
// 实例化Paragraph 获取写入pdf文件的内容,调用支持中文的方法. step4
while (read.ready()) {
// 添加内容到pdf(这里将会按照txt文件的原始样式输出)
System.out.println(read.readLine());
//不显示,没解决
doc.add(new Paragraph(read.readLine(), setChineseFont()));
}
BaseFont bf = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1",
"Identity-H", true);// 使用系统字体
Font font = new Font(bf, 14.0F, 0);
font.setStyle(37); // 设置样式
font.setFamily("宋体"); // 设置字体
Paragraph p = new Paragraph("付 款 通 知 书\r\n", font);
p.setAlignment(1);
doc.add(p);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
} finally{
doc.close();
}
}
/**
* 开始画圆圈和里面的设置圆圈里面的字体位置
* @param inputFile
* @param imageFile 图片路径
* @param outputFile 生成pdf路径
* @param waterMarkName 要显示圆圈里的文字
* @param permission
*/
public static void waterMark(String inputFile, String imageFile,
String outputFile, String waterMarkName, int permission) {
try {
PdfReader reader = new PdfReader(inputFile);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
outputFile));
// 设置密码(有问题之前的demo也没能实现目前没找到原因)
//stamper.setEncryption(userPassWord.getBytes(), ownerPassWord.getBytes(), permission, false);
BaseFont base = BaseFont.createFont(
"C:/WINDOWS/Fonts/SIMSUN.TTC,1", "Identity-H", true);// 使用系统字体
int total = reader.getNumberOfPages() + 1;
Image image = Image.getInstance(imageFile);
// 图片位置 (左边距,高度)
image.setAbsolutePosition(50, 100);
image.setRotation(-20);//旋转 弧度
image.setRotationDegrees(-45);//旋转 角度
//image.scaleAbsolute(200,100);//自定义大小
image.scalePercent(30);//依照比例缩放
PdfContentByte under;
int j = waterMarkName.length();
char c = 0;
int rise = 0;
for (int i = 1; i < total; i++) {
rise = 420;
under = stamper.getUnderContent(i);
// 添加水印图片
under.addImage(image);
PdfGState gs = new PdfGState();
gs.setFillOpacity(0.2f);// 设置透明度为0.2(感觉没效果)
under.setGState(gs);
// 设置水印文字字体倾斜 开始
under.beginText();
under.setColorFill(BaseColor.DARK_GRAY);
//under.setGrayFill(0.1f);//设置背景灰色度(和上面设置的效果差不多)
under.setFontAndSize(base, 15);
if (j >= 15) {
under.setTextMatrix(200, 120);
for (int k = 0; k < j; k++) {
under.setTextRise(rise);
c = waterMarkName.charAt(k);
under.showText(c + "");
}
} else {
//字体整个向右边靠把260调大点
under.setTextMatrix(265, 100);
for (int k = 0; k < j; k++) {
under.setTextRise(rise);
c = waterMarkName.charAt(k);
under.showText(c + "");
rise -= 18;
}
}
// 添加水印文字 结束
under.endText();
// 画个圈
under.ellipse(250, 450, 350, 550);
under.setLineWidth(2f); //圈的宽度
under.stroke();
}
stamper.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String imageFilePath = "WebContent/image/00.jpg"; // 水印图片路径
String pdfFilePath = "D:/itext.pdf"; // 文件生成路径
String txtFilePath = "d:/01.txt";// txt原始文件的路径
buidPDF(txtFilePath,pdfFilePath, imageFilePath, "正版授权", 16);
}
}
最近下载更多
最近浏览更多
1358849392 LV21
2022年11月23日
akbar2020 LV9
2022年9月4日
是你爸爸啊100 LV5
2022年8月29日
crosa_Don LV18
2022年6月7日
heifenglei LV7
2022年4月7日
nickshen111 LV8
2021年12月13日
来恬爸爸晋亚阳 LV3
2021年10月29日
疯狂的巨兔12138 LV4
2021年5月14日
阿玉之父 LV1
2021年4月22日
一字清华 LV8
2021年2月21日

