在项目中遇到的需求,要求生成动态PDF表格文件,有标题 表格 注释 下面数步骤及代码,还没有完全完善,多行的合并,一直没有找到合适的方法去实现,如果有方法欢迎交流:

在eclipse 中的代码编写
分布式,后端代码的实现:
在maven 下导入依赖
导入依赖:

<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency><!--输出中文,还要引入下面itext-asian.jar包 -->
<dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version> </dependency>

一个 main方法 实现表格的生成:
package pdfTest;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;

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:xiaokeai
  • Create Date: 2019年8月8日 下午2:30:57

*/

public class printPdfTest {

@SuppressWarnings("static-access")//抑制警告
public static void main(String[] args) throws Exception {PdfUtil pdfutil=new PdfUtil();// 创建文本

// Document document = new Document(PageSize.A3, 50, 50, 50, 50);// 上下左右页边距
Document document = new Document(PageSize.A3, 70,70, 60, 60);
try {

     // 写入文本到文件中 文件生成地址:D盘 PdfWriter.getInstance(document, new FileOutputStream("D:\\测试PDF.pdf"));//打开文本document.open();//字体类型 编码方式(horizontal H水平方向 vertical V垂直方向)  是否支持pdfBaseFont baseFont = BaseFont.createFont("C:\\Windows\\Fonts\\simsun.ttc,1", BaseFont.IDENTITY_H,BaseFont.EMBEDDED);BaseFont baseFontHei = BaseFont.createFont("C:\\Windows\\Fonts\\simsun.ttc,1", BaseFont.IDENTITY_H,BaseFont.EMBEDDED);// 标题Font font = new Font(baseFontHei,Font.BOLD,1);// 段落加粗的字体格式Font font2 = new Font(baseFontHei);// 字体  fax使用的字体格式Paragraph paragraph = new Paragraph(10);// 边距// 1 2 3 中右左paragraph.setAlignment(1); // 对齐方式font.setSize(15);// 字体大小 paragraph.setFont(font);// 设置段落字体Chunk chunk = new Chunk("测试PDF");paragraph.add(chunk);document.add(paragraph);Paragraph paragraph1 = new Paragraph(20);// 1 2 3 中右左paragraph1.setAlignment(1); // 对齐方式font.setSize(10);paragraph1.setFont(font);Chunk chunk1 = new Chunk("编号:");paragraph1.add(chunk1);document.add(paragraph1);Paragraph paragraph2 = new Paragraph(20);// 1 2 3 中右左paragraph2.setAlignment(3); // 对齐方式font2.setSize(10);paragraph2.setFont(font2);Chunk chunk2 = new Chunk("FAX: ");paragraph2.add(chunk2);paragraph2.setSpacingAfter(5);//设置后面的间距。document.add(paragraph2);Paragraph paragraph3 = new Paragraph(10);// 1 2 3 中右左paragraph3.setAlignment(3); // 对齐方式font.setSize(10);paragraph3.setFont(font); Chunk chunk3= new Chunk("截止日期:"+"      年"+"  月"+"  日");paragraph3.add(chunk3);//paragraph3.setSpacingAfter(0);document.add(paragraph3);Paragraph paragraph4 = new Paragraph(10);// 1 2 3 中右左paragraph4.setAlignment(2); // 对齐方式 font.setSize(10);paragraph4.setFont(font);Chunk chunk4= new Chunk("单元: "+"  元");paragraph4.add(chunk4);paragraph4.setSpacingBefore(-12);//设置前面距离paragraph4.setSpacingAfter(4);//设置后面的间距。document.add(paragraph4);// 标题与表格中间的距离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);PdfPTable table = new PdfPTable(11);//列//总: 800table.setTotalWidth(800);//表格的宽度//20  20 112 82 74 68 76  77 66 79 47 float[] columnWidth5 = { 30, 30, 120, 60, 60, 60, 90, 70, 80, 50, 50 };//宽度table.setTotalWidth(columnWidth5);//列宽table.setLockedWidth(true);// 宽度算正确table.addCell(PdfUtil.drawPdfPCellHei("名称", baseFontHei, 10, 1, 80));table.addCell(pdfutil.drawPdfPCellHei("序号", baseFontHei, 10, 1, 80));table.addCell(pdfutil.drawPdfPCellHei("合同名称", baseFontHei, 10, 1, 80));table.addCell(pdfutil.drawPdfPCellHei("合同编号", baseFontHei, 10, 1, 80));table.addCell(pdfutil.drawPdfPCellHei("合同金额", baseFontHei, 10, 1, 80));table.addCell(pdfutil.drawPdfPCellHei("订单编号", baseFontHei, 10, 1, 80));table.addCell(pdfutil.drawPdfPCellHei("订单金额", baseFontHei, 10, 1, 80));table.addCell(pdfutil.drawPdfPCellHei("已开票金额", baseFontHei, 10, 1, 80));table.addCell(pdfutil.drawPdfPCellHei("已支付金额", baseFontHei, 10, 1, 80));table.addCell(pdfutil.drawPdfPCellHei("已收账款金额", baseFontHei, 10, 1, 80));table.addCell(pdfutil.drawPdfPCellHei("核对结果(相符打√,不相符填写核对结果)", baseFontHei, 10, 1, 80));document.add(table);//第二列跨列跨行:PdfPCell cell99 = new PdfPCell();//mergeColAndRowcell99 = PdfUtil.mergeColAndRow("",font,1,100000000);table = new PdfPTable(11);table.setTotalWidth(800);//30, 30, 120, 60, 60, 60, 90, 70, 80, 50, 50 float[] columnWidth6 = { 30,30, 120, 60, 60, 60, 90, 70, 80, 50, 50 };table.setTotalWidth(columnWidth6);table.setLockedWidth(true);// 宽度算正确table.addCell(cell99);for (int n = 0; n < 3; n++) {int number=n+1;String num=Integer.toString(number);//table.addCell(pdfutil.drawPdfPCell("", baseFontHei, 10, 1, 45));table.addCell(pdfutil.drawPdfPCell(num, baseFontHei, 10, 1, 45));table.addCell(pdfutil.drawPdfPCell("", baseFontHei, 10, 1, 45));table.addCell(pdfutil.drawPdfPCell("", baseFontHei, 10, 1, 45));table.addCell(pdfutil.drawPdfPCell("", baseFontHei, 10, 1, 45));table.addCell(pdfutil.drawPdfPCell("", baseFontHei, 10, 1, 45));table.addCell(pdfutil.drawPdfPCell("", baseFontHei, 10, 1, 45));table.addCell(pdfutil.drawPdfPCell("", baseFontHei, 10, 1, 45));table.addCell(pdfutil.drawPdfPCell("", baseFontHei, 10, 1, 45));table.addCell(pdfutil.drawPdfPCell("", baseFontHei, 10, 1, 45));table.addCell(pdfutil.drawPdfPCell("", baseFontHei, 10, 1, 45));}document.add(table);//第三行table = new PdfPTable(9);table.setTotalWidth(800);//30,30,120,60,60,60,90,70,80,50,50 float[] columnWidth4={0,240,60,60,90,70,80,50,50};table.setTotalWidth(columnWidth4);table.setLockedWidth(true);//宽度算正确table.addCell(pdfutil.drawPdfPCell("",baseFontHei,10,1,16));table.addCell(pdfutil.drawPdfPCellHei("合计",baseFontHei,10,1,20));table.addCell(pdfutil.drawPdfPCell("0.00",baseFontHei,10,1,20));table.addCell(pdfutil.drawPdfPCell("-",baseFontHei,10,1,20));table.addCell(pdfutil.drawPdfPCell("0.00",baseFontHei,10,1,20));table.addCell(pdfutil.drawPdfPCell("0.00",baseFontHei,10,1,20));table.addCell(pdfutil.drawPdfPCell("0.00",baseFontHei,10,1,20));table.addCell(pdfutil.drawPdfPCell("0.00",baseFontHei,10,1,20));table.addCell(pdfutil.drawPdfPCell("",baseFontHei,10,1,20));document.add(table);// 备注信息//方式一:// 段落间隔 内容名称 对齐方式Paragraph paragraph5 = PdfUtil.getParagraph(10," \n备注:1、所载信息来源于供应商企业。请贵公司将整行核对结果在附表表格“右一栏”中加以确认。" + "\n\r"+ "      2、本函仅为复核账目之用,并非催款结算。" + "\n\r"+ "      3、本函中应收账款金额为合同已开发票金额减去已支付金额。", 3, 10, 5,0, font2);document.add(paragraph5);//国网信息Paragraph paragraph6 = PdfUtil.getParagraph(40,"国网 省电力有限公司物资分公司" + "\n" + "年  月  日", 2, 10, 5,0, font2);document.add(paragraph6);/*方式二:*  Paragraph paragraph5 = new Paragraph(10);// 1 2 3 中右左paragraph5.setAlignment(3); // 对齐方式Font font5 = new Font(baseFontHei);// 字体font5.setSize(10);paragraph5.setFont(font5);Chunk chunk5= new Chunk(" \n备注:1、所载信息来源于供应商企业。请贵公司将整行核对结果在附表表格“右一栏”中加以确认。"+"\n\r"+"      2、本函仅为复核账目之用,并非催款结算。"+"\n\r"+"      3、本函中应收账款金额为合同已开发票金额减去已支付金额。");paragraph5.add(chunk5);paragraph5.setSpacingAfter(5);document.add(paragraph5);Paragraph paragraph6 = new Paragraph(40);// 1 2 3 中右左paragraph6.setAlignment(2); // 对齐方式Font font6 = new Font(baseFontHei);// 字体font6.setSize(10);paragraph6.setFont(font6);Chunk chunk6= new Chunk("国网 省电力有限公司物资分公司"+"\n"+"年  月  日");paragraph6.add(chunk6);paragraph6.setSpacingAfter(5);document.add(paragraph6);*/// 关闭文本document.close();} catch (DocumentException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();}}

}

下面是方法的工具类,没有合并 第二列 和 第三列, 第一行的方法

package pdfTest;

import com.itextpdf.text.Chunk;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
/**
*

  • pdf工具类
  • @author Administrator

*/
@SuppressWarnings(“unused”)
public class PdfUtil {

/*** @param cellText*            格子的文字* @param baseFont*            字体类型 正常* @param size*            字体大小* @param alignment*            对齐方式* @return* @throws Exception**/
@SuppressWarnings("static-access")
public 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;
}
/*** * @param cellText* @param baseFont  加粗字体* @param size* @param alignment* @param minimumHeight 高度* @return* @throws Exception*/
@SuppressWarnings("static-access")
public static PdfPCell drawPdfPCellHei(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.BOLD,1);// 字体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;
}
/*** * @param string* @param font* @param i* @param j* @return*///同时合并列和行的静态函数
public static PdfPCell mergeColAndRow(String str, Font font, int i, int j) {PdfPCell cell = new PdfPCell(new Paragraph(str, font));cell.setMinimumHeight(25);//设置最小高度cell.setHorizontalAlignment(Element.ALIGN_CENTER);//设置水平对齐方式,居中对齐cell.setVerticalAlignment(Element.ALIGN_MIDDLE);//设置垂直对齐方式,居中对齐//将该单元格所在行包括该单元格在内的i列单元格合并为一个单元格cell.setColspan(i);//合拼列cell.setRowspan(j);//跨行数return cell;
}/*** 设置段落内格式内容* @param numPadding 编辑* @param pContent 块内文本* @param alignment 对齐方式* @param size 字体大小* @param j * @param i * @param font 字体类型*/
public static Paragraph getParagraph(int numPadding,String pContent,int alignment,int size,int i, int j, Font font){Paragraph paragraph = new Paragraph(numPadding);// 边距// 1 2 3 中右左paragraph.setAlignment(alignment); // 对齐方式font.setSize(size);// 字体大小paragraph.setFont(font);// 设置段落字体Chunk chunk = new Chunk(pContent);paragraph.add(chunk);return paragraph;
}

}
如果有合适的合拼方式,欢迎交流,
目前完成的效果 标题和 表头 就不显示了

