基于itext7导出pdf实现,支持水印、中文等

完整源码:http://download.csdn.net/detail/liuwenfeng554/9590212

itext7导出pdf:



public class ExportReportPdfUtil {

	static PdfFont helvetica = null;
    static PdfFont helveticaBold = null;
    static DecimalFormat df = new DecimalFormat("#0.00");
 
    /**
     * @Title: exportPdf
     * @Description: 生成pdf,提示下载
     * @param fileName 标婷
     * @param spreadhead
     * @param subhead
     * @param tables
     * @param response
     */
	public static void exportPdf(String fileName,String spreadhead, String subhead, List<PDFTable> tables, HttpServletResponse response){
		try{
			// 设置response参数,可以打开下载页面
			response.reset();
	        response.setContentType("application/pdf;charset=utf-8");  
	        response.addHeader("Content-Disposition","attachment;filename="+ new String( fileName.getBytes("gb2312"), "ISO8859-1"));
	        //处理中文问题
	        helvetica = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
	        helveticaBold = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H", false);
			PdfWriter writer = new PdfWriter(response.getOutputStream());
	        //Initialize PDF document
	        PdfDocument pdf = new PdfDocument(writer);
	        pdf.addEventHandler(PdfDocumentEvent.END_PAGE, new ReportEventHandler());
	        // Initialize document
	        Document document = new Document(pdf);
	        //加载报告内容
	        loadReport(spreadhead, subhead, tables, document);
	        document.close();
	        writer.close();
	        pdf.close();
		}catch(Exception e){
	        e.printStackTrace();
	    }
	 
    }
	
	public static void loadReport(String spreadhead, String subhead, List<PDFTable> tables, Document document){
		//大标题
		Paragraph p = new Paragraph(spreadhead).setTextAlignment(TextAlignment.CENTER).setFont(helveticaBold).setFontSize(14);
        document.add(p);
        //副标题
        document.add(new Paragraph(subhead).setFont(helvetica).setFontSize(8));
        //初始化详情内容
        for (PDFTable pdfTable : tables) {
        	loadTitle(pdfTable.getTitle() , document);
            Table table = new Table(pdfTable.getNumColumns());
            table.setWidthPercent(pdfTable.getWidthPercent());
            List<PDFColumn> columns = pdfTable.getColumns();
            for (PDFColumn pdfColumn : columns) {
            	if(pdfColumn.isBold){
            		process(table, pdfColumn.getText() , helveticaBold, pdfColumn.isHeader());
            	}else{
            		process(table, pdfColumn.getText() , helvetica, pdfColumn.isHeader());
            	}
			}
            document.add(table);
		}
        
	}
	
	/***
	 * @Title: title
	 * @Description: 添加标题
	 * @param text
	 * @param document
	 */
	public static void loadTitle(String text, Document document){
		 document.add(new Paragraph(text).setFont(helvetica).setBold().setFontSize(12));
	}
 
	/**
	 * @Title: process
	 * @Description: 处理table
	 * @param table
	 * @param text
	 * @param font
	 * @param isHeader
	 */
    public static void process(Table table, String text, PdfFont font, boolean isHeader) {
    	if (isHeader) {
            table.addHeaderCell(new Cell().add(new Paragraph(text).setFont(font)).setFontSize(9).setBorder(new SolidBorder(Color.BLACK, 0.5f)).setBold());
        } else {
            table.addCell(new Cell().add(new Paragraph(text).setFont(font)).setFontSize(9).setBorder(new SolidBorder(Color.BLACK, 0.5f)));
        }
    }
}



iTextPDF是一个流行的用于Java的PDF库,如果你想在使用它生成PDF文件时添加水印,可以按照以下步骤操作: 1. **引入依赖**: 首先,确保你已经添加了iTextPDF的依赖到你的项目中。如果你使用Maven,可以在pom.xml中添加: ```xml <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>最新版本号</version> </dependency> ``` 请替换`最新版本号`为实际的iTextPDF库版本。 2. **创建PDF文档**: 创建PdfStamper对象,这是iText中处理PDF水印的主要工具。首先打开一个已存在的PDF作为基础文档: ```java Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream("output.pdf")); document.open(); ``` 3. **创建水印**: 使用iText中的Image类从一个图片资源或者字符串创建一个透明图像,这将作为水印的基础: ```java BufferedImage watermarkImage = ImageIO.read(new File("watermark.png")); // 或者使用String asImageSource float alpha = 0.5f; // 设置透明度 Image transparentWatermark = new Image(watermarkImage, 0, 0, alpha); ``` 4. **应用水印**: 在需要添加水印的位置,使用PdfStamper的addAnnotation()方法创建一个StampPosition,并将其应用于文档页上: ```java PdfImportedPage page = writer.getImportedPage(document, i); // i是页面索引 PdfStamper stamper = new PdfStamper(writer, page); Annotation stamp = new StampStamp(stamper.getUnderContent(i)); stamp.setRect(0, 0, watermarkImage.getWidth(), watermarkImage.getHeight()); stamper.addAnnotation(stamp, i); ``` 5. **关闭资源**: 在所有操作完成后,记得关闭文档和stamper: ```java stamper.close(); document.close(); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值