java 编辑pdf表格_Java 生成pdf表格文档

最近在工作做一个泰国的项目,应供应商要求,需要将每天的交易生成pdf格式的报表上传到供应商的服务器,特此记录实现方法。废话不多说,直接上代码:

THSarabunNew.ttf该文件是泰国字体自行网上下载即可

import com.itextpdf.text.*;

import com.itextpdf.text.pdf.BaseFont;

import com.itextpdf.text.pdf.PdfPCell;

import com.itextpdf.text.pdf.PdfPTable;

import com.itextpdf.text.pdf.PdfWriter;

import lombok.extern.slf4j.Slf4j;

import org.springframework.stereotype.Component;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

/**

* TOT上报PDF文件生成工具

*/

@Slf4j

@Component

public class TOTReportPdfService {

private String thaiFont = "./font/THSarabunNew.ttf";

//字体格式

Font font = FontFactory.getFont(thaiFont, BaseFont.IDENTITY_H, false,-1.0F, -1);

public void generatorPdf(String outPutFilePath, String headerSuffix){

Document document = new Document(PageSize.A4.rotate(), 20, 20, 50, 20);

File outputFile = createReportFile(outPutFilePath);

try {

//设置输出位置

PdfWriter.getInstance(document, new FileOutputStream(outputFile));

//打开文档

document.open();

float[] columnWidths = {80, 200, 100,100,80,80,80,80,80,80,80,80};//表格每一列的宽度

PdfPTable table = createTable(12, columnWidths);

//表头

generatorHeader(table, headerSuffix);

document.add(table);

} catch (DocumentException e) {

e.printStackTrace();

log.error("TOTReportPdfService.generatorPdf 文件创建失败。{}", e.getMessage());

} catch (FileNotFoundException e) {

e.printStackTrace();

log.error("TOTReportPdfService.generatorPdf 找不到文件{}", e.getMessage());

} catch (IOException e) {

e.printStackTrace();

} finally {

document.close();

}

}

private File createReportFile(String outPutFilePath) {

File file = new File(outPutFilePath);

if (!file.exists()){

try {

file.createNewFile();

} catch (IOException e) {

e.printStackTrace();

}

}

return file;

}

private PdfPTable createTable(int colNum, float[] columnWidths) {

PdfPTable table = new PdfPTable(colNum);

try {

table.setWidths(columnWidths);

} catch (DocumentException e) {

e.printStackTrace();

log.error("创建pdf报表失败{}",e.cause())

}

table.setSpacingBefore(20f);//设置页边距

table.setWidthPercentage(100);//设置表格宽度为100%

return table;

}

/**

* 报表表头 12列 8行

* @param table

*/

private void generatorHeader(PdfPTable table, String headerSuffix) {

table.addCell(createPdfPCell("", 3, 1));

table.addCell(createPdfPCell("บริษัท บลูเพย์ จำกัด", 5, 1, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("", 4, 1));

table.addCell(createPdfPCell("", 3, 1));

table.addCell(createPdfPCell("การรับชำระผ่านช่องทางอิเล็กทรอนิกส์", 5, 1, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("RP0001_" + headerSuffix, 4, 1));

table.addCell(createPdfPCell("", 3, 1));

table.addCell(createPdfPCell("รายงานการรับชำระประจำวัน", 5, 1, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("", 3, 1));

table.addCell(createPdfPCell("Page 1 Of 1", 4, 1, Element.ALIGN_RIGHT));

table.addCell(createPdfPCell("Location 0BBPW", 12, 1, Element.ALIGN_LEFT));

table.addCell(createPdfPCell("ลำดับที่", 1, 3, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("เลขที่เอกสารยืนยันการทำรายการ", 1, 3, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("Account No. - Invoice No.", 2,3, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("อั\u008Dตราภาษี", 1,3, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("มูลค่าสินค้า / บริการ ที่ต้องเสียภาษี", 5, 1, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("มูลค่าสินค้า / บริการ", 1,1, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("รวมทั้งสิ้น", 1, 3, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("ภาษี 7% ", 3, 1, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("ภาษี 0% ", 1 , 2, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("รวม", 1,2, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("ยกเว้นภาษี", 1,2, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("มูลค่าสุทธิ", 1,1, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("ภาษีมูลค่าเพิ่ม", 1, 1, Element.ALIGN_CENTER));

table.addCell(createPdfPCell("รวม", 1,1, Element.ALIGN_CENTER));

}

private PdfPCell createPdfPCell(String text, int colSpan, int rowSpan) {

return createPdfPCell(text, colSpan, rowSpan, Element.ALIGN_RIGHT);

}

private PdfPCell createPdfPCell(String text, int colSpan, int rowSpan, int align) {

PdfPCell pdfPCell = new PdfPCell();

pdfPCell.setColspan(colSpan);

pdfPCell.setRowspan(rowSpan);

pdfPCell.setPhrase(createParagraph(text));

pdfPCell.setHorizontalAlignment(align);

pdfPCell.setVerticalAlignment(Element.ALIGN_MIDDLE);

return pdfPCell;

}

private Paragraph createParagraph(String text) {

Paragraph paragraph;

paragraph = new Paragraph(text, font);

paragraph.setAlignment(Phrase.ALIGN_CENTER);

return paragraph;

}

}

java生成复杂word文档

在Web应用中,有时需要按照固定的模板将数据导出到Word,如流程审批单,在流程处理完成后将处理过程按照流程单的要求导出,有时程序中需要实现生成 标准Word文档,要求能够打印,并且保持页面样式不变, ...

使用FastReport报表工具生成标签打印文档

在我们实际开发报表的时候,我们需要按一定的业务规则组织好报表的模板设计,让报表尽可能的贴近实际的需求,在之前的随笔中介绍了FastRe ...

Spring Boot 集成 Swagger 生成 RESTful API 文档

原文链接: Spring Boot 集成 Swagger 生成 RESTful API 文档 简介 Swagger 官网是这么描述它的:The Best APIs are Built with Swa ...

Swagger+Spring mvc生成Restful接口文档

简介 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为服务器以同样的速度来更新.文件的方法,参数和模型紧密集 ...

使用jsdoc-toolkit来自动生成js api文档

近来前端组小盆友开发的类库越来越多,很多情况下彼此不知道写了些什么方法,为了更好的合作提高工作效率,找了个比较好的api文档生成方法.使用jsdoc-toolkit来自动生成js api文档. 一.  ...

Java 后台创建word 文档

---恢复内容开始--- Java 后台创建 word 文档 自己总结  网上查阅的文档 分享POI 教程地址:http://www.tuicool.com/articles/emqaEf6 方式一. ...

Java解析word,获取文档中图片位置

前言(背景介绍): Apache POI是Apache基金会下一个开源的项目,用来处理office系列的文档,能够创建和解析word.excel.ppt格式的文档. 其中对word文档的处理有两个技术 ...

CEBX格式的文档如何转换为PDF格式文档、DOCX文档?

方正阿帕比CEBX格式的文档如何转换为PDF格式文档.DOCX文档? 简介: PDF.Doc.Docx格式的文档使用的非常普遍,金山WPS可以直接打开PDF和Doc.Docx文档,使用也很方便. CE ...

Android开发——使用Jword生成本地word文档

本文主要介绍如何使用Jword生成本地word文档,这里涉及到Jword的使用技巧,本文给出相应的代码,需要的朋友可以参考下. 为什么使用Jword呢?因为IText .Freemark在安卓平台上压 ...

随机推荐

Business Unit Lookup in Form

Just add the below code in lookup() of StringEdit control in Form to get the Business Unit Lookup: p ...

Codeforces Round #384 (Div. 2)D - Chloe and pleasant prizes 树形dp

D - Chloe and pleasant prizes 链接 http://codeforces.com/contest/743/problem/D 题面 Generous sponsors of ...

Drupal7模块multiselect使用

Drupal二次开发的时候,我们时常要使用到多选列表,但是官方默认的多选下拉列表,是在不敢恭维如下图所示: 不过难看不可怕,Drupal有两万第三方模块做支撑,只有你想不到,没有找不到的. 功夫不负有 ...

asp.net C# 题目大全

net001在线饰品销售系统 net002鲜花商城 net003商品销售管理系统 net004在线辅导答疑 net005土地税务管理系统 net006旅游管理 net007房产中介 net008房产信 ...

SaberRD之直流工作点分析

直流工作点分析(DC Operating Point Analysis)用于确定电路的静态工作点. 静态工作点的概念来源于三极管的电流放大特性.三极管放大电路中,当交流输入信号为零时,电路处于直流工作 ...

Python小白 哆唻a梦 用turtle绘图

点击观看视频 # -*- coding: utf-8 -*- """ Created on Sat Nov 10 22:02:32 2018 @author: 10029 ...

png 2 icon

http://www.easyicon.net/covert/ 这个网页可以转换png图片为icon格式

JavaScriptDOM操作那些事儿

查询: ①.标准DOM操作API: document.getElementById. document.getElementsByTagName. document.getElementsByName ...

QT 交叉编译工具选择

使用QT交叉编译,生成的都是x86的可执行文件.Zoro告诉我交叉工具配置错了. 参考链接: http://www.cnblogs.com/zengjfgit/p/4744507.html linux ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267017.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

同时在一个WebService服务中发布多个普通Java类

packageservice;publicclassMyService{ publicString getGreeting(String name){ return"您好 "name; } publicvoidupdate(String data){ System.out.println("<"data ">已经更新"); } } package service…

博客作业05--查找

1.学习总结 1.1查找的思维导图 1.2 查找学习体会 1、map简介 map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小&#xff0c;除了那个操作节点&#xff0c;对其他的节点都没有什么影响。 对于迭代器来说&#xff0c;可以修改实值&#xff0c;而不能修改key。2、…

python 列表 mysql in_关于mysql:内嵌要在python MySQLDB IN子句中使用的列表

我知道如何将列表映射到字符串&#xff1a;foostring ",".join( map(str, list_of_ids) )而且我知道我可以使用以下命令将该字符串放入IN子句中&#xff1a;cursor.execute("DELETE FROM foo.bar WHERE baz IN (%s)" % (foostring))我需要使用MySQLDB安全地…

EasyTimer

转载于:https://www.cnblogs.com/Microshaoft/archive/2012/06/16/2552278.html

Dubbo的优化 --- 开发时使用

开发时的三个优化&#xff1a; 1、开发者在本地开发的时候启动Dubbo比较麻烦&#xff0c;所以采用直接连接的配置&#xff1b; 2、开发者本地开发时会打断点调试&#xff0c;会超过Dubbo默认的超时时间1s&#xff0c;所以需要全局设置超时时间&#xff1b; 3、开发者本地时可能…

MYSQL复制的几种模式

MYSQL复制的几种模式 MySQL 5.1 中&#xff0c;在复制方面的改进就是引进了新的复制技术&#xff1a;基于行的复制。MYSQL复制的几种模式 MySQL 5.1 中&#xff0c;在复制方面的改进就是引进了新的复制技术&#xff1a;基于行的复制。 简言之&#xff0c;这种新技术就是关注表中…

Code:目录

ylbtech-Code&#xff1a;目录1.返回顶部 1、https://github.com/2.返回顶部1、https://gitee.com2、3.返回顶部4.返回顶部5.返回顶部 6.返回顶部作者&#xff1a;ylbtech出处&#xff1a;http://ylbtech.cnblogs.com/本文版权归作者和博客园共有&#xff0c;欢迎转载&#xff…

微软系统修复工具(试用版)

Microsoft Fix it Center 使获得支持从未有过如此简单&#xff0c;因为自动疑难解 答程序将解决您的现有问题并防患于未然。 为您的设备定制了解决方案&#xff0c;仅显示与您的硬件 和软件相关的信息。 Microsoft Fix it Center 使您能轻松控制并支持您所有的设备。 下载地址…

java 会话共享_java – servlet如何工作?实例化,会话,共享变量和多线程

假设,我有一个拥有大量servlet的Web服务器.对于在这些servlet之间传递的信息,我正在设置会话和实例变量.现在,如果有2个或更多用户向此服务器发送请求,那么会话变量会发生什么&#xff1f;它们对所有用户都是通用的,或者对于每个用户而言都是不同的.如果它们不同,那么服务器如何…

Redis主从实战

为了提升redis高可用性&#xff0c;除了备份redis dump数据之外&#xff0c;还需要创建redis主从架构&#xff0c;可以利用从将数据库持久化&#xff0c;&#xff08;我们所说的数据持久化将是将数据保存到写磁盘上&#xff0c;保证不会因为断电等因素丢失数据&#xff09; Red…

java 基础面试 英文_[Java面试] 面试java基础总结大全

原标题&#xff1a;[Java面试] 面试java基础总结大全基础知识&#xff1a;1、JVM、JRE和JDK的区别&#xff1a;JVM(Java Virtual Machine):java虚拟机&#xff0c;用于保证java的跨平台的特性。java语言是跨平台&#xff0c;jvm不是跨平台的。JRE(Java Runtime Environment):ja…

在win7环境下使用网络无线共享把电脑变成一台无线路由器

视频教程&#xff1a; http://www.tudou.com/programs/view/PuWxjgYE2Sw/?frrec1&FRLIAN&refid7d145a79fe0ff49f 其中有几点的注意是要把网络设置为WEP、这样的通用性会广泛点、安全性会差点、看实际情况吧、可以先试试用WAP2加密方式、

Ubuntu下安装SSH服务

判断是否安装ssh服务&#xff0c;可以通过如下命令进行&#xff1a;$ ssh localhost ssh: connect to host localhost port 22: Connection refused 如上所示&#xff0c;表示没有还没有安装&#xff0c;可以通过apt安装&#xff0c;命令如下&#xff1a;apt-get install opens…

php字符串怎么传到html_php字符串函数(四):html与字符串之间的转换

* 1.addslashes($str):为了数据库查询语句等的需要在某些字符前加上了反斜线:单引号,双引号,反斜线,建议使用DBMS自带的:mysqli_real_escape_string()* 2.stripslashes($str):功能与addslashes()相反,去掉字符串中的转义反斜线字符* 3.htmlspecialchars($str,FLAG):将特殊字符转…

【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

本系列文章由zhmxy555&#xff08;毛星云&#xff09;编写&#xff0c;转载请注明出处。http://blog.csdn.net/zhmxy555/article/details/7707628作者&#xff1a;毛星云 邮箱&#xff1a; happylifemxy163.com 期待着与志同道合的朋友们相互交流上一节里我们介绍了在迈入…

thinkphp省略php,ThinkPHP的截取字符串函数无法显示省略号的解决方法

对于ThinkPHP的截取字符串函数无法显示省略号的情况&#xff0c;解决方法如下&#xff1a;打开Common/extend.php页面&#xff0c;修改msubstr函数如下&#xff1a;function msubstr($str, $start0, $length, $charset"utf-8", $suffixtrue){if(function_exists(&quo…

Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数)...

Python Day 21 面向对象 (面向对象的三大特性&#xff08;二&#xff09;继承&#xff0c;多态&#xff0c;封装&#xff0c;几个装饰器函数) https://mubu.com/doc/1AqL_M0IbW 继承之钻石继承 多态 封装 几个装饰器函数 classmethod 可以通过类使用被装饰的方法staticmethod …

将Fri May 04 17:25:34 CST 2012形式的日期字符串转换成java.util.Date对象的方法

java.util.Date类的toString()方法默认生成"Fri May 04 17:25:34 CST 2012"形式的字符串&#xff0c;但从这样的字符串生成java.util.Data对象却不那么自然&#xff0c;如下述代码 Date a new Date(); SimpleDateFormat sdf new SimpleDateFormat( "…

php webservice 上传,PHP实现WebService服务

第一步&#xff0c;安装PHP扩展SOAP并开启扩展&#xff0c;是否开启成功以phpinfo为准。第二步&#xff0c;创建服务端文件server.php{public functionhello(){return "Hello World!";}public function sum($num1,$num2){return $num1$num2;}}//创建 SoapServer 对象…

微信小程序小结(3) -- 使用wxParse解析html及多数据循环

wxParse-微信小程序富文本解析组件&#xff1a;https://github.com/icindy/wxParse 支持Html及markdown转wxml可视化 使用 1、copy下载好的文件夹wxParse - wxParse/-wxParse.js(必须存在)-html2json.js(必须存在)-htmlparser.js(必须存在)-showdown.js(必须存在)-wxDiscode.js…