PDFUtils常用方法

5 篇文章 0 订阅
4 篇文章 0 订阅

自个整理的一个生成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);
		// step1
		Document doc = new Document(rect, 50, 50, 50, 50);
		doc.setFooter(footer);
		try {
			FileReader fileRead = new FileReader(txtFilePath);
			BufferedReader read = new BufferedReader(fileRead);
			// 设置pdf文件生成路径 step2
			PdfWriter.getInstance(doc, new FileOutputStream(file));
			// 打开pdf文件 step3
			doc.open();
			// 实例化Paragraph 获取写入pdf文件的内容,调用支持中文的方法. step4
			while (read.ready()) {
				// 添加内容到pdf(这里将会按照txt文件的原始样式输出)
				doc.add(new Paragraph(read.readLine()));
			}
			// 关闭pdf文件 step5
			doc.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;
	    }

}
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值