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

相关文章

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

C#实现一键批量合并PDF文档

《C#实现一键批量合并PDF文档》这篇文章主要为大家详细介绍了如何使用C#实现一键批量合并PDF文档功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言效果展示功能实现1、添加文件2、文件分组(书签)3、定义页码范围4、自定义显示5、定义页面尺寸6、PDF批量合并7、其他方法

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2