首页>代码>itext报表的小demo>/itext报表的小demo/iTextdemo/src/com/jll/demo/PDFBuild.java
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);  
			   }  

}
最近下载更多
crosa_Don  LV18 2022年6月7日
yaosiming  LV8 2020年4月14日
157554513749  LV11 2020年4月11日
zmy001  LV11 2020年4月8日
刘芳雄  LV5 2019年7月10日
zb8858662  LV4 2019年5月13日
皮皮虾一月  LV8 2019年4月25日
哦大幅度  LV16 2018年10月23日
tyyeng  LV18 2018年9月15日
gaoxin222  LV14 2018年9月3日
最近浏览更多
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日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友