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字体文件

1
2
3
4
5
6
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大小固定,不足的是对于添加不在字符集内的字体将展示乱码。对写入内容不能确定的只能全部加载字符集。

1
2
3
4
5
6
7
8
9
10
11
12
13
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标准字体只能加载英文、阿拉伯数字,中文乱码

1
2
3
4
using (var doc = PdfDocument.CreateNew())
{
    var font = doc.TextLoadStandardFont(StandardPDFFonts.Arial);
}

3.从pdf内获取字体

对于某些pdf已经内置了部分字体,当重新加载新字体时会造成生成的pdf变大,针对这种场景,可尝试从pdf内获取字体使用。

1
2
3
4
5
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 @   小树禾小央  阅读(188)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示