记一次centos合并excel,word,png,pdf为一个整体pdf的入坑爬坑过程(一直显示宋体问题)。

2024-04-13 21:28

本文主要是介绍记一次centos合并excel,word,png,pdf为一个整体pdf的入坑爬坑过程(一直显示宋体问题)。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背景

原先已经简单实现了excel,word,png,pdf合成一个整体pdf的过程。并将它弄到docker容器中。

1、原先入坑的技术栈
  • php:7.4 (业务有涉及)
  • php第三方包  setasign\Fpdi\Fpdi : 2.3.6  (pdf合并)
  • libreoffice : 5.3.6.1
  • ImageMagick: 6.9.10-68
2、原先存在的问题
  • 合成的pdf中文只有宋体
  • 合并部分pdf时,Fpdi版本过低,部分提示失败。
3、最后出坑的技术栈
  • php:7.4 (业务有涉及)
  • python: 3.6.8
  • pypdf (python的包)
  • libreoffice : 5.3.6.1
  • ImageMagick: 6.9.10-68

二、入坑关键

libreoffice 是直接通过 yum install libreoffice 安装时缺少对中文包的关注

Fpdi对中文支持不友好,手动改了其他博主说的中文支持的改进,年久之后不知道如何升级版本

在执行 libreoffice 进行生成pdf时  缺少  --language=zh-CN  这个关键参数(主要是原先不了解libreoffice 有专门的语言包)

三、出坑过程

1、去除 setasign\Fpdi\Fpdi 改用python版的 pypdf

新增了一个merge_pdf.py的脚本

import argparse
from pypdf import PdfWriter# 创建参数解析器
parser = argparse.ArgumentParser(description="Merge multiple PDF files into one.")
parser.add_argument("output_file", help="Specify the output merged PDF file name.")
parser.add_argument("input_files", nargs="+", help="Specify input PDF files to merge.")
args = parser.parse_args()# 创建 PdfWriter 对象
merger = PdfWriter()# 遍历输入的 PDF 文件进行合并
for pdf in args.input_files:merger.append(pdf)# 写入合并后的 PDF 文件
with open(args.output_file, "wb") as output_pdf:merger.write(output_pdf)print("PDF files merged successfully into", args.output_file)

使用时

python3 ./merge_pdf.py  output.pdf  input1.pdf input2.pdf input3.pdf
2、下载新版本的libreoffice

原本打算采用libreoffice24.2,但发现当前的centos不支持。只能选稳定的libreoffice7.6.6

去官网下载

Download LibreOffice | LibreOffice - Free Office Suite - Based on OpenOffice - Compatible with Microsoft

有了rpm包后把它们下到服务器上

3、安装libreoffice基础班及中文支持包

先开始基本包,进入RPMS目录,执行  rpm -Uvh *.rpm 

再开始中文包,进入RPMS目录,执行  rpm -Uvh *.rpm 

最后是帮助包,进入RPMS目录,执行  rpm -Uvh *.rpm 

因为原先我有安装libreoffice的v5版本,所以当前存在2个版本的libreoffice

对它进行备份,并重命名新的版本为默认版本

 查看版本 libreoffice --version  (当然如果你想共存2个版本就用 libreoffice7.6  --version)

执行.docx转pdf,并输出到目录out_path

 libreoffice --headless --invisible --language=zh-CN  --convert-to pdf input.docx --outdir out_path

 注意上面需要带  --language=zh-CN  因为之前就是忘记加这个才导致一直显示 宋体

4、安装字体(因为这个不是本篇的坑,所以这里稍微提一下)

一般到windows的c:\\windows\Fonts的文件中将中文字体的,打包放到centos中/usr/share/fonts/chinese中(chinese文件自己建一个)

记得清一次缓存

​​​​​​​fc-cache -fv

这篇关于记一次centos合并excel,word,png,pdf为一个整体pdf的入坑爬坑过程(一直显示宋体问题)。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/901254

相关文章

利用Python打造一个Excel记账模板

《利用Python打造一个Excel记账模板》这篇文章主要为大家详细介绍了如何使用Python打造一个超实用的Excel记账模板,可以帮助大家高效管理财务,迈向财富自由之路,感兴趣的小伙伴快跟随小编一... 目录设置预算百分比超支标红预警记账模板功能介绍基础记账预算管理可视化分析摸鱼时间理财法碎片时间利用财

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

关于MongoDB图片URL存储异常问题以及解决

《关于MongoDB图片URL存储异常问题以及解决》:本文主要介绍关于MongoDB图片URL存储异常问题以及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录MongoDB图片URL存储异常问题项目场景问题描述原因分析解决方案预防措施js总结MongoDB图

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring