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);        
 }

 

posted @ 2024-01-29 18:01  小树禾小央  阅读(132)  评论(0编辑  收藏  举报