【C#/VB.NET】 将PDF转为SVG/Image, SVG/Image转PDF

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路径,仅供参考,文件路径可自定义为其他路径。