使用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文档相关推荐

  1. 使用IText组件在PDF文档上绘制椭圆形印章的算法分析及代码分享

    1. 引言 PDF是一种和操作系统及平台无关的.可移植的电子文件格式,其以PostScript语言图像模型为基础,无论在哪种打印机上,都可保证精确的颜色和准确的打印效果.PDF将真实地再现原稿的每一个 ...

  2. java生成pdf方法_详解Java生成PDF文档方法|chu

    最近项目需要实现PDF下载的功能,由于没有这方面的经验,从网上花了很长时间才找到相关的资料.整理之后,发现有如下几个框架可以实现这个功能. 1. 开源框架支持iText,生成PDF文档,还支持将XML ...

  3. IText实现对PDF文档属性的基本设置

    一.Itext简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文 ...

  4. 【教程】如何使用Java生成PDF文档?

    在如今数字化时代,越来越多的人使用PDF文档进行信息传递和共享.而使用Java生成PDF文档也成为了一个非常重要的技能,因为Java作为一种通用的编程语言,可以在不同的操作系统和平台上运行.下面,我们 ...

  5. Java在PDF文档中添加或删除页面

    前言 当你编辑一个PDF文档时,有时需要删除文档中多余的页面或向文档中添加新的页面.本文将向您演示如何使用Spire.PDF for Java在PDF文档中添加或删除页面. 程序环境 安装Spire. ...

  6. java jar 打印_三种Java打印PDF文档的实例代码

    以下内容归纳了通过Java程序打印PDF文档时的3种情形.即: 1 静默打印 2 显示打印对话框打印 3 打印PDF时自定义纸张大小 使用工具:Spire.PDF for Java Jar文件获取及导 ...

  7. Java 处理PDF文档(一):页眉页脚、水印、背景、附件

    前言 本文将介绍通过Java编程来处理PDF文档的一些方法,因为一篇文档的处理可能包括很多内容,比如文档安全性设置(水印.加密/解密).文本/图片/图形操作.注释.附件.域.文档转换(其他文件格式转为 ...

  8. Java生成PDF文档(表格)

    Java生成PDF文档(表格) package org.jeecg.modules.esi.utils;import com.itextpdf.text.*; import com.itextpdf. ...

  9. Java生成PDF文档 iText使用PDF模板一

    最近在弄这个java生成pdf,哎,在网上查找了各种各样的学习资料,弄了几天,今天终于把这个效果简单的弄出来,所以,也把这个,我所走过的坑,作一个记录,提供接下来需要学习的人. 参考文献文档:http ...

  10. Java 给PDF文档设置背景颜色和背景图片

    如题,这篇文章主要介绍如何在Java应用程序中给PDF文档设置背景颜色和背景图片. 使用组件: Spire.PDF for Java 下载Spire.PDF for JAVA包并解压缩,然后从lib文 ...

最新文章

  1. What is Listing in SAP Retail?
  2. asp.net 中显示各类文件
  3. [原创]什么是CMM?
  4. python api 示例_Python简单接口测试实例
  5. python string模块template_Python标准库笔记(1) — string模块
  6. Linux命令之diff
  7. Response.Write 用法总结
  8. JAVA并发之多线程基础(4)
  9. 第41课 WEB代理、Haproxy 配置详解及Haproxy ACL使用
  10. MySQL日志(一条sql更新语句是如何执行的)
  11. angular源码分析 摘抄 王大鹏 博客 directive指令及系列
  12. Cesium地图不加载或者加载有问题怎么办
  13. Windows与网络基础-27-子网掩码
  14. 2016年5月热门IT职位的推荐
  15. 虚幻C++入门个人笔记(2)——标记宏、结构体枚举、资源加载、代理
  16. 计算机启动慢,win7开机速度慢怎么办_win7开机启动慢怎么解决-win7之家
  17. c语言程序设计高速公路超速处罚,高速超速违章处理流程
  18. 3dMax 入门(高脚杯)
  19. AIX 挂载NFS错误nfsmnthelp: 1831-019之解决
  20. 微电网数字孪生 | 智能时代,部署源网荷储一体化管控平台

热门文章

  1. 华为云计算工程师_华为云计算工程师认证考试
  2. Axure RP8.0仿制知乎页面(更新1-菜鸟级)
  3. Python3制作网易云音乐下载器!付费的你猜能下载吗!
  4. pgadmin4 如何改成中文版
  5. 魔百和盒子、中兴盒子、咪咕盒子、华为盒子、华为悦盒、烽火盒子、创维盒子、天邑盒子等运营商盒子固件合集分享
  6. ESAPI配置文件自定义路径
  7. 上位机与下位机的串口通信实践
  8. mysql数据库去重
  9. Java二叉树的完全性检验
  10. 可视化管理|省时省力加速查询,建造基于 Hightopo 智慧档案馆