C#/VB.NET 合併PDF頁面

来源:https://www.cnblogs.com/Yesi/archive/2022/04/29/16206636.html
-Advertisement-
Play Games

本文以C#及vb.net代碼為例介紹如何來實現合併PDF頁面內容。本文中的合併並非將兩個文檔簡單合併為一個文檔,而是將多個頁面內容合併到一個頁面,目的是減少頁面上的空白區域,使頁面佈局更為緊湊、合理。下麵,將分別從兩個示例來展示合併,即: 從兩個PDF文檔頁面實現頁面合併 在同一個PDF文檔實現頁面 ...


本文以C#及vb.net代碼為例介紹如何來實現合併PDF頁面內容。本文中的合併並非將兩個文檔簡單合併為一個文檔,而是將多個頁面內容合併到一個頁面,目的是減少頁面上的空白區域,使頁面佈局更為緊湊、合理。下麵,將分別從兩個示例來展示合併,即:

  • 從兩個PDF文檔頁面實現頁面合併
  • 在同一個PDF文檔實現頁面合併

 

【程式環境】

方法1

在程式中引入Spire.Pdf.dll文件;將 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.2.0


 

【代碼示例】

1.從兩個PDF文檔頁面實現頁面合併

(合併前)需要將文件1的內容合併到文件2的第二頁空白處:

C#

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace MergePages
{
    class Program
    {
        static void Main(string[] args)
        {
            //載入兩個PDF文檔
            PdfDocument pdf1 = new PdfDocument();
            pdf1.LoadFromFile("test1.pdf");
            PdfDocument pdf2 = new PdfDocument();
            pdf2.LoadFromFile("test2.pdf");

            //創建模板
            PdfTemplate template = pdf1.Pages[0].CreateTemplate();

            //獲取文檔2中的第2頁
            PdfPageBase page2 = pdf2.Pages[1];
            //設置透明度
            page2.Canvas.SetTransparency(1f, 1f, PdfBlendMode.Overlay);
            //在頁面指定位置繪製模板
            page2.Canvas.DrawTemplate(template, new PointF(0, 300));  

            //保存文檔
            pdf2.SaveToFile("mergepages.pdf");
        }
    }
}

合併後的效果:

VB.NET

Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing

Namespace MergePages
    Class Program
        Private Shared Sub Main(args As String())
            '載入兩個PDF文檔
            Dim pdf1 As New PdfDocument()
            pdf1.LoadFromFile("test1.pdf")
            Dim pdf2 As New PdfDocument()
            pdf2.LoadFromFile("test2.pdf")

            '創建模板
            Dim template As PdfTemplate = pdf1.Pages(0).CreateTemplate()

            '獲取文檔2中的第2頁
            Dim page2 As PdfPageBase = pdf2.Pages(1)
            '設置透明度
            page2.Canvas.SetTransparency(1F, 1F, PdfBlendMode.Overlay)
            '在頁面指定位置繪製模板
            page2.Canvas.DrawTemplate(template, New PointF(0, 300))

            '保存文檔
            pdf2.SaveToFile("mergepages.pdf")
        End Sub
    End Class
End Namespace

2.在同一個PDF文檔實現頁面合併

(合併前)將同一個文檔中,第2頁中的內容繪製到第1頁空白處,並刪掉多餘的空白頁:

C#

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

namespace MergePage2
{
    class Program
    {
        static void Main(string[] args)
        {
            //載入PDF文檔
            PdfDocument pdf = new PdfDocument("sample.pdf");

            //創建模板
            PdfTemplate template = pdf.Pages[1].CreateTemplate();

            //獲取第一個頁面
            PdfPageBase page1 = pdf.Pages[0];

            //獲取第二個頁面
            PdfPageBase page2 = pdf.Pages[1];

            //設置透明度和重疊樣式 
            page2.Canvas.SetTransparency(1f, 1f, PdfBlendMode.Overlay);

            //將第二頁中的內容繪製到第一頁指定位置
            page1.Canvas.DrawTemplate(template, new PointF(0, 240));

            //刪除第二頁`
            pdf.Pages.RemoveAt(1);

            //保存文檔
            pdf.SaveToFile("MergePage2.pdf",FileFormat.PDF);
        }
    }
}

