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日