【C#/VB.NET】 將PDF轉為SVG/Image, SVG/Image轉PDF

2022-06-16 12:02:44

SVG是一種圖形檔案格式,它的英文全稱為Scalable Vector Graphics,意思為可縮放的向量圖形。它在放大或者改變尺寸的情況下其圖形質量不會有所損失,且與 JPG 和 GIF 影象比起來,尺寸更小,且可壓縮性更強。本文將介紹如何實現將PDF檔案與SVG/Image相互轉換的方法。經過綜合對比之後,最後篩選出這一方法。此方法操作起來比較方便且程式碼量較少。下面是我整理的詳細步驟及C#/VB.NET程式碼供大家參考。

 

類庫引入及程式碼思路:

本次功能測試中,使用到的是​ ​ Free Spire.PDF for .NET​​。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.2.0

將PDF轉為SVG格式

具體步驟:

  • 建立 PdfDocument 類的物件。
  • 呼叫 PdfDocument.LoadFromFile() 方法載入 PDF 檔案。
  • 通過 PdfDocument.SaveToFile() 方法儲存為 SVG 格式。

完整程式碼:

【C#】

using System;
using Spire.Pdf;


namespace PdfToSVG
{
    class Program
    {
        static void Main(string[] args)
        {
            
            //新建並載入PDF檔案
            PdfDocument doc = new PdfDocument();
            doc.LoadFromFile("Sample.pdf");

            //儲存為SVG格式
            doc.SaveToFile("ToSVG-result.svg", FileFormat.SVG);
            doc.Close();
          
        }
    }
}

【VB.NET】

Imports System
Imports Spire.Pdf

Namespace PdfToSVG
    
    Class Program
        
        Private Shared Sub Main(ByVal args() As String)
            '新建並載入PDF檔案
            Dim doc As PdfDocument = New PdfDocument
            doc.LoadFromFile("Sample.pdf")
            '儲存為SVG格式
            doc.SaveToFile("ToSVG-result.svg", FileFormat.SVG)
            doc.Close
        End Sub
    End Class
End Namespace

效果圖

將SVG轉為PDF格式

具體步驟:

  • 建立一個 PdfDocument 物件。
  • 用PdfDocument.LoadFromSvg()方法載入SVG檔案
  • 用PdfDocument.SaveToFile()方法儲存為PDF檔案

完整程式碼:

【C#】

using Spire.Pdf;
using System;


namespace SVGToPdf
{
    class Program
    {
        static void Main(string[] args)
        {
            //建立一個 PdfDocument 物件.
            PdfDocument doc = new PdfDocument();

            //載入檔案.
            doc.LoadFromSvg("ToSVG-result.svg");

            //儲存檔案.
            String result = "SVgToPDF_out.pdf";
            doc.SaveToFile(result);


        }
    }
}

【VB.NET】

Imports Spire.Pdf
Imports System

Namespace SVGToPdf
    
    Class Program
        
        Private Shared Sub Main(ByVal args() As String)
            '建立一個 PdfDocument 物件.
            Dim doc As PdfDocument = New PdfDocument
            '載入檔案.
            doc.LoadFromSvg("ToSVG-result.svg")
            '儲存檔案
            Dim result As String = "SVgToPDF_out.pdf"
            doc.SaveToFile(result)
        End Sub
    End Class
End Namespace

效果圖:

將PDF轉為影象

具體步驟:

  • 新增PDF檔案
  • 用PdfDocument.LoadFromFile()方法載入PDF檔案
  • 用Image.Save()方法儲存為圖片

完整程式碼:

【C#】

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


namespace ToImage
{
    class Program
    {
        static void Main(string[] args)
        {
            

            //新建並載入PDF檔案
            PdfDocument doc = new PdfDocument();
            doc.LoadFromFile("Sample1.pdf");

            //儲存為圖片
            for (int i = 0; i < doc.Pages.Count; i++)
            {
                String fileName = String.Format("ToImage-img-{0}.png", i);
                using (Image image = doc.SaveAsImage(i, 300, 300))
                {
                    image.Save(fileName, System.Drawing.Imaging.ImageFormat.Png);                 
                }
            }

            doc.Close();
        }
    }
}

