包引用:
问题描述:
引用iText 7包导出PDF时如何显示中文字体?有列头进行本地化翻译。
导出代码:
public static async Task ExportToPdfAsync(IJSRuntime JS, List<Dictionary<string, object>> lsTableSource, IStringLocalizer _translator, string fileName)
{
try
{
using var ms = new MemoryStream();
using (var writer = new PdfWriter(ms))
{
var pdf = new PdfDocument(writer);
var document = new Document(pdf, PageSize.A4);
// 添加标题
document.Add(new iText.Layout.Element.Paragraph(fileName).SetFontSize(20));
// 添加数据
foreach (var row in lsTableSource)
{
foreach (var keyValue in row)
{
var columnName = _translator[keyValue.Key]; // 通过 _translator 获取翻译后的列名
var value = keyValue.Value?.ToString() ?? "";
// 将数据按照指定格式添加到文档中
document.Add(new iText.Layout.Element.Paragraph($"{columnName}: {value}").SetFontSize(12));
}
// 添加换行
document.Add(new iText.Layout.Element.Paragraph("\n"));
}
document.Close();
}
// 复制数据到新的 MemoryStream 对象
byte[] pdfBytes = ms.ToArray();
using var msCopy = new MemoryStream(pdfBytes);
// 将 PDF 数据保存到内存中,并准备下载
msCopy.Position = 0;
byte[] pdfCopyBytes = msCopy.ToArray();
await JS.InvokeVoidAsync("downloadPdf", pdfCopyBytes, fileName);
}
catch (Exception ex)
{
// Debug异常
Console.WriteLine($"导出 PDF 文件时出现异常:{ex.Message}");
}
}
效果图:没有获取到中文字体翻译实际上Debug是有翻译的。