C# 获取PDF文档中的字体信息(字体名、大小、颜色、样式等

embedded/2025/1/19 11:16:00/

在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响。然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文档。获取PDF中的字体信息可以解决这个问题,让我们能够更好地处理这些文件。无论是用于重新设计、文档翻译还是个人学习,了解如何获取PDF中的字体信息都是一项非常有用的技能。本文将介绍如何通过C#获取PDF中指定文本或所有文本的字体信息

文章目录

    • C# 获取PDF中指定文本的字体信息
    • C# 获取PDF文档中用到的所有字体信息

获取字体的操作需要用到第三方库 Spire.PDF for .NET,我们可以通过以下链接下载产品包后手动添加引用,或者直接通过NuGet安装。

▶ 点击下载 Spire.PDF for.NET

C# 获取PDF中指定文本的字体信息

通过使用Spire.PDF for .NET提供的 PdfTextFragment 类下的各属性,我们可以获取字体名称、大小、样式和颜色。主要实现步骤如下

  1. 加载 PDF 文件,然后获取指定页面。
  2. 通过 PdfTextFinder.Find() 方法查找指定文本,并返回一个 PdfTextFragment 对象。
  3. 创建一个StringBuilder实例来存储信息。
  4. 遍历所有查找到的文本
  5. 通过 PdfTextFragment.Text 属性获取找到的文本内容。
  6. 通过 PdfTextFragment.TextStates[0].FontName 属性获取找到的文本的字体名称。
  7. 通过 PdfTextFragment.TextStates[0].FontSize 属性获取找到的文本的字体大小。
  8. 通过 PdfTextFragment.TextStates[0].FontFamily 属性获取找到的文本的字体类型。
  9. 通过 PdfTextFragment.TextStates[0].IsBoldPdfTextFragment.TextStates[0].IsSimulateBold 属性指示字体是否加粗或模拟加粗(字体样式设置为填充和描边)。
  10. 通过 PdfTextFragment.TextStates[0].IsItalic 属性指示字体是否为斜体.
  11. 使用 PdfTextFragment.TextStates[0].ForegroundColor 属性获取找到的文本的字体颜色。
  12. 将获取到的字体信息添加到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());}}
}

获取PDF指定文本字体

C# 获取PDF文档中用到的所有字体信息

PdfUsedFont 类表示PDF文档中使用到的字体,它提供了不同的属性来帮助我们获取字体名称、大小、类型和样式等。主要实现步骤如下:

  1. 加载 PDF 文件。
  2. 通过 PdfDocument.UsedFonts 属性获取 PDF 文件中使用的所有字体。
  3. 创建一个StringBuilder实例来存储信息。
  4. 遍历所有使用到的字体。
  5. 通过 PdfUsedFont.Name 属性获取字体名称。
  6. 通过 PdfUsedFont.Size 属性获取字体大小。
  7. 通过 PdfUsedFont.Type 属性获取字体类型。
  8. 通过 PdfUsedFont.Style 属性获取字体样式。
  9. 将获取到的字体信息添加到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());}}
}

获取PDF字体


http://www.ppmy.cn/embedded/155208.html

相关文章

【React】静态组件动态组件

目录 静态组件动态组件创建一个构造函数(类)使用 class 实现组件**使用 function 实现类组件** 静态组件 函数组件是静态组件&#xff1a; 组件第一次渲染完毕后&#xff0c;无法基于内部的某些操作让组件更新「无法实现自更新」&#xff1b;但是&#xff0c;如果调用它的父组…

Tidb集群升级到8.5.0过程中服务器遇到的坑

TiDB 集群升级到8.5.0踩坑记&#xff1a;从 GLIBC_2.15 升级到 GLIBC_2.28YUM 仓库问题的全面解决 1. 引言 作为部门的负责人&#xff0c;我常常觉得自己是个“救火队员”。昨天 TiDB 集群又出问题了&#xff1a;查询卡顿、响应时间变长&#xff0c;重启之后问题依旧。临近下班…

Tesla Free - Fall attack:特斯拉汽车网络安全攻击事件分析

文章目录 一、Tesla Free - Fall attack&#xff1a;特斯拉汽车网络安全事件纪要1. 引言2. 攻击流程2.1 攻击切入点2.2 系统入侵2.3 CAN 总线操控 3. 影响后果4. 特斯拉应对措施5. 研究意义二、安全攻击事件技术分析以及相应的检测和缓解措施 一、Tesla Free - Fall attack&…

AI生成文档——Uni-App CSS 样式开发指南

Uni-App CSS 样式开发指南 目录 基础概念布局与盒模型Flexbox 布局Grid 布局常用样式属性响应式设计UI 样式示例微信小程序样式适配动画与过渡常见问题与解决方案性能优化工具与资源总结高级技巧实战案例社区与学习资源附录 基础概念 1.1 CSS 简介 CSS&#xff08;Cascadin…

你会选择java还是node做后台管理

目前后台开源千千万&#xff0c;但说好用且容易上手的也就那几个。 node和java就看你怎么选了 如果你擅长Java&#xff0c;那RuoYi首选 RuoYI后台管理系统https://gitee.com/y_project/RuoYi-Vue有vue2又有vue3。MIT协议全免费开源&#xff0c;功能齐全&#xff01; 如果你擅…

uniapp -- Vue3 MQTT集成(H5、小程序)踩坑记录

🍍背景 在使用 uniapp 进行项目开发时,我需要实现一个关键功能,即利用 MQTT.js 进行订阅操作。我的项目是基于 unibest 模板初始化的。然而,在集成 MQTT 的过程中,遇到了兼容性问题。期间与作者进行了沟通。 Issue 解决方案是:有些库需要额外处理。需要找下兼容的库。 �…

【TCP】rfc文档

tcp协议相关rfc有哪些 TCP&#xff08;传输控制协议&#xff09;是一个复杂的协议&#xff0c;其设计和实现涉及多个RFC文档。以下是一些与TCP协议密切相关的RFC文档列表&#xff0c;按照时间顺序排列&#xff0c;涵盖了从基础定义到高级特性和优化的各个方面&#xff1a; 基…

踏上 C++ 编程之旅:开篇之作

踏上 C 编程之旅&#xff1a;开篇之作 在计算机编程的广袤天地中&#xff0c;C 宛如一座巍峨的高峰&#xff0c;吸引着无数开发者攀登探索。今天&#xff0c;就让我们一同开启这段充满挑战与惊喜的 C 编程之旅&#xff0c;在代码的世界里开辟属于自己的道路。 一、为什么选择…