`
huangronaldo
  • 浏览: 222434 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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);
		// 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;
	    }

}
 
分享到:
评论

相关推荐

    PdfUtils.rar

    `PdfUtils.java`很可能包含了一些关键方法,用于在PDF的指定位置精确地渲染和写入文字或图片。以下是一些相关的知识点: 1. **iText库**:Java中处理PDF通常会使用iText库,这是一个强大的开源库,能够创建、编辑和...

    Python库 | PDFutils-1.0.4.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:PDFutils-1.0.4.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    PdfUtils.java

    PdfUtils.java

    PdfUtils.zip

    PDFUtils.zip是一个包含C#代码实现的工具集,专门用于处理PDF文档,主要功能是PDF的分割和将PDF转换为图片。在这个项目中,开发者可能使用了开源库或自定义的算法来高效地完成这些任务。PDF(Portable Document ...

    django-pdfutils:PDF实用程序

    django-pdfutils 一个简单的django应用程序,用于生成PDF文档。...报告范例报表基本上是具有自定义方法和属性的视图。 # -*- coding: utf-8 -*-from django . contrib . auth . models import Userf

    pdfutils.jar

    word转pdf,excel转pdf,ppt转pdf的工具包。springboot项目导入项目开箱即用,可以添加到项目的资源包中使用,也可以安装到maven中使用。

    word2pdfUtil.zip

    在实际使用"word2pdfUtil"时,开发人员需要按照提供的API接口,将Word文档的路径作为输入参数,然后调用转换方法,最后得到生成的PDF文件。这个过程通常包括以下步骤:加载Word文档、解析文档内容、构建PDF结构、...

    PDFUtils.py

    用python写了一个工具,可以处理pdf,把多页pdf转成多张jpg或者png,将jpg的选定部分裁剪,将处理好的图片重新生成pdf集合。

    SpringBoot集成Freemarker+FlyingSaucer实现pdf在线预览.pdf

    然后,创建一个 PdfUtils 工具类,用于生成PDF文档。 四、PDF工具类编写 PdfUtils工具类主要用于生成PDF文档。该类中包含了生成HTML模板、将HTML模板转换为PDF文档的方法。方法上有完整的注释,思路是利用模板引擎...

    pdf-utils:简单的PDF实用程序,包括OCR扫描,拆分和旋转

    PDF实用程序要求: 设置: git clone git@github.com:dothealth/pdf-utils.git cd pdf-utils && docker-compose up 打开浏览器到localhost:5052

    java源码:PDF分割与合并源代码.rar

    在Java中,有几种常用的库可以用来处理PDF,例如Apache PDFBox、iText和PDFClown等。其中,Apache PDFBox是Apache软件基金会的一个开源项目,它提供了丰富的API来读取、创建、编辑PDF文档。iText则是一个强大的PDF...

    java生成pdf原码及jar包

    在`PdfUtils.java`中,我们可以看到一些基本的PDF生成和操作方法。例如,创建一个PDF文档通常需要以下步骤: 1. **初始化Document对象**:`Document document = new Document();` 这个对象是整个PDF的容器,用于...

    java_pdf加水印.txt

    该PdfUtils工具类,是java对pdf文档增加水印,也可以使用该工具模拟实现电子签。提供了两个方法:1添加条码 ;2.添加图片水印

    动态jsp页面转PDF输出到页面的实现方法

    接下来,我们使用`PDFUtils.html2pdf()`方法将这个HTML字符串转化为PDF。这个方法通常会调用iText库中的方法,如`XMLWorker`和`PdfWriter`,将HTML解析并转换为PDF文档。 在服务器端生成PDF后,我们需要将其设置...

    AsposePdf与使用方式

    在本文中,我们将深入探讨Aspose.Pdf的使用方法,并结合提供的资源来理解其在实际开发中的应用。 首先,`aspose.pdf-11.0.0.jar`是Aspose.Pdf的库文件,包含了所有必要的类和方法,使得Java开发者能够在项目中直接...

    OpenOffice.rar

    2. 文件转换方法:接收输入的源文件路径和目标PDF文件路径,调用JODConverter API执行转换操作。 3. 错误处理:捕获并处理可能发生的异常,如文件找不到、OpenOffice服务未启动等。 `命令行.txt` 文件可能包含了...

    vue前端导出pdf文件引用的js文件资源

    一个常用的库是`jsPDF`,它提供了丰富的API来创建和编辑PDF文件。要引入`jsPDF`,你需要先通过npm或yarn将其安装到你的项目中: ```bash npm install jspdf --save # 或者 yarn add jspdf ``` 接着,我们需要处理...

Global site tag (gtag.js) - Google Analytics