需要完成的是这样的效果

怎么样才能完这个合并的效果呢 ,求指导:可以先邮件联系: ykaifeng629@163.com

java 生成 pdf 标题 表格 注释 合并相关推荐

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

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

  2. java生成PDF(图片,模板,表格)

    刚接到了一个需求,生成一个pdf,一开始以为挺简单的,通过模板生成嘛,我也发过相应的文章,根据模板直接生成pdf,响应到前端或者根据模板生成pdf,直接指定下载位置,这两种方案都可以,不过这篇文章主要 ...

  3. java生成PDF 导出

    tip:生成pdf导出 需要的JAR包链接:https://www.hebaocun.com/asset/search/JAVA生成PDF需要的JAR包/ 原文链接:https://www.hebao ...

  4. Java生成PDF文件,java面试题,java初级笔试题

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. 一. ...

  5. Java生成PDF文件_自用

    Java生成PDF文件 一.前言 前几天,做ASN条码收货模块,需要实现打印下载收货报表,经一番查找,选定iText--用于生成PDF文档的一个Java类库.废话不多说,进入正题. 二.iText简介 ...

  6. java生成PDF的几种方法

    问题场景 总结一下用java生成PDF的方法: A.itext-PdfStamper pdfStamper(俗称抠模板) B.itext-Document document(正常代码撰写) C.wkh ...

  7. 使用java生成PDF并保存到本地服务器中

    使用java生成PDF并保存到本地服务器中 1.导入maven <!-- PDF工具包 --><dependency><groupId>com.itextpdf&l ...

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

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

  9. java实现pdf的生成下载打印,java生成pdf电子账单,java生成pdf合同模板

    最近公司要做个生成pdf电子账单凭证的功能,由于这个公司没有任何代码可借鉴,这个时候我就必须得自己搞明白具体的每一步应该怎么做,引什么jar包?用什么方式去实现?这篇博客中会给出从头到尾及其详细的代码 ...

  10. JAVA操作pdf——创建表格

    JAVA操作pdf--创建表格 一.前言 在实习的时候遇到了需要将查询到的数据构建成为PDF的情况,于是在网上查找到了相关的Java操作pdf的教程,看到大部分的文章都是使用ITextPdf操作的,于 ...

