C#/VB.NET:如何將PDF轉為PDF/A

来源:https://www.cnblogs.com/Carina-baby/archive/2023/03/27/17261090.html
-Advertisement-
Play Games

PDF/A是一種ISO標準的PDF文件格式版本,是為長期保存文件而設計的。它提供了一種工具,使電子文件在長時間之後依然以一種保留其外觀的方式重現,而不管該文件是用什麼工具和系統創建、儲存或製作的。這種保留方式使PDF文件可自我持續。PDF/A通過嵌入在文檔自身內部顯示該文檔的信息(內容、顏色、字體、 ...


PDF/A是一種ISO標準的PDF文件格式版本,是為長期保存文件而設計的。它提供了一種工具,使電子文件在長時間之後依然以一種保留其外觀的方式重現,而不管該文件是用什麼工具和系統創建、儲存或製作的。這種保留方式使PDF文件可自我持續。PDF/A通過嵌入在文檔自身內部顯示該文檔的信息(內容、顏色、字體、圖像,等等),存儲這種自我持續。換句話說,PDF/A文件不要求任何附加的外部信息才能適當地顯示。本文將介紹如何通過C#/VB.NET代碼,以編程方式將PDF轉換為PDF/A-1A、2A、3A、1B、2B 和 3B相容的PDF。

程式環境:

本次測試時,在程式中引入 Free Spire.PDF.dll 文件。

方法1

​​Free Spire.PDF for .NET​​ 下載到本地,解壓,找到 BIN 文件夾下的 Spire.PDF.dll。然後在 Visual Studio 中打開“解決方案資源管理器”,滑鼠右鍵點擊“引用”,“添加引用”,將本地路徑 BIN 文件夾下的 dll 文件添加引用至程式。

方法2:

通過​NuGet​​安裝。可通過以下 2 種方法安裝:

  1. 可以在 Visual Studio 中打開“解決方案資源管理器”,滑鼠右鍵點擊“引用”,“管理 NuGet 包”,然後搜索“Free Spire.PDF”,點擊“安裝”。等待程式安裝完成。

  2. 將以下內容複製到 PM 控制台安裝。

Install-Package FreeSpire.PDF -Version 8.6.0

將PDF轉為PDF/A

將PDF轉換為PDF/A-1A、2A、3A、1B、2B 和 3B相容PDF的詳細步驟如下:

  • 指定輸入文件路徑和輸出文件夾
  • 創建一個 PdfStandardsConverter 實例並將輸入文件作為參數傳入。
  • 使用 PdfStandardsConverter.ToPdfA1A() 方法將輸入文件轉換為 PdfA1A 一致性級別。
  • 使用 PdfStandardsConverter.ToPdfA1B() 方法將輸入文件轉換為 PdfA1B 一致性級別。
  • 使用 PdfStandardsConverter.ToPdfA2A() 方法將輸入文件轉換為 PdfA2A 一致性級別。
  • 使用 PdfStandardsConverter.ToPdfA2B() 方法將輸入文件轉換為 PdfA2B 一致性級別。
  • 使用 PdfStandardsConverter.ToPdfA3A() 方法將輸入文件轉換為 PdfA3A 一致性級別。
  • 使用 PdfStandardsConverter.ToPdfA3B() 方法將輸入文件轉換為 PdfA3B 一致性級別。

完整代碼

【C#】

using System;
using Spire.Pdf.Conversion;

namespace ConvertPdf2PdfA
{
    class Program
    {
        static void Main(string[] args)
        {
            //指定輸入文檔路徑
            String inputFile = "成都第31屆世界大學生夏季運動會.pdf";

            //指定輸出文檔的存放文件夾
            String outputFolder = @"D:\VS2022項目\free PDF\bin\Debug\輸出結果\";

            //創建PdfStandardsConverter對象,傳入輸入文檔路徑
            PdfStandardsConverter converter = new PdfStandardsConverter(inputFile);

            //轉換為PdfA1A
            converter.ToPdfA1A(outputFolder + "ToPdfA1A.pdf");

            //轉換為PdfA1B
            converter.ToPdfA1B(outputFolder + "ToPdfA1B.pdf");

            //轉換為PdfA2A
            converter.ToPdfA2A(outputFolder + "ToPdfA2A.pdf");

            //轉換為PdfA2B
            converter.ToPdfA2B(outputFolder + "ToPdfA2B.pdf");

            //轉換為PdfA3A
            converter.ToPdfA3A(outputFolder + "ToPdfA3A.pdf");

            //轉換為PdfA3B
            converter.ToPdfA3B(outputFolder + "ToPdfA3B.pdf");
        }
    }
}

【VB.NET】

Imports Spire.Pdf.Conversion

Namespace ConvertPdf2PdfA
    Friend Class Program
        Private Shared Sub Main(ByVal args As String())
            '指定輸入文檔路徑
            Dim inputFile = "成都第31屆世界大學生夏季運動會.pdf"

            '指定輸出文檔的存放文件夾
            Dim outputFolder = "D:\VS2022項目\free PDF\bin\Debug\輸出結果\"

            '創建PdfStandardsConverter對象,傳入輸入文檔路徑
            Dim converter As PdfStandardsConverter = New PdfStandardsConverter(inputFile)

            '轉換為PdfA1A
            converter.ToPdfA1A(outputFolder & "ToPdfA1A.pdf")

            '轉換為PdfA1B
            converter.ToPdfA1B(outputFolder & "ToPdfA1B.pdf")

            '轉換為PdfA2A
            converter.ToPdfA2A(outputFolder & "ToPdfA2A.pdf")

            '轉換為PdfA2B
            converter.ToPdfA2B(outputFolder & "ToPdfA2B.pdf")

            '轉換為PdfA3A
            converter.ToPdfA3A(outputFolder & "ToPdfA3A.pdf")

            '轉換為PdfA3B
            converter.ToPdfA3B(outputFolder & "ToPdfA3B.pdf")
        End Sub
    End Class
End Namespace

效果圖

—本文完—


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

-Advertisement-
Play Games
更多相關文章
  • Spdlog 是一個快速、非同步的 C++ 日誌庫,被廣泛應用於 C++ 項目中。在這篇文章中,我們將探討 Spdlog 日誌庫的實現原理。 Spdlog 的結構 Spdlog 由五個主要組件構成:Loggers、Sinks、Formatters、Async Logger 和 Registry。每個組 ...
  • TiDB 基礎使用 TiDB dashboard使用 TiDB Dashboard 是 TiDB 自 4.0 版本起提供的圖形化界面,可用於監控及診斷 TiDB 集群。TiDB Dashboard 內置於 TiDB 的 PD 組件中,無需獨立部署。 集群概況 查看集群整體 QPS 數值、執行耗時、消 ...
  • python中index()、find()方法,具體內容如下: index() 方法檢測字元串中是否包含子字元串 str ,該方法與 python find()方法一樣,只不過如果str不在 string中會報一個異常。影響後面程式執行 index()方法語法:str.index(str, beg= ...
  • 基於.NET Core + Jquery實現文件斷點分片上傳 前言 該項目是基於.NET Core 和 Jquery實現的文件分片上傳,沒有經過測試,因為博主沒有那麼大的文件去測試,目前上傳2G左右的文件是沒有問題的。 使用到的技術 Redis緩存技術 Jquery ajax請求技術 為什麼要用到R ...
  • 1. 重寫和覆蓋的定義 1.1 重寫(override)的定義 在C#中,用override關鍵字來重寫一個父類中的虛方法或抽象方法。override關鍵字用於指示編譯器,我要用派生類中的一個方法,重寫基類中的同名方法。通過重寫基類中的方法,可以實現多態性。有關重寫與虛方法和抽象方法的詳細示例,可移 ...
  • 1. 多態性定義 C#中的多態性是OOP(面向對象編程)的一個基本概念,它允許一個對象在不同情況下表現出不同的行為,以增強代碼的可重用性和靈活性。 根據網上的教程,我們得知C#多態性分為兩類,靜態和動態。但實際上,C#沒有嚴格的靜態和動態多態性的分法。之所以這麼分,還是為了我們便於理解,我們沿用這個 ...
  • 1. 抽象方法與虛方法的區別 先說兩者最大的區別:抽象方法是需要子類去實現的。虛方法是已經實現了的,可以被子類覆蓋,也可以不覆蓋,取決於需求。因為抽象類無法實例化,所以抽象方法沒有辦法被調用,也就是說抽象方法永遠不可能被實現。 如果需要瞭解虛方法及抽象方法具體的定義和語句,請移步:C#多態性學習,虛 ...
  • 前段時間小編同事面試遇到了這個問題,由於同事比較菜並未很完美的完成這個問題,本文就替小編來解答一下。在C#中有多種方式類遍歷指定文件夾中的文件,本文將介紹三種方式。 一、使用Directory類的GetFiles方法: 示例代碼如下: string[] files = Directory.GetFi ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...