首页 > 其他分享 >Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--加载字体

Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--加载字体

时间:2024-01-29 18:14:46浏览次数:28  
标签:-- doc Pdfium Free 字体 var pdf 加载

项目地址:

Pdfium.Net:https://github.com/1000374/Pdfium.Net

PdfiumViewer:https://github.com/1000374/PdfiumViewer

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

 

标签:--,doc,Pdfium,Free,字体,var,pdf,加载
From: https://www.cnblogs.com/xiaohemiao/p/17994724

相关文章

  • 初中英语优秀范文100篇-073Pen friend-笔友
    PDF格式公众号回复关键字:SHCZFW073记忆树1Itgoeswithoutsayingthatfriendscarrymuchweightinourlife.翻译不言而喻,朋友在我们的生活中占有很重要的地位。简化记忆生活句子结构It(主语)+goes(谓语)+withoutsaying(介词短语作状语,表示“不言而喻”),使用了一般......
  • 如何进行人工智能应用的测试
    人工智能应用的测试是保证其性能和质量的重要环节。随着人工智能技术的快速发展和广泛应用,对于如何进行人工智能应用的测试也变得尤为重要。一、测试策略和方法1、功能测试 功能测试是人工智能应用测试中最基础且最重要的测试环节。它旨在验证人工智能应用是否能够按照预期功能正......
  • Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--添加文本
    项目地址:Pdfium.Net:https://github.com/1000374/Pdfium.NetPdfiumViewer:https://github.com/1000374/PdfiumViewerPdfium.Net添加文本有3个重载1.当前重载使用pdf标准字库添加文字(中文会乱码)///<summary>///AddtextobjectusingoneofthestandardPDFfont......
  • 清理linux命令记录
    Linux清理痕迹的一些方法1,暴力省事直接删除首先是比较暴力省事的操作,直接清除当前用户bash历史记录,可以直接echo空进去。echo"">~/.bash_history然后history的话,可以通过c参数直接删除。linux查看历史命令在Linux中,可以使用以下命令来查看历史命令:使用history命......
  • Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--创建字符子集
    项目地址:Pdfium.Net:https://github.com/1000374/Pdfium.NetPdfiumViewer:https://github.com/1000374/PdfiumViewerPdfium.Net.Free一个免费的Pdfium的.net包装器--加载字体 接上篇,怎么创建字符子集呢?获取字符集内的字形符号需要引用wpf下PresentationCore.dll,根据比对传入......
  • pycharm新建文档自动显示编码格式和作者信息等信息
    1.设置方法setting--editor--fileandcodetemplates--选择pythonscript--输入信息模版--apply2.信息模版--coding:utf-8--"""Author:wrTime:${DATE}${TIME}File:${NAME}.pySoftware:${PRODUCT_NAME}"""从上到下依次是:作者:时间:文件名:ide名称:还......
  • 【教程】iOS如何抓取HTTP和HTTPS数据包经验分享
    ......
  • 杨老师的照相排列
    蓝书上的那个补全数组思想其实是当然这个问题完全可以拓展到状态压缩中间那一串是乘法的意思(然而我也不太清楚跟状态压缩有啥关系)状态压缩具体内容见状态压缩的专题......
  • 挑战自己,突破极限
    挑战自己,突破极限,是一个人不断成长和进步的重要途径,也是实现个人价值的关键途径。只有通过挑战自己,突破自己的极限,才能不断向前,不断创造更加出色的成就。在本文中,我们将讨论如何挑战自己,突破自己的极限,成为一个更加出色的人。一、认识挑战自己的重要性1.促进个人成长挑......
  • 多项式
    很多证明需要用到积分知识,所以只有结论和代码一、多项式求导$F'(x)=\sum_{i=0}a_{i+1}\times(i+1)x$点击查看代码inlinevoiddao(int*g,int*f){for(inti=0;i<n;++i)g[i]=f[i+1]*(i+1)%mod;}二、多项式求积分求导逆运算$F'(x)=\sum_{i=1}a_{i-1}\times\fr......