windows txt/pdf 在Ubuntu中显示乱码

本文介绍了解决在gedit编辑器中打开中文TXT文件时出现乱码的方法,通过设置gsettings来指定字符集,确保中文内容能正确显示。此外,还提供了解决PDF文件中繁体字乱码的问题,安装必要的字体包。
Ctrl+Alt+t 打开命令终端,

在终端输入以下命令:

gsettings set org.gnome.gedit.preferences.encodings auto-detected "['GB18030','GB2312','GBK','UTF-8','BIG5','CURRENT','UTF-16']"
gsettings set org.gnome.gedit.preferences.encodings shown-in-menu "['GB18030','GB2312','GBK','UTF-8','BIG5','CURRENT','UTF-16']"

再次打开TXT文件时,中文显示正常。


pdf中繁体字乱码:

sudo apt-get install poppler-data

<think>我们正在处理XWPFTemplate导出PDF时遇到的中文乱码问题。根据引用信息,乱码问题通常是由于服务器缺少中文字体导致的。以下将分步骤说明解决方案: ### 解决方案步骤 1. **安装Linux系统中文字体**(引用[4][5]) - 在Linux服务器上创建中文字体目录: ```bash mkdir -p /usr/share/fonts/chinese ``` - 将Windows系统中的中文字体(如`simsun.ttf`、`simhei.ttf`)上传至该目录 - 执行以下命令更新字体缓存: ```bash yum install -y fontconfig mkfontscale # CentOS # 或 apt-get install -y fontconfig fonts-wqy-microhei # Ubuntu cd /usr/share/fonts/chinese mkfontscale mkfontdir fc-cache -fv ``` - 验证安装:`fc-list | grep chinese` 查看中文字体是否生效 2. **代码中显式指定中文字体**(引用[2]) 在DOCX转PDF时,必须通过`PDFont`加载中文字体: ```java // 使用PDFBox转换时指定字体 PDDocument pdfDoc = new PDDocument(); PDFont font = PDType0Font.load(pdfDoc, new File("/usr/share/fonts/chinese/simsun.ttf")); // 创建页面时设置默认字体 PDPage page = new PDPage(); pdfDoc.addPage(page); PDPageContentStream contentStream = new PDPageContentStream(pdfDoc, page); contentStream.setFont(font, 12); // 设置正文字体 ``` 3. **使用OpenPDF替代PDFBox**(引用[1][3]) OpenPDF对中文支持更好,且无需商业授权: ```java // 替换依赖 <dependency> <groupId>com.github.librepdf</groupId> <artifactId>openpdf</artifactId> <version>1.3.30</version> </dependency> // 转换代码示例 Document pdfDoc = new Document(); PdfWriter.getInstance(pdfDoc, response.getOutputStream()); pdfDoc.open(); // 加载中文字体 BaseFont bf = BaseFont.createFont( "/usr/share/fonts/chinese/simsun.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED ); Font font = new Font(bf, 12); // 添加中文内容 pdfDoc.add(new Paragraph("中文内容", font)); ``` ### 关键要点 - **根本原因**:Linux服务器未安装中文字体,导致PDF渲染时无法识别中文[^4][^5] - **商业方案**:使用`Aspose.Words`可一键解决(需购买License)[^1] - **验证方法**:在Linux执行`fc-list :lang=zh`查看已安装中文字体 §§相关问题§§ 1. 如何验证Linux服务器的中文字体是否安装成功? 2. OpenPDFPDFBox在中文支持上有哪些具体差异? 3. 如何使用Aspose.Words解决XWPFTemplate的PDF导出乱码? </think>### 处理XWPFTemplate导出PDF中文乱码的解决方案 以下是针对Linux环境下中文乱码问题的完整解决方案,结合引用信息和最佳实践: #### 一、根本原因分析 乱码本质是**Linux系统缺少中文字体支持**(常见表现为方框□),需同时满足两个条件: 1. 服务器安装中文字体库 2. PDF转换时显式指定中文字体 #### 二、具体解决步骤 1. **Linux服务器安装中文字体**(核心步骤)[^4][^5] ```bash # 1. 安装字体工具 sudo yum install fontconfig mkfontscale -y # CentOS sudo apt-get install fontconfig -y # Ubuntu # 2. 创建中文字体目录 sudo mkdir -p /usr/share/fonts/chinese # 3. 上传Windows字体文件(如simsun.ttc)到该目录 # 4. 刷新字体缓存 cd /usr/share/fonts/chinese sudo mkfontscale sudo mkfontdir sudo fc-cache -fv # 5. 验证安装 fc-list | grep -i "simsun" ``` 2. **代码层指定中文字体**(PDFBox方案)[^2] ```java // 转换前加载中文字体 PDDocument pdfDoc = new PDDocument(); PDFont font = PDType0Font.load( pdfDoc, new File("/usr/share/fonts/chinese/simsun.ttc") // 指定字体路径 ); // 写入内容时强制使用中文字体 PDPageContentStream contentStream = new PDPageContentStream(pdfDoc, page); contentStream.beginText(); contentStream.setFont(font, 12); // 使用加载的字体 contentStream.showText("中文内容"); contentStream.endText(); ``` 3. **替代方案:使用OpenPDF库**(推荐方案)[^1][^3] ```java // 添加依赖 <dependency> <groupId>com.github.librepdf</groupId> <artifactId>openpdf</artifactId> <version>1.3.30</version> </dependency> // 转换代码 Document pdfDoc = new Document(); PdfWriter.getInstance(pdfDoc, outputStream); pdfDoc.open(); // 显式加载Linux字体 BaseFont bf = BaseFont.createFont( "/usr/share/fonts/chinese/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.EMBEDDED ); Font font = new Font(bf, 12); pdfDoc.add(new Paragraph("中文内容", font)); ``` #### 三、验证与调试技巧 1. **字体路径验证**: ```bash # 查看系统是否识别字体 fc-list :lang=zh ``` 2. **水印问题处理**(商业库场景)[^1]: ```java // Aspose.Words去水印(需购买License) new License().setLicense("license.xml"); ``` 3. **备选字体方案**: - 免费字体推荐:文泉驿微米黑(`fonts-wqy-microhei`) - Docker环境:在Dockerfile中添加字体安装步骤 #### 四、不同方案的对比 | 方案 | 优点 | 缺点 | 中文支持 | |------|------|------|----------| | **PDFBox+字体配置** | 开源免费 | 配置复杂 | ★★★☆ | | **OpenPDF** | 内置更好中文支持 | 渲染精度中等 | ★★★★ | | **Aspose.Words** | 一键转换 | 商业付费($695+) | ★★★★★ | > **关键结论**:优先采用**OpenPDF方案**,其内置字体处理机制更完善,避免PDFBox的复杂字体嵌入问题[^1][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值