在PDF文档中,可绘制不同字体样式、不同语言的文字,可通过使用Standard字体、TrueType字体、CJK字体或者自定义(私有)等字体类型。下面通过C#程序代码来展示如何实现使用以上类型的字体来绘制文本。

引入dll

本次程序中引入的是Spire.Pdf.dll,引入方法如下:

【方法1】通过NuGet安装。

  1. 可以在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“管理NuGet包”,然后搜索“Free Spire.PDF”,点击“安装”。
  2. 也可以将以下内容复制到PM控制台安装:

Install-Package FreeSpire.PDF -Version 7.8.9

【方法2】手动安装。

可通过手动下载Free Spire.PDF for .NET包,然后解压,找到BIN文件夹下的Spire.Pdf.dll。在Visual Studio中打开“解决方案资源管理器”,鼠标右键点击“引用”,“添加引用”,将本地路径BIN文件夹下的dll文件添加引用至程序。

应用字体

C#

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing; namespace ApplyFonts
{
class Program
{
static void Main(string[] args)
{
//创建PdfDocument对象
PdfDocument pdf = new PdfDocument(); //添加一页
PdfPageBase page = pdf.Pages.Add(); //初始化y坐标
float y = 30; //使用standard字体绘制文字
PdfFont standardFont = new PdfFont(PdfFontFamily.Helvetica, 14f);
page.Canvas.DrawString("Standard Font - Helvetica", standardFont, PdfBrushes.Black, 0, y);
standardFont = new PdfFont(PdfFontFamily.TimesRoman, 14f);
page.Canvas.DrawString("Standard Font - Times_Roman", standardFont, PdfBrushes.Black, 0, (y = y + 16));
standardFont = new PdfFont(PdfFontFamily.Courier, 14f);
page.Canvas.DrawString("Standard Font - Courier", standardFont, PdfBrushes.Black, 0, (y = y + 16)); //使用true type字体绘制文字
PdfTrueTypeFont trueTypeFont = new PdfTrueTypeFont(new Font("Arial", 12f), true);
page.Canvas.DrawString("TrueType Font - Arial", trueTypeFont, PdfBrushes.Blue, 0, (y = y + 30f)); /*//使用私有字体绘制文字
string fontFileName = "C:\\Users\\Administrator\\Desktop\\fontfile.ttf";
trueTypeFont = new PdfTrueTypeFont(fontFileName, 14f);
page.Canvas.DrawString("Private Font: 私有字体", trueTypeFont, PdfBrushes.DarkGreen, 0, (y = y + 30f));
*/ //使用cjk字体绘制文字
PdfCjkStandardFont cjkFont = new PdfCjkStandardFont(PdfCjkFontFamily.MonotypeHeiMedium, 14f);
page.Canvas.DrawString("你 好", cjkFont, PdfBrushes.DeepPink, 0, (y = y + 30f));
cjkFont = new PdfCjkStandardFont(PdfCjkFontFamily.HanyangSystemsGothicMedium, 14f);
page.Canvas.DrawString("こんにちは", cjkFont, PdfBrushes.OrangeRed, 0, (y = y + 16f));
cjkFont = new PdfCjkStandardFont(PdfCjkFontFamily.HanyangSystemsShinMyeongJoMedium, 14f);
page.Canvas.DrawString("안녕하세요", cjkFont, PdfBrushes.Purple, 0, (y = y + 16f)); //保存文档
pdf.SaveToFile("ApplyFonts.pdf",FileFormat.PDF);
System.Diagnostics.Process.Start("ApplyFonts.pdf");
}
}
}

