首页 > 其他分享 >Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--添加文本

Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--添加文本

时间:2024-01-29 18:13:52浏览次数:27  
标签:Pdfium -- doc float Free Color mode var

项目地址:

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

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

Pdfium.Net 添加文本有3个重载

1.当前重载使用pdf标准字库添加文字(中文会乱码)

    /// <summary>
    /// Add text object using one of the standard PDF fonts.  Chinese maybe garbled characters
    /// </summary>
    /// <param name="text"></param>
    /// <param name="posX"></param>
    /// <param name="posY"></param>
    /// <param name="font_size">the font size for the new text object.</param>
    /// <param name="fillColor"></param>
    /// <param name="fontName"><see cref="Native.Enums.StandardPDFFonts"/></param>
    /// <param name="scalex"></param>
    /// <param name="scaley"></param>
    /// <param name="rotate"></param>
    /// <param name="shear"></param>
    /// <param name="blend">Blend mode can be one of following: Color, ColorBurn, ColorDodge, Darken,Difference, Exclusion, HardLight, Hue, Lighten, Luminosity, Multiply, Normal,Overlay, Saturation, Screen, SoftLight.<see cref="BlendMode"/></param>
    /// <param name="render_mode">render_mode<see cref="FpdfTextRenderMode"/></param>
    /// <param name="strokeColor">stroke Color render_mode </param>
    /// <param name="strokeWidth">stroke Width</param>
    /// <returns></returns>
    public bool AddString(string text, int posX, int posY, float font_size, Color fillColor, string fontName, float scalex = 1f, float scaley = 1, float rotate = 0, float shear = 0, 
string blend = BlendMode.Darken, FpdfTextRenderMode render_mode = FpdfTextRenderMode.FILL, Color? strokeColor = null, float strokeWidth = 0.2f)

 

调用示例:

  using (var doc = PdfDocument.CreateNew())
  {
      var cSharpString = "!you ok 这是第一句。 这是第二行。a you ok";
      var page = doc.Pages.Add(612, 792);
      page.AddString(cSharpString, 10, 50, 12, Color.Black, StandardPDFFonts.TimesNewRoman);
      doc.Save("./Pdfium.NetTests/AddString1.pdf");
  }

  

2.当前重载使用获取的PdfFont 对象添加文字,详情请参照

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

   /// <summary>
   /// add Text with add <see cref="FpdfFontT"/>
   /// </summary>
   /// <param name="pageNumber"></param>
   /// <param name="text"></param>
   /// <param name="posX"></param>
   /// <param name="posY"></param>
   /// <param name="font_size"></param>
   /// <param name="fillColor"></param>
   /// <param name="font"></param>
   /// <param name="scalex"></param>
   /// <param name="scaley"></param>
   /// <param name="rotate"></param>
   /// <param name="shear"></param>
   /// <param name="blend">Blend mode can be one of following: Color, ColorBurn, ColorDodge, Darken,Difference, Exclusion, HardLight, Hue, Lighten, Luminosity, Multiply, Normal,Overlay, Saturation, Screen, SoftLight.<see cref="BlendMode"/></param>
   /// <param name="render_mode">render_mode<see cref="FpdfTextRenderMode"/></param>
   /// <param name="strokeColor">stroke Color render_mode </param>
   /// <param name="strokeWidth">stroke Width</param>
   /// <returns></returns>
   public bool AddString(string text, float posX, float posY, float font_size, Color fillColor, PdfFont font, float scalex = 1f, float scaley = 1, float rotate = 0, float shear = 0, string blend = BlendMode.Darken,
 FpdfTextRenderMode render_mode = FpdfTextRenderMode.FILL, Color? strokeColor = null, float strokeWidth = 0.2f)

 

调用示例(从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);
       if (!font.IsNull)
       {
           var emb = font.IsEmbedded;
           var cSharpString = "你好啊,abc";
           var page = doc.Pages[0];
           page.AddString(cSharpString, 10, 50, size, Color.Black, font);
           doc.Save("./Pdfium.NetTests/TextObjFont.pdf");
       }
   }

  

