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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用腾讯云服务器如何搭建网站?新手建站教程

使用腾讯云服务器搭建网站全流程,包括轻量应用服务器和云服务器CVM建站教程,轻量可以使用应用镜像一键建站,云服务器CVM可以通过安装宝塔面板的方式来搭建网站,腾讯云服务器网txyfwq.com整理使用腾讯云服务器建站教程,…

蓝桥杯(填空题)

十四届 B组 日期统计(暴力枚举) 数据 5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2 7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1 0 0 9 4 8 0 9 1 2 8 5 0 2 5 3…

【日常记录】【JS】js 实现元素平滑上升

文章目录 1、效果图2、基本骨架3、实现4、完整代码 1、效果图 2、基本骨架 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&…

VLC-Qt实现简单的视频播放器

VLC-Qt是一个结合了Qt应用程序和libVLC的免费开源库。它提供了用于媒体播放的核心类&#xff0c;以及用于快速开发媒体播放器的GUI类。由于集成了整个libVLC&#xff0c;VLC-Qt具备了libVLC的所有特性&#xff0c; 例如&#xff1a;libVLC实例和播放器、单个文件和列表播放、音…

模板方法模式:定义算法骨架的设计策略

在软件开发中&#xff0c;模板方法模式是一种行为型设计模式&#xff0c;它在父类中定义一个操作的算法框架&#xff0c;允许子类在不改变算法结构的情况下重定义算法的某些步骤。这种模式是基于继承的基本原则&#xff0c;通过抽象类达到代码复用的目的。本文将详细介绍模板方…

婆婆被一句“公积金都比你儿子高”整破防了

上一篇&#xff1a;腾讯员工&#xff1a;我年入百万&#xff0c;月供 6 千多&#xff0c;有娃 一个&#xff0c;媳妇大学老师&#xff0c;税后 1.5 万&#xff0c;想辞职躺平&#xff0c;靠媳妇养家&#xff0c;不知道可不可以 一位阿里巴巴集团的员工的家庭成员寻求建议&#…

MybatisPlus——常用注解

MybatisPlus——常用注解 MybatisPlus通过扫描实体类&#xff0c;并基于反射获取实体类信息作为数据库表信息 BaseMapper后的指向的是User实体类 package com.example.mybatisplus02.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.example.my…

RHCE实验2-DNS服务正反向解析

实验开始 一、DNS正向解析 注&#xff1a; server端&#xff1a;192.168.32.147 node端&#xff1a;192.168.32.141 网址&#xff1a;www.openlab.com 1、server端和node端都关闭安全软件&#xff08;以server端为例&#xff09; [rootserver ~]# setenforce 0 [rootser…

新手如何使用腾讯云服务器搭建网站?so easy~

使用腾讯云服务器搭建网站全流程&#xff0c;包括轻量应用服务器和云服务器CVM建站教程&#xff0c;轻量可以使用应用镜像一键建站&#xff0c;云服务器CVM可以通过安装宝塔面板的方式来搭建网站&#xff0c;腾讯云服务器网txyfwq.com整理使用腾讯云服务器建站教程&#xff0c;…

对给定向量旋转

对给定向量旋转 顺时针&#xff1a; 逆时针&#xff1a; 源码&#xff1a; QPointF rotateVector(const QPointF& dir, double angle, bool flag){double rad (angle * M_PI) / 180;QPointF res;if (flag){float x static_cast<float>(dir.x() * std::cos(rad) …

GRE/MGRE详解

GRE GRE&#xff1a;通用路由封装&#xff0c;是标准的三层隧道技术&#xff0c;是一种点对点的隧道技术&#xff1b; 该技术可以实现不同的网络之间安全的访问&#xff1b; 如上&#xff1a;可以使用该技术搭建一条专线&#xff0c;实现公司A与分公司A1之间相互通信&#xf…

7/8电源连接器航空插头端子

概述 7/8电源连接器是一种工业电源连接器的规格型号之一&#xff0c;常见于工业领域的电力传输和连接应用。它的名称中的“7/8”代表连接器插头的直径尺寸&#xff0c;通常为7/8英寸。这种类型的连接器通常用于较大电流传输和较高功率设备的连接&#xff0c;具有较大的电流承载…

在视频号开店,新手一定要注意了,这几个细节很多人都不知道

大家好&#xff0c;我是电商笨笨熊 视频号小店作为今年黑马项目&#xff0c;自是吸引力不少的电商玩家&#xff1b; 但是在这些玩家中不免有一些新手玩家&#xff0c;从未做过电商&#xff0c;或者做过其他平台的电商但是没有接触过视频号&#xff1b; 而视频号小店在某些地…

【央国企专场】——国家电网

国家电网目录 一、电网介绍1、核心业务2、电网组成 二、公司待遇三、公司招聘1、招聘平台2、考试安排2.3 考试内容 一、电网介绍 1、核心业务 国家电网公司&#xff08;State Grid Corporation of China&#xff0c;简称SGCC&#xff09;是中国最大的国有企业之一&#xff0c…

ORA-00600: internal error code, arguments: [krbcbp_9]

解决方案 1、清理过期 2、control_file_record_keep_time 修改 恢复时间窗口 RMAN (Recovery Manager) 是 Oracle 数据库的备份和恢复工具。在 RMAN 中&#xff0c;可以使用“恢复窗口”的概念来指定数据库可以恢复到的时间点。这个时间点是基于最近的完整备份或增量备份。 …

记录一次上传文件,file文件有,但是formData一直为空的问题

1&#xff0c;axios请求有两种方式&#xff0c;第一种 asiox.post(…) axios({ url: this.url, method: “POST”, … }) 然后我不管用什么东西获取文件&#xff0c;最后肯定是有一个file对象&#xff0c;咱们拿到file对象&#xff0c;进行如下操作 const formData new FormDa…

vscode前端项目使用Tailwind CSS开发必备技能,5分钟快速上手

Tailwind CSS IntelliSense 是一款功能强大的工具&#xff0c;可以帮助开发者更快、更高效地编写代码。该工具可以实时提供 Tailwind CSS 类的建议&#xff0c;减少错误&#xff0c;提高代码质量。通过使用 IntelliSense&#xff0c;开发者可以提高生产力&#xff0c;减少学习曲…

根据ELK官网指引部署ELK- ECK-Elastic-​ Kibana​-Learn-ELK-(一)

**Attention: 1、You need open the ELK official website and step by step to deploy . 2、If you copy my command ,you must check them if it not match your environment . 一、official website Elastic documentation | Elastic Check there. 二、 ECK简介…

逆向案例二十三——某租逆向,总是有映射源文件怎么办以及分析webpack代码

网址&#xff1a;aHR0cHM6Ly93d3cubWFvbWFvenUuY29tLyMvYnVpbGQ 抓取数据包发现载荷以及数据都进行了加密&#xff1a; 定位方法一&#xff1a;直接搜decrypt(,进入js文件&#xff0c;可以发现就是直接AES的解密方法&#xff0c;打上断点&#xff0c; 下方的d是解密函数 现在有…

AcWing4655.重新排序

【题目链接】4655. 重新排序 - AcWing题库 输入样例&#xff1a; 5 1 2 3 4 5 2 1 3 2 5输出样例&#xff1a; 4【代码及详细注释】 #include<bits/stdc.h> using namespace std; typedef long long ll; const int N1e510; ll a[N],b[N],s[N]; //a用于存储原本的数组 …