【VB.NET】

Imports System
Imports System.Drawing
Imports Spire.Pdf

Namespace ToImage
    
    Class Program
        
        Private Shared Sub Main(ByVal args() As String)
            '新建並載入PDF檔案
            Dim doc As PdfDocument = New PdfDocument
            doc.LoadFromFile("Sample1.pdf")
            '儲存為圖片
            Dim i As Integer = 0
            Do While (i < doc.Pages.Count)
                Dim fileName As String = String.Format("ToImage-img-{0}.png", i)
                Dim image As Image = doc.SaveAsImage(i, 300, 300)
                image.Save(fileName, System.Drawing.Imaging.ImageFormat.Png)
                i = (i + 1)
            Loop
            
            doc.Close
        End Sub
    End Class
End Namespace

效果圖:

將影象轉為PDF格式

具體步驟:

  • 建立一個新增了section和頁面的 pdf 檔案。
  • 用PdfImage.FromFile()方法載入圖片
  • 在 PDF 中設定影象的顯示位置和大小
  • 通過PdfImage.PhysicalDimension屬性獲取圖片大小
  • 使用 PdfPage.Canvas.DrawImage() 方法在第一頁 (0, 30) 處繪製 PdfImage 物件
  • 使用 PdfDocument.SaveToFile() 方法將檔案儲存為 PDF 檔案

完整程式碼:

C#

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

namespace ImageToPdf
{
    class Program
    {
        static void Main(string[] args)
        {
            //建立一個新增了section和頁面的 pdf 檔案.
            PdfDocument pdf = new PdfDocument();
            PdfSection section = pdf.Sections.Add();
            PdfPageBase page = pdf.Pages.Add();

            //載入圖片
            PdfImage image = PdfImage.FromFile("image5.png");
            //在 PDF 中設定影象的顯示位置和大小
            //調整圖片大小以適合頁面寬度
            float widthFitRate = image.PhysicalDimension.Width / page.Canvas.ClientSize.Width;
            float heightFitRate = image.PhysicalDimension.Height / page.Canvas.ClientSize.Height;
            float fitRate = Math.Max(widthFitRate, heightFitRate);
            //獲取圖片大小 
            float fitWidth = image.PhysicalDimension.Width / fitRate;
            float fitHeight = image.PhysicalDimension.Height / fitRate;
            //繪圖
            page.Canvas.DrawImage(image, 0, 30, fitWidth, fitHeight);

            string output = "image.pdf";

            pdf.SaveToFile(output);


        }
    }
}

【VB.NET】

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

Namespace ImageToPdf
    
    Class Program
        
        Private Shared Sub Main(ByVal args() As String)
            ' 建立一個新增了section和頁面的 pdf 檔案.
            Dim pdf As PdfDocument = New PdfDocument
            Dim section As PdfSection = pdf.Sections.Add
            Dim page As PdfPageBase = pdf.Pages.Add
            '載入圖片
            Dim image As PdfImage = PdfImage.FromFile("image5.png")
            '在 PDF 中設定影象的顯示位置和大小
            '調整圖片大小以適合頁面寬度
            Dim widthFitRate As Single = (image.PhysicalDimension.Width / page.Canvas.ClientSize.Width)
            Dim heightFitRate As Single = (image.PhysicalDimension.Height / page.Canvas.ClientSize.Height)
            Dim fitRate As Single = Math.Max(widthFitRate, heightFitRate)
            ' 獲取圖片大小
            Dim fitWidth As Single = (image.PhysicalDimension.Width / fitRate)
            Dim fitHeight As Single = (image.PhysicalDimension.Height / fitRate)
            '繪圖
            page.Canvas.DrawImage(image, 0, 30, fitWidth, fitHeight)
            Dim output As String = "image.pdf"
            pdf.SaveToFile(output)
        End Sub
    End Class
End Namespace

效果圖:

注意:測試程式碼中的檔案路徑為程式Debug路徑,僅供參考,檔案路徑可自定義為其他路徑。