通过 C# 获取PDF文档中的字体名、大小、颜色、样式等
在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响。然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文档。获取PDF中的字体信息可以解决这个问题,让我们能够更好地处理这些文件。无论是用于重新设计、文档翻译还是个人学习,了解如何获取PDF中的字体信息都是一项非常有用的技能。本文将介绍如何通过C#获取PDF中指定文本或所有文本的字体信息。
- C# 获取PDF中指定文本的字体信息
- C# 获取PDF文档中用到的所有字体信息
获取字体的操作需要用到第三方库 Spire.PDF for .NET,我们可以通过以下链接下载产品包后手动添加引用,或者直接通过NuGet安装。
https://www.e-iceblue.cn/Downloads/Spire-PDF-NET.html
C# 获取PDF中指定文本的字体信息
通过使用Spire.PDF for .NET提供的 PdfTextFragment 类下的各属性,我们可以获取字体名称、大小、样式和颜色。主要实现步骤如下
- 加载 PDF 文件,然后获取指定页面。
- 通过 PdfTextFinder.Find() 方法查找指定文本,并返回一个 PdfTextFragment 对象。
- 创建一个StringBuilder实例来存储信息。
- 遍历所有查找到的文本
- 通过 PdfTextFragment.Text 属性获取找到的文本内容。
- 通过 PdfTextFragment.TextStates[0].FontName 属性获取找到的文本的字体名称。
- 通过 PdfTextFragment.TextStates[0].FontSize 属性获取找到的文本的字体大小。
- 通过 PdfTextFragment.TextStates[0].FontFamily 属性获取找到的文本的字体类型。
- 通过 PdfTextFragment.TextStates[0].IsBold 和 PdfTextFragment.TextStates[0].IsSimulateBold 属性指示字体是否加粗或模拟加粗(字体样式设置为填充和描边)。
- 通过 PdfTextFragment.TextStates[0].IsItalic 属性指示字体是否为斜体.
- 使用 PdfTextFragment.TextStates[0].ForegroundColor 属性获取找到的文本的字体颜色。
- 将获取到的字体信息添加到StringBuilder实例中,然后写入 txt 文件。
C#代码:
using Spire.Pdf;
using Spire.Pdf.Texts;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Text; namespace GetTextFont
{
class Program
{
static void Main(string[] args)
{
// 加载PDF文件
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("E:\\PythonPDF\\南极.pdf"); // 获取第一页
PdfPageBase page = pdf.Pages[0]; // 创建PdfTextFinder实例
PdfTextFinder finds = new PdfTextFinder(page); // 查找页面上指定文本
finds.Options.Parameter = TextFindParameter.None;
List<PdfTextFragment> result = finds.Find("南极洲"); // 创建StringBuilder实例
StringBuilder str = new StringBuilder(); // 遍历所有查找到的文本
foreach (PdfTextFragment find in result)
{
// 获取文本
string text = find.Text;
// 获取字体名
string FontName = find.TextStates[0].FontName;
// 获取字体大小
float FontSize = find.TextStates[0].FontSize;
// 获取字体类型
string FontFamily = find.TextStates[0].FontFamily;
// 判断是否加粗或模拟加粗
bool IsBold = find.TextStates[0].IsBold;
bool IsSimulateBold = find.TextStates[0].IsSimulateBold;
// 判断是否为斜体
bool IsItalic = find.TextStates[0].IsItalic;
// 获取字体颜色
Color color = find.TextStates[0].ForegroundColor; // 将获取到的信息添加到StringBuilder实例中
str.AppendLine(text);
str.AppendLine("字体名: " + FontName);
str.AppendLine("字体大小: " + FontSize);
str.AppendLine("字体系列: " + FontFamily);
str.AppendLine("是否加粗: " + IsBold);
str.AppendLine("是否模拟加粗: " + IsSimulateBold);
str.AppendLine("是否为斜体: " + IsItalic);
str.AppendLine("字体颜色:" + color);
str.AppendLine(" ");
}
// 写入一个txt文件
File.WriteAllText("Pdf字体.txt", str.ToString());
}
}
}