合併後的效果:

VB.NET

Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing

Namespace MergePage2
    Class Program
        Private Shared Sub Main(args As String())
            '載入PDF文檔
            Dim pdf As New PdfDocument("sample.pdf")

            '創建模板
            Dim template As PdfTemplate = pdf.Pages(1).CreateTemplate()

            '獲取第一個頁面
            Dim page1 As PdfPageBase = pdf.Pages(0)

            '獲取第二個頁面
            Dim page2 As PdfPageBase = pdf.Pages(1)

            '設置透明度和重疊樣式 
            page2.Canvas.SetTransparency(1F, 1F, PdfBlendMode.Overlay)

            '將第二頁中的內容繪製到第一頁指定位置
            page1.Canvas.DrawTemplate(template, New PointF(0, 240))

            '刪除第二頁`
            pdf.Pages.RemoveAt(1)

            '保存文檔
            pdf.SaveToFile("MergePage2.pdf", FileFormat.PDF)
        End Sub
    End Class
End Namespace

 

另推薦閱讀:

 

—END—

 


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

-Advertisement-
Play Games
更多相關文章
  • 最近正在學習回溯法,遇到的第一個問題就是n皇後問題,問題如下: 要求在一個n×n的棋盤上放置n個皇後,使得任意兩個皇後不在同一行或同一列或同一斜線上。 直接上代碼: #include<iostream> #include<math.h> using namespace std; void NQuee ...
  • POM :文件名稱是pom.xml ,  pom翻譯過來叫做項目對象模型,maven把一個項目當做一個模型使用 ...
  • 背景介紹 R和Python作為兩個開源、且容易上手的數據分析和繪圖工具,在科研中應用的比較廣泛。 在接下來的日子,我們圍繞Python進行繪圖和數據分析話題,寫一系列推文,事實上是我自己的一些學習筆記分享出來,為了我 方便查閱,也方便大家翻閱。 軟體介紹 [軟體名稱]:Anaconda | Spyd ...
  • 我們知道,頻繁操作資料庫會降低伺服器的系統性能,因此通常需要將頻繁訪問、更新的數據存入到緩存。Halo 項目也引入了緩存機制,且設置了多種實現方式,如自定義緩存、Redis、LevelDB 等,下麵我們分析一下緩存機制的實現過程。 ...
  • 適用 2022.1 【更新時間 2022-4-29】 引言 由於IDEA在2021.2.2以後我們不能再使用重置大法白嫖了。 為了打擊破解,Jetbrains煞費苦心,這次採用了JB賬號登陸,通過授權認證獲取免費試用資格(所以之前的無限重置的插件在今後的新版本中,將無法使用),以下整理了一個免JB註 ...
  • 前幾篇都是手動錄入或隨機函數產生的數據。實際有許多類型的文件,以及許多方法,用它們從文件中提取數據來圖形化。 比如之前python基礎(12)介紹打開文件的方式,可直接讀取文件中的數據,擴大了我們的數據來源。下麵詳細介紹從文件中載入數據。 一、使用內置的 csv 模塊載入CSV文件 CSV文件是一種 ...
  • 我前面幾篇隨筆介紹了關於幾篇關於SqlSugar的基礎封裝,已經可以直接應用在Winform項目開發上,並且基礎介面也通過了單元測試,同時測試通過了一些Winform功能頁面;本篇隨筆繼續深化應用開發,著手在在.net6框架的Web API上開發應用,也就是基於.net core的Web API應用... ...
  • 前言 一個項目上線了兩個月,除了一些反饋的優化和小Bug之外,項目一切順利;前期是屬於推廣階段,可能使用人員沒那麼多,當然對於項目部署肯定提前想到併發量了,所以早就把集群安排上,而且還在測試環境搞了一下壓測,絕對是沒得問題的;但是,就在兩個月後的一天,系統突然跑的比烏龜還慢,投訴開始就陸續反饋過來了 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...