PDF管理控制項Aspose.PDF for .Net使用教程:在PDF文件中嵌入字體

来源:https://www.cnblogs.com/mnrssj-Aspsoe/archive/2019/11/06/11806181.html
-Advertisement-
Play Games

Aspose.PDF for .NET是一種高PDF處理和解析API,用於在跨平臺應用程式中執行文檔管理和操作任務。API可以輕鬆用於生成、修改、轉換、渲染、保護和列印PDF文檔,而無需使用Adobe Acrobat。此外,API還提供PDF壓縮選項,表格創建和操作,圖形和圖像功能,廣泛的超鏈接功能 ...


Aspose.PDF for .NET是一種高PDF處理和解析API,用於在跨平臺應用程式中執行文檔管理和操作任務。API可以輕鬆用於生成、修改、轉換、渲染、保護和列印PDF文檔,而無需使用Adobe Acrobat。此外,API還提供PDF壓縮選項,表格創建和操作,圖形和圖像功能,廣泛的超鏈接功能,印章和水印任務,擴展的安全控制和自定義字體處理。

在現有的PDF文件中嵌入字體

PDF閱讀器支持14種字體的核心,因此無論以何種平臺顯示文檔,都可以以相同方式顯示文檔。當PDF包含不是14種核心字體之一的字體時,請將其嵌入PDF文件中以避免字體替換。

Aspose.PDF for .NET支持在現有PDF文件中嵌入字體,可以嵌入完整的字體或字體的子集。要嵌入字體,請使用Document該類打開PDF文件。然後使用Aspose.Pdf.Text.Font該類將字體嵌入到PDF文件中。要嵌入完整字體,請使用Fontclass的IsEmbeded屬性。要使用字體的子集,請使用IsSubset屬性。以下代碼段顯示瞭如何在PDF文件中嵌入字體。

// 文檔目錄的路徑。
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();

//載入現有的PDF文件
Document doc = new Document(dataDir + "input.pdf");

//遍歷所有頁面
foreach (Page page in doc.Pages)
{
    if (page.Resources.Fonts != null)
    {
        foreach (Aspose.Pdf.Text.Font pageFont in page.Resources.Fonts)
        {
            //檢查字體是否已經嵌入
            if (!pageFont.IsEmbedded)
                pageFont.IsEmbedded = true;
        }
    }

    // 檢查Form對象
    foreach (XForm form in page.Resources.Forms)
    {
        if (form.Resources.Fonts != null)
        {
            foreach (Aspose.Pdf.Text.Font formFont in form.Resources.Fonts)
            {
                //檢查字體是否嵌入
                if (!formFont.IsEmbedded)
                    formFont.IsEmbedded = true;
            }
        }
    }
}
dataDir = dataDir + "EmbedFont_out.pdf";
//保存PDF文檔
doc.Save(dataDir);

 

嵌入標準類型1字體

一些PDF文檔的字體來自特殊的Adobe字體集。該集合中的字體稱為“標準類型1字體”。這套字體包括14種字體,嵌入此類字體需要使用特殊標誌,即  Aspose.Pdf.Document.EmbedStandardFonts。以下是可用於獲取嵌入了所有字體(包括標準類型1字體)的文檔的代碼段:

//文檔目錄的路徑。
string dataDir = RunExamples.GetDataDir_AsposePdf_Text();
//載入現有的PDF文檔
Document pdfDocument = new Document(dataDir + "input.pdf");
// 設置文檔的EmbedStandardFonts屬性
pdfDocument.EmbedStandardFonts = true;
foreach (Aspose.Pdf.Page page in pdfDocument.Pages)
{
    if (page.Resources.Fonts != null)
    {
        foreach (Aspose.Pdf.Text.Font pageFont in page.Resources.Fonts)
        {
            //檢查字體是否已經嵌入
            if (!pageFont.IsEmbedded)
            {
                pageFont.IsEmbedded = true;
            }
        }
    }
}
pdfDocument.Save(dataDir + "EmbeddedFonts-updated_out.pdf");

 