最新文章

  1. 中石油《计算机应用基础》,中石油华东《计算机应用基础》2018年秋学期在线作业(一).doc...
  2. 基础知识漫谈(1): 想到哪儿写到哪儿
  3. 截取屏幕指定区域保存为BMP文件
  4. Python 缓冲区
  5. SDK目录结构和adb工具及命令介绍
  6. Java:使用SingletonStream获得性能
  7. 解码(六):sws_scale像素格式转换代码演示
  8. 吴恩达深度学习5.3练习_Sequence Models_Neural machine translation with attention
  9. python弱类型好处_JavaScript弱类型语言的优缺点有哪些
  10. 用 Go 构建一个区块链 -- Part 1: 基本原型
  11. 系统架构师学习笔记_第六章(下)_连载
  12. 计算机组成原理:P5-存储器(下)
  13. 《广义动量定理与系统思考----战争…
  14. 小米路由器R4 TTL刷不死Bread第三方固件写入升级
  15. springboot redis: xxx as a subtype of [simple type, class java.lang.Object]: no such class found
  16. 【JAVASE】缓冲流,转换流,序列化流,打印流
  17. java applet介绍,Java中的Applet介绍
  18. 如何安装Eclipse WTP插件
  19. 基于VUE和Node.js的医院挂号预约管理系统
  20. 从南沙图书馆到故宫博物院,隐藏着怎样的未来世界?

热门文章

  1. matlab的otdr仿真,OTDR仿真分析软件
  2. Arduino无法下载,重刷Bootloader后解决问题
  3. 定时任务cron表达式
  4. 基于vivoY97的Adb驱动程序的安装
  5. synchronize偏向锁底层实现原理
  6. 《社会调查数据管理——基于Stata 14管理CGSS数据》一3.4 Stata的一些术语及使用通则...
  7. cmd /c和cmd /k 以及CMD命令
  8. 如何解决VC 应用程序无法启动,因为应用程序的并行配置不正确 sxstrace.exe问题...
  9. vue生产环境使用localhost请求端口号不是自己设置的?来试试这个
  10. 转行学IT:零基础学什么技术好?