java 导出订单明细_订单导出pdf文件
原理
原始数据->加载模板->临时文件->PDF文件
方案准备
html模板转pdf 难点:1. 每次变化都要找设计师;2. html样式很难控制(个人不擅长);3.html转pdf样式难以控制
word模板转pdf 难点:1. 合适插件的选择;2. 中文的处理
最终选择,word模板模式
实现步骤
WORD插件 开源地址
composer require phpoffice/phpword
phpword非常好用,支持变量,太方便了。
WORD转PDF插件 下载地址
/opt/libreoffice6.4/program/soffice
完整demo
//生成订单pdf
public function order_pdf_f()
{
#1. 准备订单信息
$person_addr = "北京市";
$person_name = "张三";
$person_mobile= "18932000000";
#2. 生成素材文件
$res_dir_path = './res/';
$templateFile = $res_dir_path.'temp_order.docx';
$wordPath = $res_dir_path.'tmp/hello.docx';//计算机上的一个文件
try {
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor($templateFile);
$templateProcessor->setValue('person_name', $person_name);
$templateProcessor->setValue('person_addr', $person_addr);
$templateProcessor->setValue('person_mobile', $person_mobile);
$templateProcessor->saveAs($wordPath);
} catch (Exception $e) {
echo $e->getMessage();
return;
}
#3. 生成pdf并下载
try {
$pdfPath = $res_dir_path.'tmp';
$set_charset = 'export LANG=zh_CN.UTF-8;';#linux
$cmd = $set_charset."\n"."/opt/libreoffice6.4/program/soffice --headless --convert-to pdf:writer_pdf_Export {$wordPath} --outdir {$pdfPath}";
$status = 1;
$log = null;
$log = shell_exec($cmd);
if(is_null($log)) {
#echo "start exec";
exec($cmd.' 2>&1', $log, $status);
}
sleep(1);
#4. 页面跳转到下载
$file =$pdfPath."/hello.pdf";//计算机上的一个文件
$fileName = basename($file);//获取文件名
header("Content-Type:application/octet-stream"); //告诉浏览器文档类型(mime类型); octet-stream指的是二进制文件类型;下载任何类型的文件都可以这么指定
header("Content-Disposition:attachment;filename=".$fileName); //告诉浏览器以附件方式对待文件(即下载文件);并设置下载后的文件名
header("Accept-ranges:bytes"); //告诉浏览器文件大小的单位
header("Accept-Length:".filesize($file)); //告诉浏览器文件的大小
$h = fopen($file, 'r'); //打开文件
echo fread($h, filesize($file));
} catch (Exception $e) {
echo $e->getMessage();
return;
}
}
注意
导出时,老是出现乱码,一开始比较抓狂。不知道哪里出了问题。后来冷静分析了一下。
数据->word模板->word文件,只要生成的word文件,没有乱码就成功一半了 系统环境变量修改
#1. 修改语言环境变量
vi /etc/locale.conf
LANG=zh_CN.UTF-8
插件底层源码修改
/www/wwwroot/项目名/vendor/phpoffice/phpword/src/PhpWord/TemplateProcessor.php
第256行
/**
* @param string $subject
*
* @return string
*/
protected static function ensureUtf8Encoded($subject)
{
if (!Text::isUTF8($subject)) {
#$subject = utf8_encode($subject);
$subject = iconv("GB2312","UTF-8//IGNORE",$subject);
}
return $subject;
}
#1. 在CentOS 4.x开始用fontconfig来安装字体库
yum -y install fontconfig
#2. 创建中文字体路径
mkdir -p /usr/shared/fonts/chinese
#3. ftp上传字体到 /usr/shared/fonts/chinese
c盘下的Windows/Fonts目录
#4. 修改字体权限
chmod -R 755 /usr/share/fonts/chinese
#5. 安装ttmkfdir来搜索目录中所有的字体信息
yum -y install ttmkfdir
#6. 执行ttmkfdir命令
ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir
#7. 引入中文
vi /etc/fonts/fonts.conf
...
#新加这行
...
#8. 刷新内存中的字体缓存
fc-cache
#9. 检查是否生效
fc-list
java 导出订单明细_订单导出pdf文件相关推荐
- java 使用itextpdf工具实现HTML转PDF文件
java 使用itextpdf工具实现HTML转PDF文件 本文转载https://my.oschina.net/960823/blog/1588166内容 demo maven依赖包 <dep ...
- Java 使用iText7生成带页码的PDF文件(同时生成目录,但是不会合并两个PDF)
一.效果图 1.带页码效果 2.目录效果 前言:Java 使用iText7生成带页码的PDF文件,同时生成目录PDF,但限于水平,暂时还在摸索合并两个PDF.不过看了一下,iText好像有生成目录的代 ...
- java实现通过url实现浏览器下载pdf文件
java实现通过url实现浏览器下载pdf文件 // 下载pdf文件工具类 public static void toDownload(HttpServletRequest request, Http ...
- Java实现多张图片合并成一份PDF文件
Java实现多张图片合并成一份PDF文件,一行两列展示 引入依赖包 <dependency><groupId>com.lowagie</groupId><ar ...
- 网页导出pdf不完整_怎样将PDF文件中的图片提取出来并保存?
日常工作或学习中经常会接触很多PDF文档,有时其中有些图片是我们需要用到的,应该如何将这些图片从PDF文件中提取出来并且保存呢? 我们可以用PDF编辑器来实现这个需求,首先用极速PDF编辑器打开我们需 ...
- 在linux系统下java实现pdf导出汉字无法显示_ubuntu/Linux PDF文件中文无法显示或中文为方块的解决方法...
ubuntu1004,pdf文件有的无法显示中文,解决办法如下: 1. 先安装字体 A.sudo apt-get install xpdf-chinese-simplified; B. sudo ap ...
- java pdf添加透明水印_如何在PDF文件中添加透明水印
原标题:如何在PDF文件中添加透明水印 有些文件添加水印,但是又不想水印影响文件的使用有时候会设置透明水印,那么PDF怎么设置透明水印呢,应该有很多的小伙伴们都很好奇应该怎么做吧,接下来就为大家分享一 ...
- java 获取pdf总页数_如何获取PDF文件的总页数 - iTextSharp,c#
我需要帮助.我花了最后4个小时试图获得我的PDF文件的总页数.我希望在页脚中有"Page X/Y"之类的内容.有人可以告诉我该怎么做这个代码?如何获取PDF文件的总页数 - iTe ...
- JAVA删除pdf空白页_如何编辑PDF文件,如何删除PDF文档中的空白页
时代在发展,科技在进步,我们现在日常使用的文件也发展了,以前只有Word跟TXT,现在还增加了一个PDF格式的文件,但PDF格式的文件跟Word和TXT文件不一样,Word跟TXT文件可以直接的打开编 ...
最新文章
- Java日常开发的21个坑,你踩过几个?
- systemd设置静态IP
- 三年从前端小工到架构-知乎 Live 学习整理
- css中光标的设置,CSS Cursors(光标)
- 对一次短路故障的分析与总结
- java event 异步_[转]java异步编程
- 歪枣网Mysql优化总结
- Apache Kylin 部署之不完全指南
- SimpleGIS在线地图插件
- Linux系统控制文件 /etc/sysctl.conf详解
- linux非对称内存,CryptoAPI与OpenSSL RSA非对称加密解密(PKCS1 PADDING)交互
- 使用CSS和javascript制作拼图验证码
- linux下ace安装教程,linux下安装ACE开发环境
- JAVA实验七 图形用户界面的设计与实现
- Unix/Linux编程:多协议服务器(TCP/UDP)-----DAYTIME
- React native大版本迭代信息记录
- Java输出PPT文件(二) - 占位符数据替换
- 【图文教程】文件压缩和打包
- 怎么写功能测试报告,分享专业的功能报告模板
- 医学图像分割新网络:Boundary-aware Context Neural Network for Medical Image Segmentation
热门文章
- 网络训练生成飞行轨迹
- 武汉大学617计算机综合知识,2019年武汉大学硕士研究生入学考试真题(汇总)...
- 磊哥测评之数据库SaaS篇:腾讯云控制台、DMC和小程序
- MAC从系统偏好启动mysql无效处理方法
- 【乐理学习笔记】五度循环圈
- TUM数据集官方说明相应的评估文件evaluate_rpe.py和evaluate_ate.py的使用
- mysql pacemaker_corosync+pacemaker+drbd+mysql实现高可用
- Brother打印机的安装
- 零基础入门转录组分析——第五章(表达定量)
- 【最火的ios开发技术】常用工具和ios常用开源框架库