VB.NET

Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing Namespace ApplyFonts
Class Program
Private Shared Sub Main(args As String())
'创建PdfDocument对象
Dim pdf As New PdfDocument() '添加一页
Dim page As PdfPageBase = pdf.Pages.Add() '初始化y坐标
Dim y As Single = 30 '使用standard字体绘制文字
Dim standardFont As New PdfFont(PdfFontFamily.Helvetica, 14F)
page.Canvas.DrawString("Standard Font - Helvetica", standardFont, PdfBrushes.Black, 0, y)
standardFont = New PdfFont(PdfFontFamily.TimesRoman, 14F)
page.Canvas.DrawString("Standard Font - Times_Roman", standardFont, PdfBrushes.Black, 0, (InlineAssignHelper(y, y + 16)))
standardFont = New PdfFont(PdfFontFamily.Courier, 14F)
page.Canvas.DrawString("Standard Font - Courier", standardFont, PdfBrushes.Black, 0, (InlineAssignHelper(y, y + 16))) '使用true type字体绘制文字
Dim trueTypeFont As New PdfTrueTypeFont(New Font("Arial", 12F), True)
page.Canvas.DrawString("TrueType Font - Arial", trueTypeFont, PdfBrushes.Blue, 0, (InlineAssignHelper(y, y + 30F))) '//使用私有字体绘制文字
' string fontFileName = "C:\\Users\\Administrator\\Desktop\\fontfile.ttf";
' trueTypeFont = new PdfTrueTypeFont(fontFileName, 14f);
' page.Canvas.DrawString("Private Font: 私有字体", trueTypeFont, PdfBrushes.DarkGreen, 0, (y = y + 30f));
' '使用cjk字体绘制文字
Dim cjkFont As New PdfCjkStandardFont(PdfCjkFontFamily.MonotypeHeiMedium, 14F)
page.Canvas.DrawString("你 好", cjkFont, PdfBrushes.DeepPink, 0, (InlineAssignHelper(y, y + 30F)))
cjkFont = New PdfCjkStandardFont(PdfCjkFontFamily.HanyangSystemsGothicMedium, 14F)
page.Canvas.DrawString("こんにちは", cjkFont, PdfBrushes.OrangeRed, 0, (InlineAssignHelper(y, y + 16F)))
cjkFont = New PdfCjkStandardFont(PdfCjkFontFamily.HanyangSystemsShinMyeongJoMedium, 14F)
page.Canvas.DrawString("안녕하세요", cjkFont, PdfBrushes.Purple, 0, (InlineAssignHelper(y, y + 16F))) '保存文档
pdf.SaveToFile("ApplyFonts.pdf", FileFormat.PDF)
System.Diagnostics.Process.Start("ApplyFonts.pdf")
End Sub
Private Shared Function InlineAssignHelper(Of T)(ByRef target As T, value As T) As T
target = value
Return value
End Function
End Class
End Namespace

字体绘制效果:

—End—

