首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > PowerDesigner >

PDFUtils惯用方法

2012-09-06 
PDFUtils常用方法自个整理的一个生成PDF的常用方法:package com.huangt.util.functionimport java.awt.Co

PDFUtils常用方法

自个整理的一个生成PDF的常用方法:

package com.huangt.util.function;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.image.BufferedImage;import java.io.BufferedReader;import java.io.File;import java.io.FileOutputStream;import javax.swing.ImageIcon;import com.lowagie.text.Document;import com.lowagie.text.HeaderFooter;import com.lowagie.text.Image;import com.lowagie.text.PageSize;import com.lowagie.text.Paragraph;import com.lowagie.text.Phrase;import com.lowagie.text.Rectangle;import com.lowagie.text.pdf.PdfContentByte;import com.lowagie.text.pdf.PdfReader;import com.lowagie.text.pdf.PdfStamper;import com.lowagie.text.pdf.PdfWriter;import com.sun.image.codec.jpeg.JPEGCodec;import com.sun.image.codec.jpeg.JPEGEncodeParam;import com.sun.image.codec.jpeg.JPEGImageEncoder;import de.schlichtherle.io.FileReader;public class PDFUtils {/** * 生成水印的图片 * @author huangt  * @time 2012.6.14 *  */public static void createJpgByFont(String str, String jpgName) {try {// 宽度 高度final int smallWidth = 60 ;BufferedImage bimage = new BufferedImage((str.length() + 3)* smallWidth/2,smallWidth, BufferedImage.TYPE_INT_RGB);Graphics2D g = bimage.createGraphics();g.setColor(Color.WHITE); // 背景色g.fillRect(0, 0, smallWidth * (str.length() + 2),smallWidth); // 画一个矩形g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);// 去除锯齿(当设置的字体过大的时候,会出现锯齿)g.setColor(Color.LIGHT_GRAY); // 字的颜色File file = new File("C:/WINDOWS/Fonts/Arial.ttf"); // 字体文件Font font = Font.createFont(Font.TRUETYPE_FONT, file);// 根据字体文件所在位置,创建新的字体对象(此语句在jdk1.5下面才支持)g.setFont(font.deriveFont((float) smallWidth));g.drawString(str,0,smallWidth);//旋转图片bimage = PDFUtils.rotateImage(bimage, -45);// 在指定坐标除添加文字g.dispose();FileOutputStream out = new FileOutputStream(jpgName); // 指定输出文件JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimage);param.setQuality(50f, true);encoder.encode(bimage, param); // 存盘out.flush();out.close();} catch (Exception e) {e.printStackTrace();}}/** * txt文件转换为pdf文件 * @author huangt  * @time 2012.6.14 * @param txtFile  txt文件路径 * @param pdfFile  pdf文件路径 * @param userPassWord  用户密码 * @param waterMarkName  水印内容 * @param permission   操作权限 */public static void generatePDFWithTxt(String txtFile, String pdfFile,String userPassWord, String waterMarkName) {try {// 生成临时文件File file = File.createTempFile("huangt", ".pdf");// 创建pdf文件到临时文件if (createPDFFile(txtFile, file)) {// 增加水印和加密//waterMark(file.getPath(), pdfFile,waterMarkName);}} catch (Exception e) {e.printStackTrace();}}/** * @author huangt  * @time 2012.6.14 * 创建PDF文档 *  * @param txtFilePath  txt文件路径(源文件) * @param pdfFilePath  pdf文件路径(新文件) */private static boolean createPDFFile(String txtFilePath, File file) {// 设置纸张Rectangle rect = new Rectangle(PageSize.A4);// 设置页码HeaderFooter footer = new HeaderFooter(new Phrase("页码:"), true);footer.setBorder(Rectangle.NO_BORDER);// step1Document doc = new Document(rect, 50, 50, 50, 50);doc.setFooter(footer);try {FileReader fileRead = new FileReader(txtFilePath);BufferedReader read = new BufferedReader(fileRead);// 设置pdf文件生成路径 step2PdfWriter.getInstance(doc, new FileOutputStream(file));// 打开pdf文件 step3doc.open();// 实例化Paragraph 获取写入pdf文件的内容,调用支持中文的方法. step4while (read.ready()) {// 添加内容到pdf(这里将会按照txt文件的原始样式输出)doc.add(new Paragraph(read.readLine()));}// 关闭pdf文件 step5doc.close();return true;} catch (Exception e) {e.printStackTrace();return false;}}/** * 在pdf文件中添加水印 * @author huangt  * @time 2012.6.14 * @param inputFile  原始文件 * @param outputFile 水印输出文件 * @param waterMarkName  水印名字 * @param picPath 图片的路径 */public static void waterMark(String inputFile,String outputFile,String waterMarkName,String picPath) {try {PdfReader reader = new PdfReader(inputFile);PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));int total = reader.getNumberOfPages() + 1;//生成水印图片createJpgByFont(waterMarkName, picPath) ;Image image = Image.getInstance(picPath);image.setAbsolutePosition(0,100);PdfContentByte under;for (int i = 1; i < total; i++) {under = stamper.getUnderContent(i);// 添加图片under.addImage(image);}stamper.close();} catch (Exception e) {e.printStackTrace();}}/** * 图片旋转 * @author huangt  * @time 2012.6.14 * */ public static BufferedImage rotateImage(final BufferedImage bufferedimage,            final int degree){        int w = bufferedimage.getWidth();        int h = bufferedimage.getHeight();        int b = w>h?w:h ;        int type = bufferedimage.getColorModel().getTransparency();        BufferedImage img;        Graphics2D graphics2d;        graphics2d = (img = new BufferedImage(b, b, type))                .createGraphics();        graphics2d.setColor(Color.WHITE); // 背景色        graphics2d.fillRect(0, 0,b,b); // 画一个矩形        graphics2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);        graphics2d.setColor(Color.WHITE); // 背景色        graphics2d.rotate(Math.toRadians(degree),w,h);        graphics2d.drawImage(bufferedimage,-(int)(b*0.28)/2,0, null);        graphics2d.dispose();        return img;    }}
?

热点排行