`
ITCheng
  • 浏览: 77202 次
  • 来自: 北京
社区版块
存档分类
最新评论

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

    博客分类:
  • Java
阅读更多
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();
	}
}

 

分享到:
评论
2 楼 ITCheng 2011-12-27  
wanxkl 写道
不错 用了 thangks

呵呵 多多交流
1 楼 wanxkl 2011-12-27  
不错 用了 thangks

相关推荐

    java生成PDF 然后加密压缩文件

    前段时间由于项目需要,使用java生成PDF文件,然后将文件压缩成ZIP格式,同时对压缩文件进行加密,先将代码及jar包上传供大家参考,并希望大家共同完善和学习。 java生成PDF,java加密压缩文件并,java生成PDF后压缩...

    JAVA生成PDF文件(Demo+jar),可加密及设置安全性

    首先,我们关注的是"JAVA生成PDF文件"。Java中常用的PDF库有iText、Apache PDFBox、 Flying Saucer等。这里提到了iText,它是一个强大的开源库,可以方便地创建、修改和操作PDF文档。使用iText,你可以添加文本、...

    java生成PDF,java加密压缩文件

    前段时间由于项目需要,使用java生成PDF文件,然后将文件压缩成ZIP格式,同时对压缩文件进行加密,先将代码及jar包上传供大家参考,并希望大家共同完善和学习。 java生成PDF,java加密压缩文件并,java生成PDF后压缩...

    Java+电子签名,生成PDF格式的合同

    Java电子签名技术是一种在PDF文档中实现安全、可验证签署的方法,它结合了现代加密技术和数字证书,确保了文档的完整性和不可篡改性。在本文中,我们将深入探讨如何利用Java来生成带有电子签名的PDF格式合同。 首先...

    Java根据模板动态生成Pdf(添加页码、文件加密、Spire免费版本10页之后无法显示问题、嵌入图片添加公章、转Base64)

    6、若对资源有疑问,可以在详见others/《Java生成Pdf文档使用说明.pdf》中的博主个人联系方式中寻求帮助。 1、Demo示例:https://img-blog.csdnimg.cn/b8f771e24f814d718595710f0e3c0d93.png 2、页码示例:...

    基于java根据模板动态生成PDF文件

    在IT行业中,生成PDF文件是常见的需求,尤其在后端开发中,用于生成报告、发票、合同等文档。本主题聚焦于使用Java编程语言,结合特定的库或框架,根据预定义的模板来动态生成PDF文件。以下是关于这个主题的详细知识...

    java实现pdf文件的电子签字+盖章+防伪二维码+水印+PDF文件加密

    PDF加密可以保护文件不被未经授权的用户打开、编辑或打印。iText提供了PdfWriter或PdfStamper类的setEncryption方法,使用用户提供的密码来加密PDF。你可以设置不同的访问权限,如只读、禁止复制内容、禁止编辑等。 ...

    JAVA在线生成pdf包含jar文件

    这个主题“JAVA在线生成pdf包含jar文件”涉及到利用Java库来创建PDF文档,并且提供了一个包含必需jar文件的压缩包,使得开发者可以直接使用这些库进行开发。以下是关于这个主题的详细知识点: 1. **iText库**:Java...

    Java 生成PDF工具类 免费版

    Java 生成PDF是一个常见的需求,特别是在企业级应用中,用于生成报告、合同或者任何需要以电子文档形式存储或传输的数据。在这个场景下,`iText`是一个非常流行且功能强大的库,尤其对于Java开发者来说。`iText ...

    Java将PDF生成图片

    以下是一些关于“Java将PDF生成图片”的核心知识点: 1. **PDF处理库**:在Java中,我们可以使用第三方库如Apache PDFBox、iText和PDF Clown等来处理PDF文档。这些库提供了丰富的API,用于读取、解析和操作PDF文件...

    java 生成pdf 签章

    总的来说,Java生成PDF并签章涉及了PDF文档处理、数字证书和安全加密等多个方面。理解这些概念和技术,将有助于你更高效地完成相关开发任务。在实际项目中,还需要注意证书管理、安全性以及兼容性等问题。希望这个...

    iText Java生成PDF 加密 水印 - glen的日志 - 网易博客

    iText Java生成PDF 加密 水印 - glen的日志 - 网易博客

    java生成excle和pdf

    2. Java生成PDF: - **iText**:这是一个强大的开源库,用于创建和修改PDF文档。使用iText,你可以添加文本、图像、表格、链接等元素到PDF中。 - **基本步骤**:创建一个`Document`对象,然后使用`Document.open()...

    pdf文件生成加密,设置只读属性,添加水印的必要最新jar包6个包

    在PDF加密过程中,Bouncy Castle可以提供各种加密算法,如AES,RC4等,以确保PDF文件的安全性。这些库对于处理证书和公钥基础设施(PKI)特别有用,可以用于设置PDF的数字签名和验证。 5. **iText PDFA支持**: - ...

    生成pdf,加密、编辑pdf

    本主题将深入探讨如何生成PDF文件,如何为PDF添加水印,以及如何进行PDF的编辑操作。 1. **生成PDF文件**: - **方法一:使用在线工具**:许多在线平台如smallpdf、ilovepdf等提供PDF生成服务,只需上传或输入文本...

    java生成pdf

    Java生成PDF是一个常见的需求,特别是在企业级应用中,如报告生成、发票打印或者电子文档创建。iText是一个强大的工具,它使得在Java环境中创建PDF文档变得简单易行。本篇文章将深入探讨iText库的使用及其核心功能。...

    JAVA100例之实例39 生成PDF文件

    在Java编程中,生成PDF文件是一项常见的任务,特别是在报表、...总之,"JAVA100例之实例39 生成PDF文件"是学习Java生成PDF文档的一个良好起点。通过实践和扩展,你将掌握这一实用技能,并能在实际项目中发挥其价值。

    Java生成pdf的jar包

    Java生成PDF的jar包主要涉及的是使用iText库来创建、编辑或操作PDF文档。iText是一个开源的Java库,广泛用于PDF文档处理。在这个场景中,我们关注的三个jar包是: 1. itext5-itextpdf-5.5.12.jar:这是iText的主要...

    iText是用于生成PDF文档的一个java类库

    iText不仅支持生成PDF文档,还具备将XML、HTML等格式的数据转换为PDF的能力,极大地扩展了其在文档处理领域的应用范围。 在使用iText时,你可以通过一系列API调用来构建PDF文档的结构,如添加文本、图像、表格、...

    PDF有效期设置/PDF加密

    发给客户或供应商的PDF...很多PDF加密或有效期设置工具要么容易破解要么加密后成exe文件,不是原来的PDF文件,不能达到“隐蔽”的作用。当然,安全是相对的,这种设置方式虽然不是绝对安全,对90%以上的用户足够了。

Global site tag (gtag.js) - Google Analytics