itext java代码生成PDF文档
使用java代码生成打印
itext5首先生成PDF文件有两种方式,1:利用Adobe Acrobat 8 Professional专业版来制作PDF模板 2:就是用PdfWriter去生成。
最近项目上需要做打印功能,本以为之前写的方式一可以复用,但模板中表格稍微复杂,多个表格循环打印,而且表格分布不均 ,不适用与模板打印。下面是方式二生成打印PDF文档(后续有时间,更一篇使用方式一做打印) 。
一般的图表pdf文档是可以满足的;
文件效果图:
代码:
/**** @(#) PdfText.java* @Package com.eport.web* * Copyright © Singlewindow Corporation. All rights reserved.**/package com.sw.busi.exbweb.util.printPdf;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;/*** * Description : * Author: linyi * Create Date: 2018年7月24日 下午2:30:57**/
public class printPdfTest {public static void main(String[] args) throws Exception {//创建文本 Document document = new Document(PageSize.A4, 70, 70, 20, 100);//上下左右页边距try { int i=(int) (Math.random()*100);//写入文本到文件中 文件生成地址:C盘PdfWriter.getInstance(document, new FileOutputStream("C:\\cancelBillPrintPDF"+i+".pdf"));//打开文本 document.open();BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);BaseFont baseFontHei = BaseFont.createFont("C:/Windows/Fonts/simhei.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);//标题Paragraph paragraph = new Paragraph(40);//边距//1 2 3 中右左paragraph.setAlignment(1); //对齐方式Font font = new Font(baseFontHei);//字体font.setSize(14);//字体大小paragraph.setFont(font);//设置段落字体Chunk chunk = new Chunk("展览品核销清单"); paragraph.add(chunk); document.add(paragraph);Paragraph paragraph1 = new Paragraph(10);//1 2 3 中右左paragraph1.setAlignment(2); //对齐方式Font font1 = new Font(baseFontHei);//字体font1.setSize(10);paragraph1.setFont(font1);Chunk chunk1 = new Chunk("仅对核供用"); paragraph1.add(chunk1); paragraph1.setSpacingBefore(-15);//paragraph1.setSpacingAfter(-50);//往下距离200document.add(paragraph1);Paragraph paragraph2 = new Paragraph(50);//1 2 3 中右左paragraph2.setAlignment(3); //对齐方式Font font2 = new Font(baseFontHei);//字体font2.setSize(10);paragraph2.setFont(font1);Chunk chunk2 = new Chunk("展览品核销清单预录入号:"+"展览品核销清单编号:"); paragraph2.add(chunk2); paragraph2.setSpacingAfter(5);document.add(paragraph2);//画表头第一行PdfPTable table = new PdfPTable(6);table.setTotalWidth(500);float[] columnWidth={80,160,80,100,50,30};table.setTotalWidth(columnWidth);table.setLockedWidth(true);//宽度算正确//标题与表格中间的距离Paragraph p = new Paragraph(50);Font f = new Font(baseFont);//字体f.setSize(18);//字体大小p.setFont(f);//设置段落字体Chunk c = new Chunk(" "); p.add(c); document.add(p);//cell=new PdfPCell();table.addCell(drawPdfPCell("展览会名称",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("展览会编号",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("核销方式",baseFontHei,10,1,80)); table.addCell(drawPdfPCell("",baseFontHei,10,1,80)); document.add(table);//画表头第二行table = new PdfPTable(6);table.setTotalWidth(500);float[] columnWidth1={80,60,100,180,50,30};table.setTotalWidth(columnWidth1);table.setLockedWidth(true);//宽度算正确table.addCell(drawPdfPCell("申报日期",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("申报单位代码/名称",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("进出口日期",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));document.add(table);//画表头第三行table = new PdfPTable(10);table.setTotalWidth(500);float[] columnWidth2={80,80,50,50,30,50,30,50,50,30};table.setTotalWidth(columnWidth2);table.setLockedWidth(true);//宽度算正确table.setLoopCheck(true);table.addCell(drawPdfPCell("运输方式",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("提运单号",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("件数",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("毛重",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("净重",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));document.add(table);//画表头第四行table = new PdfPTable(4);table.setTotalWidth(500);float[] columnWidth3={80,100,50,270};table.setTotalWidth(columnWidth3);table.setLockedWidth(true);//宽度算正确PdfPCell cell2 = new PdfPCell();cell2.setFixedHeight(60);cell2.setBorderWidthTop(200);cell2.setBorderWidthLeft(100);cell2= drawPdfPCell("随附单据",baseFontHei,5,1,80);//表格第一个标题table.addCell(drawPdfPCell("随附单据",baseFontHei,5,1,80));table.addCell(drawPdfPCell("",baseFontHei,5,1,80));table.addCell(drawPdfPCell("备注",baseFontHei,5,1,80));table.addCell(drawPdfPCell("",baseFontHei,5,1,80));document.add(table);//画表体部分for(int m=0;m<5;m++){table = new PdfPTable(4);table.setTotalWidth(500);float[] columnWidth4={100,150,100,150};table.setTotalWidth(columnWidth4);table.setLockedWidth(true);//宽度算正确table.addCell(drawPdfPCell("展商名称",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("展商国别",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));document.add(table);table = new PdfPTable(11);table.setTotalWidth(500);float[] columnWidth5={30,64,64,64,30,30,30,30,30,64,64};table.setTotalWidth(columnWidth5);table.setLockedWidth(true);//宽度算正确table.addCell(drawPdfPCell("序号",baseFontHei,10,1,80));table.addCell(drawPdfPCell("商品编码",baseFontHei,10,1,80));table.addCell(drawPdfPCell("商品名称",baseFontHei,10,1,80));table.addCell(drawPdfPCell("规格型号",baseFontHei,10,1,80));table.addCell(drawPdfPCell("数量",baseFontHei,10,1,80));table.addCell(drawPdfPCell("单位",baseFontHei,10,1,80));table.addCell(drawPdfPCell("单价",baseFontHei,10,1,80));table.addCell(drawPdfPCell("总价",baseFontHei,10,1,80));table.addCell(drawPdfPCell("币制",baseFontHei,10,1,80));table.addCell(drawPdfPCell("原产国",baseFontHei,10,1,80));table.addCell(drawPdfPCell("证件代码",baseFontHei,10,1,80));document.add(table);for(int n=0;n<3;n++){table = new PdfPTable(11);table.setTotalWidth(500);float[] columnWidth6={30,64,64,64,30,30,30,30,30,64,64};table.setTotalWidth(columnWidth6);table.setLockedWidth(true);//宽度算正确table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));table.addCell(drawPdfPCell("",baseFontHei,10,1,80));document.add(table);}}//关闭文本 document.close(); } catch (DocumentException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } }/*** * Method description : 画一行中的一列(格子)* Author: linyi * Create Date: 2018年7月24日 下午2:17:07* History: 2018年7月24日 下午2:17:07 linyi Created.* @param cellText 格子的文字* @param baseFont 字体类型* @param size 字体大小* @param alignment 对齐方式* @return* @throws Exception**/private static PdfPCell drawPdfPCell(String cellText,BaseFont baseFont,float size,int alignment,int minimumHeight ) throws Exception{//为null会报错 防止报错if(cellText==null){cellText=" ";}//表格开始Paragraph paragraph = new Paragraph();paragraph.setAlignment(alignment); //对齐方式Font font = new Font(baseFont);//字体font.setSize(size);//字体大小paragraph.setFont(font);//设置段落字体Chunk chunk = new Chunk(cellText); paragraph.add(chunk); PdfPCell cell = new PdfPCell();cell.setUseAscender(true);cell.setVerticalAlignment(cell.ALIGN_MIDDLE);//设置cell垂直居中cell.setMinimumHeight(minimumHeight);//设置单元格最小高度,当前行最小高度cell.addElement(paragraph);return cell;}}
遇到的坑:
1:会报找不到字体的错误,这里的解决方式就是通过使用自己的字体就好,simsun.ttc是Windows下面自带的字体(简体宋体:C:\Windows\Fonts下面有很多字体可以使用),在应用项目时
private static final String FONT = "static/fonts/SIMSUN.TTC,1";//仿宋体字库位置//拿到字体String FONT_PATH="";String path = this.getClass().getResource("/").getPath();// 得到d:/tomcat/webapps/工程名WEB-INF/classes/路径if(path.indexOf("WEB-INF/classes")!=-1){path = path.substring(1, path.indexOf("WEB-INF/classes"));// 从路径字符串中取出工程路劲FONT_PATH = path + FONT+"";}else{//单元测试文件path = path.substring(1,path.length());// 从路径字符串中取出工程路劲FONT_PATH=path+"file/simfang.ttf";}
2:在迁移至项目时,本地是没有问题,发布至开发环境,测试环境会报错,还是字体找不到
原因:开发环境处于Linux,加上判断即可:
if (SEnv.WINDOWS) {Logger.info(this, "====static字库地址WINDOWS,FONT_PATH=======:"+FONT_PATH);} else if (SEnv.LINUX || SEnv.SUN_OS) {FONT_PATH = "/" + FONT_PATH;//FONTHEI_PATH= "/" + FONTHEI_PATH;Logger.info(this, "====static字库地址LINUX,SUN_OS,FONT_PATH=======:"+FONT_PATH);}
itext java代码生成PDF文档相关推荐
- 使用IText组件在PDF文档上绘制椭圆形印章的算法分析及代码分享
1. 引言 PDF是一种和操作系统及平台无关的.可移植的电子文件格式,其以PostScript语言图像模型为基础,无论在哪种打印机上,都可保证精确的颜色和准确的打印效果.PDF将真实地再现原稿的每一个 ...
- java生成pdf方法_详解Java生成PDF文档方法|chu
最近项目需要实现PDF下载的功能,由于没有这方面的经验,从网上花了很长时间才找到相关的资料.整理之后,发现有如下几个框架可以实现这个功能. 1. 开源框架支持iText,生成PDF文档,还支持将XML ...
- IText实现对PDF文档属性的基本设置
一.Itext简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文 ...
- 【教程】如何使用Java生成PDF文档?
在如今数字化时代,越来越多的人使用PDF文档进行信息传递和共享.而使用Java生成PDF文档也成为了一个非常重要的技能,因为Java作为一种通用的编程语言,可以在不同的操作系统和平台上运行.下面,我们 ...
- Java在PDF文档中添加或删除页面
前言 当你编辑一个PDF文档时,有时需要删除文档中多余的页面或向文档中添加新的页面.本文将向您演示如何使用Spire.PDF for Java在PDF文档中添加或删除页面. 程序环境 安装Spire. ...
- java jar 打印_三种Java打印PDF文档的实例代码
以下内容归纳了通过Java程序打印PDF文档时的3种情形.即: 1 静默打印 2 显示打印对话框打印 3 打印PDF时自定义纸张大小 使用工具:Spire.PDF for Java Jar文件获取及导 ...
- Java 处理PDF文档(一):页眉页脚、水印、背景、附件
前言 本文将介绍通过Java编程来处理PDF文档的一些方法,因为一篇文档的处理可能包括很多内容,比如文档安全性设置(水印.加密/解密).文本/图片/图形操作.注释.附件.域.文档转换(其他文件格式转为 ...
- Java生成PDF文档(表格)
Java生成PDF文档(表格) package org.jeecg.modules.esi.utils;import com.itextpdf.text.*; import com.itextpdf. ...
- Java生成PDF文档 iText使用PDF模板一
最近在弄这个java生成pdf,哎,在网上查找了各种各样的学习资料,弄了几天,今天终于把这个效果简单的弄出来,所以,也把这个,我所走过的坑,作一个记录,提供接下来需要学习的人. 参考文献文档:http ...
- Java 给PDF文档设置背景颜色和背景图片
如题,这篇文章主要介绍如何在Java应用程序中给PDF文档设置背景颜色和背景图片. 使用组件: Spire.PDF for Java 下载Spire.PDF for JAVA包并解压缩,然后从lib文 ...
最新文章
- What is Listing in SAP Retail?
- asp.net 中显示各类文件
- [原创]什么是CMM?
- python api 示例_Python简单接口测试实例
- python string模块template_Python标准库笔记(1) — string模块
- Linux命令之diff
- Response.Write 用法总结
- JAVA并发之多线程基础(4)
- 第41课 WEB代理、Haproxy 配置详解及Haproxy ACL使用
- MySQL日志(一条sql更新语句是如何执行的)
- angular源码分析 摘抄 王大鹏 博客 directive指令及系列
- Cesium地图不加载或者加载有问题怎么办
- Windows与网络基础-27-子网掩码
- 2016年5月热门IT职位的推荐
- 虚幻C++入门个人笔记(2)——标记宏、结构体枚举、资源加载、代理
- 计算机启动慢,win7开机速度慢怎么办_win7开机启动慢怎么解决-win7之家
- c语言程序设计高速公路超速处罚,高速超速违章处理流程
- 3dMax 入门(高脚杯)
- AIX 挂载NFS错误nfsmnthelp: 1831-019之解决
- 微电网数字孪生 | 智能时代,部署源网荷储一体化管控平台