創建PDF文件時嵌入字體

如果需要使用Adobe Reader支持的14種核心字體以外的其他字體,則必須在生成Pdf文件時嵌入字體說明。如果未嵌入字體信息,則Adobe Reader將在操作系統上安裝它,如果安裝在系統上,則會從操作系統中獲取它,否則它將根據Pdf中的字體描述符構造替代字體。

使用Font類的IsEmbedded屬性將字體信息嵌入到Pdf文件中。將此屬性的值設置為'True'會將完整的字體文件嵌入到Pdf中,因為它會增加Pdf文件的大小。以下是可用於將字體信息嵌入到Pdf中的代碼段。

//文檔目錄的路徑。
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();

//通過調用其空構造函數實例化Pdf對象
Aspose.Pdf.Document doc = new Aspose.Pdf.Document();

// 在Pdf對象中創建一個部分
Aspose.Pdf.Page page = doc.Pages.Add();

Aspose.Pdf.Text.TextFragment fragment = new Aspose.Pdf.Text.TextFragment("");

Aspose.Pdf.Text.TextSegment segment = new Aspose.Pdf.Text.TextSegment(" This is a sample text using Custom font.");
Aspose.Pdf.Text.TextState ts = new Aspose.Pdf.Text.TextState();
ts.Font = FontRepository.FindFont("Arial");
ts.Font.IsEmbedded = true;
segment.TextState = ts;
fragment.Segments.Add(segment);
page.Paragraphs.Add(fragment);

dataDir = dataDir + "EmbedFontWhileDocCreation_out.pdf";
//保存PDF文檔
doc.Save(dataDir);

如果您有任何疑問或需求,請隨時加入Aspose技術交流群(642018183)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Platform.runLater一些情況下沒有賦值到fx頁面上 採用task方式 ...
  • 以前寫過ASP.NET Core 2.x的REST API文章,今年再更新一下到3.0版本。 預備知識:ASP.NET Core 和 C# 以前寫過ASP.NET Core 2.x的REST API文章,今年再更新一下到3.0版本。 預備知識:ASP.NET Core 和 C# 工具:Visual ...
  • Moq 1 My Cases 1.1 簡單入門 2 Reference 2.1 Methods 2.2 Matching Arguments 2.3 Properties 2.4 Events 2.5 Callbacks 2.6 Verification 2.7 Customizing Mock B ...
  • 前兩篇簡單談了一些.Net Core的優勢以及機構設計的一些思路,這一篇開始,我們將從零開始搭建架構,底層我們將採用EF來訪問資料庫,所以這篇我們將貼一下EF常用操作的基類。 簡單介紹下一些類庫將要實現的功能: Business:業務實現層 Domains:實體(Model) Service:介面 ...
  • 我不想浪費大家的時間,直接奔主題了。 首先大家要明白,WPF跟Winform的區別,優點,缺點。 首先入門來講 Winform簡單點,WPF會難一點。所以第一次接觸C# 我推薦用Winform項目去學習。 WPF的優勢在於有模板的概念,首先動畫效果,或者複雜的佈局實現起來比較容易,缺點是代碼量大,不 ...
  • 一、Angel工作室簡單通用許可權系統簡介 AngelRM(Asp.net MVC Web api)是基於asp.net(C#)MVC+前端bootstrap+ztree+lodash+jquery技術,採用bootstrap為前臺開發展示UI,Web Api主要負責前端的邏輯交互,再結合jQuery ...
  • 轉自:http://www.maomao365.com/?p=6923 摘要: 在sql腳本的編寫中,我們經常使用sql腳本print消息,作為輸出測試, 通過獲取print消息,我們可以快速獲取程式中的錯誤信息,下文講述通過 SqlInfoMessageEventHandler 獲取print信息 ...
  • 場景 DevExpress的TreeList實現節點上添加自定義右鍵菜單並實現刪除節點功能: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102551175 在上面已經實現自定義右鍵菜單刪除樹節點,這裡要實現自定義右鍵菜單實現 ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...