`
huangronaldo
  • 浏览: 220696 次
  • 性别: 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;
	    }

}
 
分享到:
评论

相关推荐

    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.rar

    JAVA 往PDF中指定位置百分百渲染写入文字/图片,并实现换行代码

    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中使用。

    PdfUtils.zip

    C#对pdf进行分割和将PDF转换成图片,速度快,对pdf进行分割和将PDF转换成图片对pdf进行分割和将PDF转换成图片对pdf进行分割和将PDF转换成图片

    word2pdfUtil.zip

    java版 word转pdf工具类,win版+linux版本都有。linux 不需要安装OFFICE

    pdf相关的操作工具

    pdfutils.rar

    PDFUtils.py

    用python写了一个工具,可以处理pdf,把多页pdf转成多张jpg或者png,将jpg的选定部分裁剪,将处理好的图片重新生成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.zip

    该资源包括了 Java 中转 PDF 所使用的方法与 jar 包,包括:pd4ml.jar,fonts.jar,ss_css2.jar,PDFUtils.java

    java_pdf加水印.txt

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

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

    最近工作中遇到不少问题。总结一下。这段代码主要功能是将一个生成JSP页面转发成PDF输出到页面 ...byte[] pdf = PDFUtils.html2pdf(html); response.setContentType(application/pdf); response.s

    Word2Pdf-开源

    用于将MS Word DOC,RTF或DOCX文件转换为PDF文件的命令行

    webcrowler-allitbooks:webcrowler fer从allitbooks网站获取所有书籍

    网络群众书 webcrowler fer从allitbooks网站获取所有书籍 pdfutils 要安装pdfutils,您必须先安装libpoppler-glib 须藤apt-get install libpoppler-glib-dev libpoppler-glib8 libcairo2-dev libcairo2

Global site tag (gtag.js) - Google Analytics