3.当前重载需提前调用

   public void LoadFont(string fontPath, bool isSubSet = false, string words = null, FpdfFontTypes fontTypes = FpdfFontTypes.TrueType)

  

方法,且只能调用一次,否则抛出找不到字体对象,或者pdf会多次加载字体导致pdf很大,也就是每次调用都会往doc中加载一次字库。

可创建子集后加载字库,以减少pdf大小,具体参照

Pdfium.Net.Free 一个免费的Pdfium的 .net包装器--创建字符子集 草稿

 /// <summary>
 /// add Text with add <see cref="FpdfFontT"/>
 /// </summary>
 /// <param name="text"></param>
 /// <param name="posX"></param>
 /// <param name="posY"></param>
 /// <param name="font_size">the font size for the new text object.</param>
 /// <param name="fillColor">the font color.</param>
 /// <param name="isSubSet">ttf path use File.ReadAllBytes(fontPath);</param>
 /// <param name="scalex">scale x</param>
 /// <param name="scaley">scale y</param>
 /// <param name="rotate">rotate</param>
 /// <param name="shear">shear</param>
 /// <param name="fontTypes"><see cref="FpdfFontTypes"/></param>
 /// <param name="blend">Blend mode can be one of following: Color, ColorBurn, ColorDodge, Darken,Difference, Exclusion, HardLight, Hue, Lighten, Luminosity, Multiply, Normal,Overlay, Saturation, Screen, SoftLight.<see cref="BlendMode"/></param>
 /// <param name="render_mode">render_mode<see cref="FpdfTextRenderMode"/></param>
 /// <param name="strokeColor">stroke Color render_mode </param>
 /// <param name="strokeWidth">stroke Width</param>
 /// <returns></returns>
 public bool AddString(string text, float posX, float posY, float font_size, Color fillColor, float scalex = 1f, float scaley = 1, float rotate = 0, float shear = 0, FpdfFontTypes fontTypes = FpdfFontTypes.TrueType, 
string blend = BlendMode.Darken, FpdfTextRenderMode render_mode = FpdfTextRenderMode.FILL, Color? strokeColor = null, float strokeWidth = 0.2f)

 

调用字符集全部加载示例:

 

  using (var doc = PdfDocument.CreateNew())
  {
      var fontPath = @"c:\Windows\fonts\simhei.ttf";
      doc.LoadFont(fontPath);
      var cSharpString = "!you ok 这是第一句。 这是第二行。a you ok";
      var page = doc.Pages.Add(612, 792);
      page.AddString(cSharpString, 10, 50, 12, Color.Black);
      doc.Save("./Pdfium.NetTests/AddString.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");
 }

  

 

  

标签:Pdfium,--,doc,float,Free,Color,mode,var
From: https://www.cnblogs.com/xiaohemiao/p/17995042

相关文章

  • 清理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......
  • 12种相关系数汇总!
    所谓相关关系是指2个或2个以上变量取值之间在某种意义下所存在的规律,其目的在于探索数据集所存在隐藏的关系网,在19世纪80年代,Galton通过研究人类身高遗传问题首次提出了相关的概念,文中指出相关关系可以定义为:一个变量变化时,另一个变量或多或少的相应的变量。这种相关关系的统计量......
  • MySQL迁移人大金仓kingbase
    前言:前段时间接到一个任务,说是数据库要由mysql改成人大金仓,项目代码也需要修改适配(另一个同事负责),而我则是负责数据库的迁移工作,期限是七天(2024-01-26已上线),在这之前我甚至都没听过人大金仓这个名词,而且也没有相关文档的交接更没有技术人员支撑,起初我还让项目负责人去跟集团的DBA......
  • 「效果图渲染」怎么用VRay渲染逼真的物理模型
    使用V-Ray渲染出逼真的物理模型首先要注重材质和光照的真实性。精细调整材质属性,如反射、透明度和质感,确保它们与现实世界中物质的特性相一致。接下来,布置合适的光源,模拟自然光线的行为,创建真实的光影效果。通过这两个基本步骤,即可开始打造高度逼真的三维渲染作品。VRay渲染室内......