java生成PDF格式文件並且加密

package com.me.test;

import java.awt.*;
import java.io.*;


import com.lowagie.text.*;
import com.lowagie.text.Font;
import com.lowagie.text.Image;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.*;

public class PdfConvertor {
	// txt原始文件的路徑
	private static final String txtFilePath = "f:/Itext/test.txt";
	// 生成的pdf文件路徑
	private static final String pdfFilePath = "f:/Itext/test.pdf";
	// 添加水印圖片路徑
	private static final String imageFilePath = "f:/Itext/b.gif";
	// 生成臨時文件前綴
	private static final String prefix = "tempFile";
	// 所有者密碼
	private static final String OWNERPASSWORD = "12345678";

	/**
	 * txt文件轉換爲pdf文件
	 * 
	 * @param txtFile
	 *            txt文件路徑
	 * @param pdfFile
	 *            pdf文件路徑
	 * @param userPassWord
	 *            用戶密碼
	 * @param waterMarkName
	 *            水印內容
	 * @param permission
	 *            操作權限
	 */
	public static void generatePDFWithTxt(String txtFile, String pdfFile,
			String userPassWord, String waterMarkName, int permission) {
		try {
			// 生成臨時文件
			File file = File.createTempFile(prefix, ".pdf");
			// 創建pdf文件到臨時文件
			if (createPDFFile(txtFile, file)) {
				// 增加水印和加密
				waterMark(file.getPath(), pdfFile, userPassWord, OWNERPASSWORD,
						waterMarkName, permission);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/**
	 * 創建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("頁碼:",
				setChineseFont()), 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(), PdfConvertor
						.setChineseFont()));
			}
			// 關閉pdf文件 step5
			doc.close();
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}

	/**
	 * 在pdf文件中添加水印
	 * 
	 * @param inputFile
	 *            原始文件
	 * @param outputFile
	 *            水印輸出文件
	 * @param waterMarkName
	 *            水印名字
	 */
	private static void waterMark(String inputFile, String outputFile,
			String userPassWord, String ownerPassWord, String waterMarkName,
			int permission) {
		try {
			PdfReader reader = new PdfReader(inputFile);
			PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(
					outputFile));
			// 設置密碼
			stamper.setEncryption(userPassWord.getBytes(), ownerPassWord
					.getBytes(), permission, false);
			BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
					BaseFont.NOT_EMBEDDED);
			PdfContentByte under;
			int total = reader.getNumberOfPages() + 1;
			Image image = Image.getInstance(imageFilePath);
			image.setAbsolutePosition(200, 400);
			
			int j = waterMarkName.length();
			char c = 0;
			int rise = 0;
			for (int i = 1; i < total; i++) {
				rise = 500;
				under = stamper.getUnderContent(i);
				// 添加圖片
				under.addImage(image);
				under.beginText();
				under.setColorFill(Color.CYAN);
				under.setFontAndSize(base, 30);
				// 設置水印文字字體傾斜 開始
				if (j >= 15) {
					under.setTextMatrix(200, 120);
					for (int k = 0; k < j; k++) {
						under.setTextRise(rise);
						c = waterMarkName.charAt(k);
						under.showText(c + "");
						rise -= 20;
					}
				} else {
					under.setTextMatrix(180, 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(1f);
				//under.stroke();
			}
			stamper.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 設置中文
	 * 
	 * @return Font
	 */
	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) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return fontChinese;
	}

	public static void main(String[] args) {
		generatePDFWithTxt(txtFilePath, pdfFilePath, OWNERPASSWORD, "allone", 16);
	}
}

 

package com.me.test;

import java.awt.*;
import java.io.*;

import com.lowagie.text.*;
import com.lowagie.text.Font;
import com.lowagie.text.Image;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfWriter;

/**
 * First iText example: Hello World.
 */
public class HelloWorld {

	/** Path to the resulting PDF file. */
	public static final String RESULT = "f:/hello.pdf";
	public static final String pwd = "123456";
	public static final String result = "f:/Itext/b.gif";

	/**
	 * Creates a PDF file: hello.pdf
	 * 
	 * @param args
	 *            no arguments needed
	 */
	public static void main(String[] args) throws DocumentException,
			IOException {
		new HelloWorld().createPdf(RESULT);
	}

	/**
	 * Creates a PDF document.
	 * 
	 * @param filename
	 *            the path to the new PDF document
	 * @throws DocumentException
	 * @throws IOException
	 */
	public void createPdf(String filename) throws DocumentException,
			IOException {
		// 設定文本樣式
		Rectangle rec = new Rectangle(PageSize.A4);
		rec.setBackgroundColor(Color.GRAY);
		rec.setBorder(Rectangle.TOP);
		rec.setBorderColor(Color.black);
		rec.setBorderWidth(50);
		// 創建本文
		Document doc = new Document(rec, 100, 201, 20, 20);
		// 設定路徑
		PdfWriter pdf = PdfWriter.getInstance(doc, new FileOutputStream(
				HelloWorld.RESULT));
		// 設定佈局
		pdf.setViewerPreferences(PdfWriter.PageModeUseThumbs
				| PdfWriter.PageLayoutTwoColumnLeft | PdfWriter.HideMenubar);
		// 加密
		pdf.setEncryption(pwd.getBytes(), pwd.getBytes(), PdfWriter.ALLOW_COPY
				| PdfWriter.ALLOW_PRINTING, PdfWriter.STANDARD_ENCRYPTION_40);
		// 設置中文
		BaseFont base = null;
		Font fontChinese = null;
		try {
			base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
					BaseFont.EMBEDDED);
			fontChinese = new Font(base, 18, Font.BOLD);
		} catch (DocumentException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		doc.open();

		doc.add(new Paragraph("我是Pro", fontChinese));

		doc.close();
	}
}

 

發佈了75 篇原創文章 · 獲贊 2 · 訪問量 3225
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章