C# 获取PDF文档中用到的所有字体信息
PdfUsedFont 类表示PDF文档中使用到的字体,它提供了不同的属性来帮助我们获取字体名称、大小、类型和样式等。主要实现步骤如下:
- 加载 PDF 文件。
- 通过 PdfDocument.UsedFonts 属性获取 PDF 文件中使用的所有字体。
- 创建一个StringBuilder实例来存储信息。
- 遍历所有使用到的字体。
- 通过 PdfUsedFont.Name 属性获取字体名称。
- 通过 PdfUsedFont.Size 属性获取字体大小。
- 通过 PdfUsedFont.Type 属性获取字体类型。
- 通过 PdfUsedFont.Style 属性获取字体样式。
- 将获取到的字体信息添加到StringBuilder实例中,然后写入 txt 文件。
C#代码:
using Spire.Pdf;
using Spire.Pdf.Graphics.Fonts;
using Spire.Pdf.Graphics;
using System.IO;
using System.Text; namespace GetTextFont
{
class Program
{
static void Main(string[] args)
{
// 加载PDF文件
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("E:\\PythonPDF\\南极.pdf"); // 获取PDF文件中使用到的字体
PdfUsedFont[] fonts = pdf.UsedFonts; // 创建StringBuilder实例
StringBuilder str = new StringBuilder(); // 遍历所有使用到的字体
foreach (PdfUsedFont font in fonts)
{
// 获取字体名
string name = font.Name; // 获取字体大小
float size = font.Size; // 获取字体类型
PdfFontType type = font.Type; // 获取字体样式
PdfFontStyle style = font.Style; // 将获取到的信息添加到StringBuilder实例中
str.AppendLine("字体名称: " + name + " 字体大小: " + size + " 字体类型: " + type + " 字体样式: " + style); } // 写入一个txt文件
File.WriteAllText("Pdf字体信息.txt", str.ToString());
}
}
}

