在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响。然而,有时我们可能会遇到包含未知字体的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 类下的各属性,我们可以获取字体名称、大小、样式和颜色。主要实现步骤如下

  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].IsBold 和 PdfTextFragment.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());
}
}
}

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());
}
}
}

通过 C# 获取PDF文档中的字体名、大小、颜色、样式等的更多相关文章

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

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

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

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

  3. [开发笔记]-C#获取pdf文档的页数

    [操作pdf文档]之C#判断pdf文档的页数: /// <summary> /// 获取pdf文档的页数 /// </summary> /// <param name=& ...

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

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

  5. C# 在PDF文档中应用多种不同字体

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

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

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

  7. 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 打开需要 ...

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

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

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

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

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

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

随机推荐

  1. RabbitMQ-要点简介

    Windows下安装RabbitMQ RabbitMQ是流行的开源消息队列系统,用erlang语言开发,RabbitMQ是AMQP(高级消息队列协议)的标准实现. 要安装RabbitMQ,首先要安装E ...

  2. 直播预览层添加滤镜效果(CIFilter使用场景)

    直播预览层添加滤镜效果 原理,在显示之前,提前对图片进行滤镜处理,把处理后的图片展示出来就好了. CIFiter(滤镜类):给图片添加特殊效果(模糊,高亮等等). CIFiter滤镜分类(一个滤镜可能 ...

  3. LeetCode 力扣 205. 同构字符串

    给定两个字符串 s 和 t ,判断它们是否是同构的. 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的. 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序.不同字 ...

  4. Apache Amoro数据湖管理和治理工具部署

    一.Amoro介绍 2024 年 3 月 11 日,Amoro 项目顺利通过投票,正式进入 Apache 软件基金会(ASF,Apache Software Foundation)的孵化器,成为 AS ...

  5. C# 程序流控制 条件语句

    C#语言最基本的重要语句:控制程序流的语句.它们不是按代码在程序中的排列位置顺序执行的. 条件语句 条件语句可以根据条件是否满足或根据表达式的值来控制代码的执行分支.C#有两个控制代码的分支结构: i ...

  6. RabbitMQ(四)——工作队列模式

    RabbitMQ系列 RabbitMQ(一)--简介 RabbitMQ(二)--模式类型 RabbitMQ(三)--简单模式 RabbitMQ(四)--工作队列模式 RabbitMQ(五)--发布订阅 ...

  7. [BZOJ5093] 图的价值 题解

    考虑计算一个点的贡献,最后 \(\times n\) 即为所求. 显然一个点的贡献为 \(\sum\limits_{i=0}^{n-1}\binom{n-1}ii^k2^{\frac{(n-1)(n- ...

  8. [PA2021] Od deski do deski 题解

    好题好题,难者不会会者不难,我是前者. 实际上加入就可以合法的数是很好计算的.考虑现在所有前缀合法串后的字符实际上都可以满足条件. 容易想到根据是否合法设置状态.设 \(f_{i,j}/g_{i,j} ...

  9. FineReport - [01] 概述

    Gartner报表平台全球市场唯一入选国产软件! 一.FineReport 是什么?有什么用途? FineReport 是一款企业级Web报表工具,由帆软自主研发,秉持零编码的理念,易学易用且功能强大 ...

  10. AngleSharp :在 C# 中轻松解析和操作 HTML/XML 文档

    AngleSharp 是一个 C# 库,主要用于解析和操作 HTML 和 XML 文档,类似于浏览器的 DOM 操作.允许你在 C# 中使用类似浏览器的方式处理网页数据,进行网页抓取.数据提取和处理等 ...