C# 在PDF文档中应用多种不同字体的更多相关文章

  1. 如何使用免费PDF控件从PDF文档中提取文本和图片

             如何使用免费PDF控件从PDF文档中提取文本和图片 概要 现在手头的项目有一个需求是从PDF文档中提取文本和图片,我以前也使用过像iTextSharp, PDFBox 这些免费的PD ...

  2. Java 在PDF文档中绘制图形

    本篇文档将介绍通过Java编程在PDF文档中绘制图形的方法.包括绘制矩形.椭圆形.不规则多边形.线条.弧线.曲线.扇形等等.针对方法中提供的思路,也可以自行变换图形设计思路,如菱形.梯形或者组合图形等 ...

  3. 如何突出显示PDF文档中的一些重要文本信息

    PDF文档中如果存在着太多的文字时,阅读者会容易遗漏很多重要的信息.但如果,文档中存在着一些特殊标记的文字时,比如标黄.标红文本时,很多人都会给予特别关注. 因此,当大家在使用pdfFactory专业 ...

  4. C# 如何在PDF文档中创建表格

    表格能够直观的传达数据信息,使信息显得条理化,便于阅读同时也利于管理.那在PDF类型的文档中如何来添加表格并且对表格进行格式化操作呢?使用常规方法直接在PDF中添加表格行不通,那我们可以在借助第三方组 ...

  5. OrCAD Capture CIS 16.6 从PDF文档中提取引脚定义,实现快速地编辑Part的引脚名称

    操作系统:Windows 10 x64 工具1:OrCAD Capture CIS 16.6-S062 (v16-6-112FF) 工具2:Excel 工具3:Solid Converter 打开需要 ...

  6. [.NET开发] C# 如何在PDF文档中创建表格

    表格能够直观的传达数据信息,使信息显得条理化,便于阅读同时也利于管理.那在PDF类型的文档中如何来添加表格并且对表格进行格式化操作呢?使用常规方法直接在PDF中添加表格行不通,那我们可以在借助第三方组 ...

  7. 第一节:python提取PDF文档中的图片

    由于项目需要将PDF文档当中的图片转换成图片,所以参考了这篇文章https://blog.csdn.net/qq_15969343/article/details/81673302后项目得以解决. 1 ...

  8. PDFtoWORD_V1.1版本支持PDF文档中的文字和图片一起转化到word文档中了~

    ​    昨天菜鸟小白做了一个小软件——PDFtoWORD,作用就是将pdf文件中的文字提取出来自动转化为可编辑的word类型.但是这个软件目前也只能将文件PDF中的文字提取出来,还无法提取图片.为了 ...

  9. 使用adobe pdf去除PDF文档中的批量雷同文本

    一.问题的提出 MgoSoft tiff to pdf软件没有提供中国地区的非VISA用户的购买渠道,中国通常都是银联标识走天下,卡不是VISA买不了这样的软件, 那么, MgoSoft tiff t ...

随机推荐

  1. Mysql中不能update自身的解决方法

    不能执行:update bi_data.order_all_detailset err_msg='同时存在于wx,zfb平台',proc_time=now()where order_no in( se ...

  2. Spring整合ActiveMQ实现消息延迟投递和定时投递

    linux(centos)系统安装activemq参考:https://www.cnblogs.com/pxblog/p/12222231.html 首先在ActiveMQ的安装路径 /conf/ac ...

  3. ubuntu ffmpeg 转码错误

    [aac @ 0xde2400] The encoder 'aac' is experimental but experimental codecs are not enabled, add '-st ...

  4. 【LeetCode】871. Minimum Number of Refueling Stops 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 贪心算法 日期 题目地址:https://leetc ...

  5. Test for Job(poj3249)

    Test for Job Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 10209   Accepted: 2372 Des ...

  6. Handing Incomplete Heterogeneous Data using VAEs

    目录 概 主要内容 ELBO 网络结构 不同的数据 HI-VAE 代码 Nazabal A., Olmos P., Ghahramani Z. and Valera I. Handing incomp ...

  7. EXPLAINING AND HARNESSING ADVERSARIAL EXAMPLES

    目录 概 主要内容 从线性谈起 非线性 Goodfellow I, Shlens J, Szegedy C, et al. Explaining and Harnessing Adversarial ...

  8. MySQL高级查询与编程笔记 • 【第1章 数据库设计原理与实战】

    全部章节   >>>> 本章目录 1.1 数据需求分析 1.1.1 数据需求分析的定义 1.1.2 数据需求分析的步骤和方法 1.1.3 数据流程图 1.1.4 数据字典 1. ...

  9. Java初学者作业——编写Java程序,实现用户登录验证。

    返回本章节 返回作业目录 需求说明: 编写Java程序,实现用户登录验证. 若用户名与密码输入正确,则提示"登录成功,欢迎回来!",若用户名与密码不匹配,则提示"用户名和 ...

  10. Java高级程序设计笔记 • 【目录】

    持续更新中- 我的大学笔记>>> 章节 内容 实践练习 Java高级程序设计作业目录(作业笔记) 第1章 Java高级程序设计笔记 • [第1章 IO流] 第2章 Java高级程序设 ...