项目地址:

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.Net.Free 一个免费的Pdfium的 .net包装器--添加文本的更多相关文章

  1. 一个免费的、跨平台的、开源音频编辑器Audacity

    Audacity 是一个免费的开源程序,用于编辑音频录制.它可在多个平台(windows/linux)上运行.Audacity 基于 GUI,是一个具有多种选项的强大程序.它支持您录制各种类型的声音. ...

  2. Caf.CMS是一个免费的、 开源,功能齐全的CMS

    Caf.CMS(疯狂蚂蚁CMS) 是一个免费的. 开源,功能全面的CMS(内容管理系统).定位CMS也有点狭义呢,因为Caf.CMS是基于国外SmartStore.NET 开源商城源码的基础上改造而成 ...

  3. 搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门

    喜欢写Blog的人,会经历三个阶段. 第一阶段,刚接触Blog,觉得很新鲜,试着选择一个免费空间来写. 第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客. 第三阶段,觉得独立博客的管 ...

  4. 分享一个免费SSL证书申请网站,给网站开启https协议 | 张戈博客

    这些天,由于公司的业务需求,接触到了ssl证书和https协议.博客前几篇文章也分享了在WEB服务器上安装SSL证书,为网站开启https协议的教程,感兴趣的童鞋可以前往查看相关文章: <Lin ...

  5. 一个免费的自动化跨平台测试JavaScript的工具——BrowserSwarm

    BrowserSwarm是一个免费工具,能够自动化跨平台测试JavaScript.

  6. IETester是一个免费的Web浏览器调试工具

    功能简介 IETester是一个免费的Web浏览器调试工具,可以模拟出不同的js引擎来帮助程序员设计效果统一的代码.IETester可以在独立的标签页中开启IE5.5.IE6.IE7以及最I新的IE8 ...

  7. 搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门[zz]

    喜欢写Blog的人,会经历三个阶段. 第一阶段,刚接触Blog,觉得很新鲜,试着选择一个免费空间来写. 第二阶段,发现免费空间限制太多,就自己购买域名和空间,搭建独立博客. 第三阶段,觉得独立博客的管 ...

  8. 一个免费ss网站的数据爬取过程

    一个免费ss网站的数据爬取过程 Apr 14, 2019 引言 爬虫整体概况 主要功能方法 绕过DDOS保护(Cloudflare) post中参数a,b,c的解析 post中参数a,b,c的解析 p ...

  9. 【ghost初级教程】 怎么搭建一个免费的ghost博客

    ghost博客系统无疑是这个月最火热的话题之一,这个号称”只为博客“的系统,早在项目开始之初就受到了众人的关注.它使用了当前最火热node.js技术,10月14日发布了V0.3.3版本.江湖传言它将是 ...

  10. 搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门(转)

    转自:http://www.ruanyifeng.com/blog/2012/08/blogging_with_jekyll.html 喜欢写Blog的人,会经历三个阶段. 第一阶段,刚接触Blog, ...

随机推荐

  1. Go--统计数组中重复的元素及重复次数

    代码: package main import ( "fmt" ) func main() { //创建有重复数值的数组 a1 := []int{1, 2, 3, 1, 4, 5, ...

  2. 别再问我 2050 可以干什么,Make a Movie in a Day!

    2050 的每个年青人都是新物种.越是不可能见面的人见了面,就越会有奇迹发生,2050 努力让年青人见上另一位年青人,激发新的创造力.一起来 2050 看看? 2050 是什么? 2050 大会是由阿 ...

  3. Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020 - Final) 个人题解(A - D)

    1443A. Kids Seating 题意: 给你一个整数n,现在你需要从编号 \(1\) ~ $4 ⋅ n \(中选出\)n\(个编号使得这些编号之间\)g c d ≠ 1$ ,不能整除. 看了半 ...

  4. 理解CAP理论

    1. 理论什么是CAP? cap定理,它的提出是对于一个分布式系统得出的一个观点,是不能同时满足下面三点 一致性 可用性 分区容忍性 CAP理论认为,分布式系统最多只能同时满足其中的两个特性,而无法同 ...

  5. 13、SpringBoot-配置文件里密码加密

    系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...

  6. Python的excel文件读写(未完)

    写在前面: 因为每次用到都要查感觉太烦了,所以干脆写了一篇博客总结( •̥́ ˍ •̀ू ) 一.xlwt写入excel文件(.xls) import xlwt data1=[[1,2,3,4],[5 ...

  7. Power Designer建模之餐饮在线点评系统——概念数据模型

    企业信息管理 局部概念模型 企业 餐饮企业 食材提供商 食材 特色菜 团购活动 优惠券 促销活动 会员团购订单 优惠券下载和浏览记录表 会员信息管理 局部概念模型 会员 会员扩展信息 会员积分记录 餐 ...

  8. HTTP协议六种请求:GET,HEAD,PUT,DELETE,POST

    Http定义了与服务器交互的不同方法,标准Http协议支持六种请求方法,即: 1.GET 2.POST 3.PUT 4.Delete 5.HEAD 6.Options 最基本的方法有4种,分别是GET ...

  9. Redis 中bitMap使用及实现访问量

    1. Bitmap 是什么 Bitmap(也称为位数组或者位向量等)是一种实现对位的操作的'数据结构',在数据结构加引号主要因为: Bitmap 本身不是一种数据结构,底层实际上是字符串,可以借助字符 ...

  10. ThreadLocal应用及理解

    转载请注明出处: 1. 先展示threadLocal的一个简单封装,该封装用来在不同的请求线程中解析用户参数.在请求经过过滤器时, 对用户的信息进行设置入 ThreadLocalContext 中,可 ...