C# 獲取PDF文檔中的字體信息(字體名、大小、顏色、樣式等

在設計和出版行業中,字體的選擇和使用對最終作品的質量有著重要影響。然而,有時我們可能會遇到包含未知字體的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.pswp.cn/web/66345.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/66345.shtml
英文地址,請注明出處:http://en.pswp.cn/web/66345.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ 的 CTAD 與推斷指示(Deduction Guides)

1 類模板參數推導&#xff08;CTAD&#xff09; 1.1 曲線救國 ? CTAD 的全稱是類模板參數推導&#xff08;Class Template Argument Deduction&#xff09;&#xff0c;它允許在實例化類模板時&#xff0c;根據構造函數的參數類型自動推導模板參數&#xff0c;從而避免顯式指…

Shell正則表達式與文本處理三劍客(grep、sed、awk)

一、正則表達式 Shell正則表達式分為兩種&#xff1a; 基礎正則表達式&#xff1a;BRE&#xff08;basic regular express&#xff09; 擴展正則表達式&#xff1a;ERE&#xff08;extend regular express&#xff09;&#xff0c;擴展的表達式有、?、|和() 1.1 基本正則表…

掌握 React 高階組件與高階函數:構建可復用組件的新境界

一、引言 在 React 開發中&#xff0c;代碼復用性和邏輯分離是提高開發效率和維護性的重要手段。高階組件&#xff08;Higher-Order Component, HOC&#xff09;和高階函數&#xff08;Higher-Order Function, HOF&#xff09;是實現這一目標的兩種強大工具。本文將詳細介紹這…

arcgis提取不規則柵格數據的矢量邊界

效果 1、準備數據 柵格數據:dem或者dsm 2、柵格重分類 分成兩類即可 3、新建線面圖層 在目錄下選擇預先準備好的文件夾,點擊右鍵,選擇“新建”→“Shapefile”,新建一個Shapefile文件。 在彈出的“新建Shapefile”對話框內“名稱”命名為“折線”,“要素類型”選…

阿里云通義實驗室自然語言處理方向負責人黃非:通義靈碼2.0,邁入 Agentic AI

通義靈碼是基于阿里巴巴通義大模型研發的AI 智能編碼助手&#xff0c;在通義靈碼 1.0 時代&#xff0c;我們針對代碼的生成、補全和問答&#xff0c;通過高效果、低時延&#xff0c;研發出了國內最受歡迎的編碼助手。 在通義靈碼 2.0 發布會上&#xff0c;阿里云通義實驗室自然…

Open3D 最小二乘擬合平面(直接求解法)【2025最新版】

目錄 一、算法原理二、代碼實現三、結果展示本文由CSDN點云俠原創,原文鏈接。如果你不是在點云俠的博客中看到該文章,那么此處便是不要臉的爬蟲與GPT。 博客長期更新,本文最近更新時間為:2025年1月18日。 一、算法原理 平面方程的一般表達式為:

超標量處理器設計2-cache

1. cache 介紹 影響Cache缺失的情況有3種&#xff1a; Compulsory: 第一次被訪問的指令或者數據肯定不會在cache中&#xff0c;需要通過預取來減少這種缺失Capcity: Cache容量越大&#xff0c;缺失就可以更少, 程序頻繁使用的三個數據來源于3個set&#xff0c; 但是&#xff…

linux 安裝PrometheusAlert配置釘釘告警

在 Linux 上安裝 PrometheusAlert 并配置釘釘告警的步驟如下: 1. 準備工作 釘釘機器人: 在釘釘群中創建一個機器人,獲取 Webhook URL。示例 Webhook URL:https://oapi.dingtalk.com/robot/send?access_token=your_dingtalk_token。PrometheusAlert 安裝包: 從 Prometheus…

當PHP遇上區塊鏈:一場奇妙的技術之旅

PHP 與區塊鏈的邂逅 在技術的廣袤宇宙中&#xff0c;區塊鏈技術如同一顆耀眼的新星&#xff0c;以其去中心化、不可篡改、透明等特性&#xff0c;掀起了一場席卷全球的變革浪潮。眾多開發者懷揣著對新技術的熱忱與探索精神&#xff0c;紛紛投身于區塊鏈開發的領域&#xff0c;試…

vscode的安裝與使用

下載 地址&#xff1a;https://code.visualstudio.com/ 安裝 修改安裝路徑&#xff08;不要有中文&#xff09; 點擊下一步&#xff0c;創建桌面快捷方式&#xff0c;等待安裝 安裝中文插件 可以根據自己的需要安裝python和Jupyter插件

