解决越南语PDF导出乱码问题

这几天在做一个项目时,包含越南语,导出Pdf文件时,有些字符丢失或显示不完整,经过各种AI搜索整理后,终于可以正常显示,记录如下:

1. 先准备字体

  1. 下载 arial-unicode-ms.ttf
  2. 在网站根目录新建一个文件夹 fonts
  3. 把字体放进去
  4. 右键字体 → 属性 → 复制到输出目录:如果较新则复制

2. WebForm 后台代码,用ashx

csharp

运行

复制代码
using System;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;

public partial class TestPdf : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            // ========= WebForm 正确路径 =========
            string basePath =  HttpContext.Current.Server.MapPath("~/");
            string fontPath =  HttpContext.Current.Server.MapPath("~/fonts/arial-unicode-ms.ttf");
            string pdfPath = Path.Combine(basePath, "Result.pdf");

            // ========= 生成PDF(流自动释放,绝不占用文件) =========
            using (FileStream fs = new FileStream(pdfPath, FileMode.Create))
            {
                Document doc = new Document(PageSize.A4, 20, 20, 20, 20);
                PdfWriter.GetInstance(doc, fs);

                doc.Open();

                // ========= 【核心:越南语100%显示】 =========
                BaseFont bf = BaseFont.CreateFont(
                    fontPath,
                    BaseFont.IDENTITY_H,
                    BaseFont.EMBEDDED
                );
                Font font = new Font(bf, 14);

                // ========= 你的越南语(完整显示) =========
                string vietText = "CÔNG TY TNHH THƯƠNG MẠI TƯ VẤN CHUYÊN NGHIỆP TRÍ TUỆ";
                doc.Add(new Paragraph(vietText, font));

                doc.Close();
            }

            Response.Write("PDF生成成功:" + pdfPath);
        }
        catch (Exception ex)
        {
            Response.Write("错误:" + ex.Message);
        }
    }
}

如果是Winform,把取地址的语句改一下:

cs 复制代码
// 程序运行目录
        string basePath = AppDomain.CurrentDomain.BaseDirectory;

        // PDF 保存路径
        string pdfPath = Path.Combine(basePath, "Test.pdf");

        // 字体路径(必须和 exe 在一起)
        string fontPath = Path.Combine(basePath, "arial-unicode-ms.ttf");

✅ 说明

  1. 越南语特殊字符 Ư Đ Ạ Ệ 全部正常显示
  2. PDF 能正常打开,不损坏
  3. 流自动释放,不会文件被占用
  4. WebForm 专用路径 Server.MapPath 不报错
  5. 不依赖系统字体
相关推荐
2601_949950631 小时前
练题簿在线免费刷题 从资料整理到考前自测
面试·职场和发展·pdf·word·刷题
Dovis(誓平步青云)4 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
h_a_o777oah4 小时前
【树论】树链剖分:将树形结构转化为线性结构以处理树上路径问题(洛谷 P3384 附C++代码模板)
数据结构·算法·线段树·acm·树链剖分·树论·重链剖分
HEJOO94 小时前
指针的算术运算详解
java·数据结构·算法
Coder-magician4 小时前
《代码随想录》刷题打卡day47:并查集-part01
数据结构·算法·图论
lsc_blog4 小时前
远程和居家办公的经历,技术简历上怎么摆
面试·职场和发展·重构·pdf·求职招聘
垆边人似月.4 小时前
VLAN 资源池(100~200 分档)
数据结构·算法
程序员清风6 小时前
算法与数据结构入门:复杂度、数组与链表
数据结构·算法·链表
Logic1019 小时前
C语言/数据结构排序题解:三个数的最大乘积——排序后比较两种候选情况
c语言·数据结构·数组·排序·时间复杂度·算法题·负数处理
殷色玫瑰10 小时前
C++ string类详解:常用接口、字符串操作与模拟实现
java·linux·c语言·开发语言·数据结构·c++