记一次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

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

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

相关文章

Springboot+Vue项目-基于Java+MySQL的校园管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

Rust腐蚀服务器常用参数设定详解

Rust腐蚀服务器常用参数设定详解 大家好我是艾西,一个做服务器租用的网络架构师上期我们分享了rust腐蚀服务器的windows系统搭建方式,其中启动服务器bat参数因为涉及的东西比较多所以想通过这篇文章给大家做一下详细的分享。 (注本文中xxxx…

微信小程序报错——“errno“: 600001, “errMsg“: “request:fail -2:net::ERR_FAILED“

bug现象 微信小程序体验版和真机调试 进入小程序的时候接口就出现了这个报错 "errno": 600001, "errMsg": "request:fail -2:net::ERR_FAILED" 排查 检查是证书过期还是证书链不完整 证书的信任链完整问题,可以在 亚数信息-SSL/TLS安…

LabVIEW电信号傅里叶分解合成实验

LabVIEW电信号傅里叶分解合成实验 电信号的分析与处理在科研和工业领域中起着越来越重要的作用。系统以LabVIEW软件为基础,开发了一个集电信号的傅里叶分解、合成、频率响应及频谱分析功能于一体的虚拟仿真实验系统。系统不仅能够模拟实际电路实验箱的全部功能&…

Towards Street-Level Client-Independent IP Geolocation(2011年)(第二部分)

被引次数:306 Wang Y, Burgener D, Flores M, et al. Towards {Street-Level}{Client-Independent}{IP} Geolocation[C]//8th USENIX Symposium on Networked Systems Design and Implementation (NSDI 11). 2011. 接着Towards Street-Level Client-Independent IP Geolocati…

初识 QT

初始QT 什么是QTQT发展史QT支持的平台QT的优点QT的应用场景搭建QT开发环境QT的开发工具概述QT下载安装 使用QT创建项目QT 实现Hello World程序使用按钮控件来实现使用标签控件来实现 项目文件解析widget.hmain.cppwidget.cppwidget.ui.pro文件 对象树QT 窗口坐标体系 什么是QT …

数字IC/FPGA——亚稳态及跨时钟域

什么是亚稳态亚稳态会造成什么平均故障间隔时间如何解决亚稳态同步时钟和异步时钟单bit电平信号如何跨时钟域单bit脉冲信号如何跨时钟域多bit信号如何跨时钟域 目录 一、亚稳态1.基本概念2.危害3.平均故障时间4.解决亚稳态的方法 二、跨时钟域1.同步电路和异步电路(…

打造eBay、亚马逊爆款新路径:自养号测评技巧全解析

对于ebay和亚马逊的商家而言,如何精心打造爆款产品,无疑是他们普遍关心的核心议题。然而,有时您可能会感到困惑,为何总是难以选出真正的爆款? 首先,要清晰地认识到选品的重要性。选品,作为店铺的…

代码随想录:栈与队列4-6

20.有效的括号 题目 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一…

Navicat Premium 16 for Mac/Win:数据库管理的全能之选

在数字化时代,数据库管理已成为各行各业不可或缺的一环。而Navicat Premium 16作为一款功能强大的数据库管理软件,无疑为数据库管理员和开发者提供了高效、便捷的解决方案。 Navicat Premium 16支持多种主流数据库系统,无论是MySQL、Postgre…

SSL证书添加与ICP备案,对于SpringBoot的要求

配置了SSL证书之后,在SpringBoot的resources文件夹里的application.properties会添加以下代码: server.port443 不需要添加server.address。不然会报错。 https类型的请求默认在Postman里面不可请求。 经过SSL证书处理的网页,链接中使默认…

初识SpringMVC(SpringMVC学习笔记一)

1 、还是熟悉的配方&#xff0c;先创建一个父Maven项目&#xff08;忘记怎么创建项目了就去前面翻笔记&#xff09;&#xff0c;导入通用的配置依赖 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instan…