32單片機綜合應用案例——物聯網(IoT)環境監測站(四)(內附詳細代碼講解!!!)

無論你身處何種困境&#xff0c;都要堅持下去&#xff0c;因為勇氣和毅力是成功的基石。不要害怕失敗&#xff0c;因為失敗并不代表終結&#xff0c;而是為了成長和進步。相信自己的能力&#xff0c;相信自己的潛力&#xff0c;相信自己可以克服一切困難。成功需要付出努力和堅…

淺談云計算19 | OpenStack管理模塊 (上)

OpenStack管理模塊&#xff08;上&#xff09; 一、操作界面管理架構二、認證管理2.1 定義與作用2.2 認證原理與流程2.2.1 認證機制原理2.2.2 用戶認證流程 三、鏡像管理3.1 定義與功能3.2 鏡像服務架構3.3 工作原理與流程3.3.1 鏡像存儲原理3.3.2 鏡像檢索流程 四、計算管理4.…

RK3568 Android11 鎖屏界面屏蔽下拉狀態欄

參考文章&#xff1a; Android R鎖屏界面屏蔽下拉狀態欄_pulseexpansionhandler-CSDN博客 前提增加狀態欄控制顯隱屬性&#xff0c;以下面文章為前提補充功能 RK3568 Android11 狀態欄和導航欄增加顯示控制功能-CSDN博客 修改文件位置&#xff1a; frameworks/base/package…

彩色圖像面積計算一般方法及MATLAB實現

一、引言 在數字圖像處理中&#xff0c;經常需要獲取感興趣區域的面積屬性&#xff0c;下面給出圖像處理的一般步驟。 1.讀入的彩色圖像 2.將彩色圖像轉化為灰度圖像 3.灰度圖像轉化為二值圖像 4.區域標記 5.對每個區域的面積進行計算和顯示 二、程序代碼 %面積計算 cle…

分布式理解

分布式 如何理解分布式 狹義的分布是指&#xff0c;指多臺PC在地理位置上分布在不同的地方。 分布式系統 分布式系**統&#xff1a;**多個能獨立運行的計算機&#xff08;稱為結點&#xff09;組成。各個結點利用計算機網絡進行信息傳遞&#xff0c;從而實現共同的“目標或者任…

深入了解卷積神經網絡(CNN):圖像處理與深度學習的革命性技術

深入了解卷積神經網絡&#xff08;CNN&#xff09;&#xff1a;圖像處理與深度學習的革命性技術 導語 卷積神經網絡&#xff08;CNN&#xff09;是現代深度學習領域中最重要的模型之一&#xff0c;特別在計算機視覺&#xff08;CV&#xff09;領域具有革命性的影響。無論是圖…

QT:IconButton的動畫效果

要實現IconButton&#xff0c;需要處理背景。參考&#xff1a; QT之IconWidget-CSDN博客 隨后就是Button的按下動畫效果。實現也簡單。思路就是記錄按下狀態&#xff0c;然后在繪制時偏移一個像素&#xff08;也可以繪制另外一個圖&#xff09;。 增加一個字段&#xff0c;記…

Android渲染Latex公式的開源框架比較

對比主流框架&#xff0c;介紹如下幾款 1、AndroidMath 官網&#xff1a;https://github.com/gregcockroft/AndroidMath/tree/master 基于android原生view方式渲染 優點&#xff1a;速度快&#xff0c;開源協議 MIT license 缺點&#xff1a;不支持文字公式混合渲染 2、Ma…

Red Hat8:搭建FTP服務器

目錄 一、匿名FTP訪問 1、新建掛載文件 2、掛載 3、關閉防火墻 4、搭建yum源 5、安裝VSFTPD 6、 打開配置文件 7、設置配置文件如下幾個參數 8、重啟vsftpd服務 9、進入圖形化界面配置網絡 10、查看IP地址 11、安裝ftp服務 12、遇到拒絕連接 13、測試 二、本地…

VS Code--常用的插件

原文網址&#xff1a;VS Code--常用的插件_IT利刃出鞘的博客-CSDN博客 簡介 本文介紹VS Code&#xff08;Visual Studio Code&#xff09;常用的插件。 插件的配置 默認情況下&#xff0c;插件會放到這里&#xff1a;C:\Users\xxx\.vscode\extensions 修改插件位置的方法 …