PdfiumViewer组件扩展(Pdfium.Net.Free)--加载字体
项目地址:
Pdfium.Net:https://github.com/1000374/Pdfium.Net.Free
PdfiumViewer:https://github.com/1000374/PdfiumViewer
Pdfium.Net.Free 支持
-
.NETFramework 4.0
-
.NETFramework 4.5
-
.NETStandard 2.0
- .Net8.0
可以和PdfiumViewer.Free共同使用预览、编辑pdf,也可以直接引用Pdfium.Net.Free 操作pdf,Pdfium.Net.Free封装了现有Pdfium的函数,实现了部分操作pdf的功能,部分功能等待后续~~
Pdfium.Net加载字体:
1.加载ttf字体文件
using (var doc = PdfDocument.CreateNew()) { var fontPath = @"c:\Windows\fonts\simhei.ttf"; byte[] fontData = File.ReadAllBytes(fontPath); var font = doc.TextLoadFont(fontData, (uint)fontData.Length, FpdfFontTypes.TrueType, true); }
上述方法是通过字符集获取字体对象的方式。
对于一个对象流,可直接通过 LoadFont函数加载字符集文件(注意:只能调用一次)。
由于Pdfium不支持加载字符子集,这样会把整个字体库加载到pdf内,生成的pdf会变大,考虑到此种场景,考虑对已知内容生成pdf,可先拆分字符子集,然后加载到pdf流中,这样能保证中文正常展示,切pdf大小固定,不足的是对于添加不在字符集内的字体将展示乱码。对写入内容不能确定的只能全部加载字符集。
using (var doc = PdfDocument.CreateNew()) { var fontPath = @"c:\Windows\fonts\simhei.ttf"; var cSharpString = "!you ok 这是第一句。"; var cSharpString2 = " 这是第二行。a you ok 你好 abcdefghijklmnopqrstuvwxyz1234567890-*/+~`@#$%^&*(){}[];:'|?,,。.!!"; doc.LoadFont(fontPath, true, cSharpString + cSharpString2); var page = doc.Pages.Add(612, 792); page.AddString(cSharpString, 10, 50, 12, Color.Black); page.AddString(cSharpString2, 10, 80, 12, Color.Black); doc.Save("./Pdfium.NetTests/AddString3.pdf"); }
2.加载pdf标准字体
pdf内置标准字体,标准字体查看 StandardPDFFonts类,pdf标准字体只能加载英文、阿拉伯数字,中文乱码
using (var doc = PdfDocument.CreateNew()) { var font = doc.TextLoadStandardFont(StandardPDFFonts.Arial); }
3.从pdf内获取字体
对于某些pdf已经内置了部分字体,当重新加载新字体时会造成生成的pdf变大,针对这种场景,可尝试从pdf内获取字体使用。
var pathPdf = "./Pdfium.NetTests/resources/fontText.pdf"; using (var doc = PdfDocument.Load(new MemoryStream(File.ReadAllBytes(pathPdf)))) { var font = doc.Pages[0].GetTextObjFont("你", out float size); }