通过 C# 获取PDF文档中的字体名、大小、颜色、样式等的更多相关文章
- 如何使用免费PDF控件从PDF文档中提取文本和图片
如何使用免费PDF控件从PDF文档中提取文本和图片 概要 现在手头的项目有一个需求是从PDF文档中提取文本和图片,我以前也使用过像iTextSharp, PDFBox 这些免费的PD ...
- Java 在PDF文档中绘制图形
本篇文档将介绍通过Java编程在PDF文档中绘制图形的方法.包括绘制矩形.椭圆形.不规则多边形.线条.弧线.曲线.扇形等等.针对方法中提供的思路,也可以自行变换图形设计思路,如菱形.梯形或者组合图形等 ...
- [开发笔记]-C#获取pdf文档的页数
[操作pdf文档]之C#判断pdf文档的页数: /// <summary> /// 获取pdf文档的页数 /// </summary> /// <param name=& ...
- 如何突出显示PDF文档中的一些重要文本信息
PDF文档中如果存在着太多的文字时,阅读者会容易遗漏很多重要的信息.但如果,文档中存在着一些特殊标记的文字时,比如标黄.标红文本时,很多人都会给予特别关注. 因此,当大家在使用pdfFactory专业 ...
- C# 在PDF文档中应用多种不同字体
在PDF文档中,可绘制不同字体样式.不同语言的文字,可通过使用Standard字体.TrueType字体.CJK字体或者自定义(私有)等字体类型.下面通过C#程序代码来展示如何实现使用以上类型的字体来 ...
- C# 如何在PDF文档中创建表格
表格能够直观的传达数据信息,使信息显得条理化,便于阅读同时也利于管理.那在PDF类型的文档中如何来添加表格并且对表格进行格式化操作呢?使用常规方法直接在PDF中添加表格行不通,那我们可以在借助第三方组 ...
- 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 打开需要 ...
- [.NET开发] C# 如何在PDF文档中创建表格
表格能够直观的传达数据信息,使信息显得条理化,便于阅读同时也利于管理.那在PDF类型的文档中如何来添加表格并且对表格进行格式化操作呢?使用常规方法直接在PDF中添加表格行不通,那我们可以在借助第三方组 ...
- 第一节:python提取PDF文档中的图片
由于项目需要将PDF文档当中的图片转换成图片,所以参考了这篇文章https://blog.csdn.net/qq_15969343/article/details/81673302后项目得以解决. 1 ...
- PDFtoWORD_V1.1版本支持PDF文档中的文字和图片一起转化到word文档中了~
昨天菜鸟小白做了一个小软件——PDFtoWORD,作用就是将pdf文件中的文字提取出来自动转化为可编辑的word类型.但是这个软件目前也只能将文件PDF中的文字提取出来,还无法提取图片.为了 ...
随机推荐
- ForkJoin全解1:简单使用与大致实现原理
1. 使用示例import java.lang.reflect.Method; import java.util.concurrent.ForkJoinPool;import java.util.co ...
- 深入浅出:Agent如何调用工具——从OpenAI Function Call到CrewAI框架
深入浅出:Agent如何调用工具--从OpenAI Function Call到CrewAI框架 嗨,大家好!作为一个喜欢折腾AI新技术的算法攻城狮,最近又学习了一些Agent工作流调用工具的文章,学 ...
- linux:搭建 WordPress 个人站点
参考:链接 介绍 WordPress 是一款使用 PHP 语言开发的博客平台,您可使用通过 WordPress 搭建属于个人的博客平台.本文以 CentOS 6.5 操作系统为例,手动搭建 WordP ...
- 【推荐】一款开源且成熟的OA协同办公系统,自带低代码开发功能!
项目介绍 今天给大家推荐一款开源且拥有成熟的OA办公系统功能,自带低代码开发平台,可以快速搭建OA系统.人事系统.CRM系统.办公用品系统.项目管理系统.合同管理系统等,让你可以快速上手.快速实施.快 ...
- 工具推荐 | Xshell全版本解密工具(包括Xshell7)——SharpXDecrypt
声明 本程序仅供个人恢复密码使用! 用户滥用造成的一切后果与作者无关! 使用者请务必遵守当地法律! 本程序不得用于商业用途,仅限学习交流! 请在下载后24小时内删除!如果代码中存在侵权行为,请联系我们 ...
- 新格局,新生态!天翼云以国云智算底座赋能AI产业发展!
近日,中国云产业联盟暨中关村云计算产业联盟(以下简称"云联盟")主办的"首届AIGC全网小程序应用创新大会暨云联盟・移动应用专业委员会成立发布会"在中关村国家自 ...
- Django项目实战:创建和迁移数据库
Django项目实战:创建和迁移数据库 一.配置数据库 Django默认使用SQLite数据库,但你也可以选择其他数据库如MySQL.PostgreSQL等.在./settings.py文件中,你可以 ...
- Flink On Yarn的两种部署模式
一.内存Job管理模式yarn-per-job 使用介绍:常用的模式 二.内存集中管理模式yarn-session 使用介绍:当作业很少并且都较小,能快速执行完成时,可以使用.否则一般不会使用该模式 ...
- 什么是Kappa架构?
一.简介 相当于在Lambda架构上去掉了批处理层(Batch Layer),只留下单独的流处理层(Speed Layer).通过消息队列的数据保留功能,来实现上游重放(回溯)能力. 当流任务发生代码 ...
- Presto配置调整
一.常用优化 1.每个查询最大使用内存1T,目前配置 3T query.max-memory=1T 2.每个工作节点最多加载10GB数据,目前 60GB query.max-memory-per-no ...