package com.sp2p.util;
import java.awt.Color;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import org.apache.struts2.ServletActionContext;
import org.w3c.dom.Attr;
import org.w3c.dom.CDATASection;
import org.w3c.dom.Comment;
import org.w3c.dom.DOMConfiguration;
import org.w3c.dom.DOMException;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
import org.w3c.dom.DocumentType;
import org.w3c.dom.Element;
import org.w3c.dom.EntityReference;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.ProcessingInstruction;
import org.w3c.dom.Text;
import org.w3c.dom.UserDataHandler;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfStamper;
import com.sun.org.apache.xerces.internal.dom.DOMImplementationImpl;
/**
*
*/
public class PDFUtil {
/**
* 增加水印
*/
protected static void addWater(String urlSource, String urlFor, String path) throws Exception {
// 待加水印的文件
PdfReader reader = new PdfReader(urlSource);
// 加完水印的文件
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(urlFor));
try {
int total = reader.getNumberOfPages() + 1;
PdfContentByte content = null;
// int high = 50;// 高度
// 循环对每页插入水印
for (int i = 1; i < total; i++) {
// 水印的起始
// high = 500;
// content = stamper.getUnderContent(i);//底部添加
content = stamper.getOverContent(i);// 顶部添加
// 开始
content.beginText();
// 设置颜色
content.setColorFill(Color.RED);
// 设置起始位置
content.setTextMatrix(200, 480);
// 水印图片
com.lowagie.text.Image image = com.lowagie.text.Image.getInstance(path + "images/testR.png");
image.setAbsolutePosition(200, 100);
// 添加图片
content.addImage(image);
content.endText();
}
} catch (Exception e) {
e.printStackTrace();
throw (e);
} finally {
stamper.close();
}
}
/**
* 创建pdf
*/
private static String create(String url, String pdfUrl, String pdfName, String rootpath) throws IOException {
OutputStream os = null;
try {
ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(url);
// URL ur = new URL(url);
// renderer.setDocument(url);
// Document doc =null;
// renderer.setDocument(doc, url);
// 解决中文支持问题
ITextFontResolver fontResolver = renderer.getFontResolver();
String paths = ServletActionContext.getServletContext().getRealPath("WEB-INF/simsun.ttc");
fontResolver.addFont(paths, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
renderer.layout();
os = new FileOutputStream(pdfUrl);
renderer.createPDF(os);
os.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os != null)
os.close();
}
// 添加水印
// addWater(pdfUrl2, pdfUrl, path);
return "success";
}
/**
* 搜索pdf存在,存在返回,不存在则创建
*/
public static String pdf(String url, String borrowId) {
// 用url截取文件名
String pdfName = "No." + borrowId + "_pact.pdf";
String rootpath = ServletActionContext.getServletContext().getRealPath("/");
String pdfUrl = "upload/pdf/" + pdfName;
// File file = new File(rootpath + pdfUrl);
// if (file.exists()) { // 存在则返回pdfUrl
// return pdfUrl;
// }
// 不存在则创建
String ret = null;
try {
ret = create(url, rootpath + pdfUrl, pdfName, rootpath);
} catch (Exception e) {
e.printStackTrace();
}
if ("success".equals(ret)) {
return pdfUrl;
}
return "";
}
public static void main(String[] args) throws Exception {
// String url = "http://127.0.0.1/agreementDetail.do?borrowId=2";
// pdf(url);
// String url = new File(inputFile).toURI().toURL().toString();
// String outputFile = "firstdoc.pdf";
// OutputStream os = new FileOutputStream(outputFile);
// ITextRenderer renderer = new ITextRenderer();
// renderer.setDocument(url);
// // 解决中文支持问题
// ITextFontResolver fontResolver = renderer.getFontResolver();
// fontResolver.addFont("C:/Windows/Fonts/SIMSUN.TTC",
// BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
//
// // 解决图片的相对路径问题
// renderer.getSharedContext().setBaseURL(
// "file:/D:/web/Workspaces/MyEclipse 8.5/WebToPDF/WebRoot/");
//
// renderer.layout();
// renderer.createPDF(os);
//
// os.close();
// addWater("file:/D:/web/Workspaces/MyEclipse 8.5/WebToPDF/firstdoc.pdf",
// "d:/uploadtmp/demo-URL-123.pdf");
}
}