PDF 图层是一种将 PDF 文件的内容分层排列的功能,它允许用户在同一个 PDF 文件中有选择地设置一些内容可见,而另一些内容不可见。图层是分层图稿、地图和 CAD 绘图中常用的元素。本文将演示如何使用 Spire.PDF for .NET 以编程方式添加、隐藏或删除 PDF 文件中的图层。
安装 Spire.PDF for .NET
首先,您需要添加 Spire.PDF for .NET 包中包含的 DLL 文件作为 .NET 项目中的引用。DLL 文件可以从此链接下载或通过 NuGet 安装。
PM> Install-Package Spire.PDF
向 PDF 文档添加图层
Spire.PDF for .NET 提供 PdfDocument.Layers.AddLayer() 方法在 PDF 文档中添加图层,然后您可以在 PDF 图层上绘制文本、线条、图像或形状。详细步骤如下。
- 创建一个 PdfDocument 实例。
- 使用 PdfDocument.LoadFromFile() 方法加载示例 PDF 文件。
- 使用 PdfDocument.Layers.AddLayer(String) 方法在 PDF 中添加具有指定名称的图层。 或者您也可以使用 PdfDocument.Layers.AddLayer(String, PdfVisibility) 方法添加图层时设置图层的可见性。
- 使用 PdfLayer.CreateGraphics() 方法为图层创建画布。
- 在画布上绘制文本、图像或其他元素。
- 使用 PdfDocument.SaveToFile() 方法保存结果文档。
- C#
- VB.NET
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Graphics.Layer;
using System.Drawing;
namespace AddLayersToPdf
{
class Program
{
static void Main(string[] args)
{
//创建 PdfDocument 实例并加载示例 PDF 文件
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile(@"C:\Users\Administrator\Desktop\示例文档.pdf");
//调用AddLayerWatermark方法添加水印层
AddLayerWatermark(pdf);
//调用 AddLayerHeader 方法添加表头层
AddLayerHeader(pdf);
//保存文件
pdf.SaveToFile("添加图层.pdf");
pdf.Close();
}
private static void AddLayerWatermark(PdfDocument doc)
{
//创建一个名为“水印”的图层
PdfLayer layer = doc.Layers.AddLayer("水印");
//创建字体
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 48), true);
//指定水印文字
string watermarkText = "内部使用";
//获取文字大小
SizeF fontSize = font.MeasureString(watermarkText);
//计算两个偏移量
float offset1 = (float)(fontSize.Width * System.Math.Sqrt(2) / 4);
float offset2 = (float)(fontSize.Height * System.Math.Sqrt(2) / 4);
//获取页数
int pageCount = doc.Pages.Count;
//声明两个变量
PdfPageBase page;
PdfCanvas canvas;
//循环遍历页面
for (int i = 0; (i < pageCount); i++)
{
page = doc.Pages[i];
//从图层创建画布
canvas = layer.CreateGraphics(page.Canvas);
canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2);
canvas.SetTransparency(0.4f);
canvas.RotateTransform(-45);
//在图层的画布上绘制字符串
canvas.DrawString(watermarkText, font, PdfBrushes.DarkBlue, 0, 0);
}
}
private static void AddLayerHeader(PdfDocument doc)
{
//创建一个名为 "页眉" 的图层
PdfLayer layer = doc.Layers.AddLayer("页眉");
//获取页面大小
SizeF size = doc.Pages[0].Size;
//指定 X 和 y 的初始值
float x = 90;
float y = 40;
//获取页数
int pageCount = doc.Pages.Count;
//声明两个变量
PdfPageBase page;
PdfCanvas canvas;
//循环遍历页面
for (int i = 0; (i < pageCount); i++)
{
//在图层上绘制图像
PdfImage pdfImage = PdfImage.FromFile(@"C:\Users\Administrator\Desktop\img.jpg");
float width = pdfImage.Width;
float height = pdfImage.Height;
page = doc.Pages[i];
canvas = layer.CreateGraphics(page.Canvas);
canvas.DrawImage(pdfImage, x, y, width, height);
//在图层上绘制一条线
PdfPen pen = new PdfPen(PdfBrushes.DarkGray, 2);
canvas.DrawLine(pen, x, (y + (height + 5)), (size.Width - x), (y + (height + 2)));
}
}
}
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports Spire.Pdf.Graphics.Layer
Imports System.Drawing
Namespace AddLayersToPdf
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'创建 PdfDocument 实例并加载示例 PDF 文件
Dim pdf As PdfDocument = New PdfDocument()
pdf.LoadFromFile("C:\Users\Administrator\Desktop\示例文档.pdf")
'调用AddLayerWatermark方法添加水印层
Program.AddLayerWatermark(pdf)
'调用 AddLayerHeader 方法添加表头层
Program.AddLayerHeader(pdf)
'保存文件
pdf.SaveToFile("添加图层.pdf")
pdf.Close()
End Sub
Private Shared Sub AddLayerWatermark(ByVal doc As PdfDocument)
'创建一个名为“水印”的图层
Dim layer As PdfLayer = doc.Layers.AddLayer("水印")
'创建字体
Dim font As PdfTrueTypeFont = New PdfTrueTypeFont(New Font("宋体", 48), True)
'指定水印文字
Dim watermarkText = "内部使用"
'获取文字大小
Dim fontSize As SizeF = font.MeasureString(watermarkText)
'计算两个偏移量
Dim offset1 As Single = fontSize.Width * Math.Sqrt(2) / 4
Dim offset2 As Single = fontSize.Height * Math.Sqrt(2) / 4
'获取页数
Dim pageCount As Integer = doc.Pages.Count
'声明两个变量
Dim page As PdfPageBase
Dim canvas As PdfCanvas
'循环遍历页面
Dim i = 0
While i < pageCount
page = doc.Pages(i)
'从图层创建画布
canvas = layer.CreateGraphics(page.Canvas)
canvas.TranslateTransform(page.Canvas.Size.Width / 2 - offset1 - offset2, page.Canvas.Size.Height / 2 + offset1 - offset2)
canvas.SetTransparency(0.4F)
canvas.RotateTransform(-45)
'在图层的画布上绘制字符串
canvas.DrawString(watermarkText, font, PdfBrushes.DarkBlue, 0, 0)
i += 1
End While
End Sub
Private Shared Sub AddLayerHeader(ByVal doc As PdfDocument)
'创建一个名为 "页眉" 的图层
Dim layer As PdfLayer = doc.Layers.AddLayer("页眉")
'获取页面大小
Dim size As SizeF = doc.Pages(0).Size
'指定 X 和 y 的初始值
Dim x As Single = 90
Dim y As Single = 40
'获取页数
Dim pageCount As Integer = doc.Pages.Count
'声明两个变量
Dim page As PdfPageBase
Dim canvas As PdfCanvas
'循环遍历页面
Dim i = 0
While i < pageCount
'在图层上绘制图像
Dim pdfImage As PdfImage = PdfImage.FromFile("C:\Users\Administrator\Desktop\img.jpg")
Dim width As Single = pdfImage.Width
Dim height As Single = pdfImage.Height
page = doc.Pages(i)
canvas = layer.CreateGraphics(page.Canvas)
canvas.DrawImage(pdfImage, x, y, width, height)
'在图层上绘制一条线
Dim pen As PdfPen = New PdfPen(PdfBrushes.DarkGray, 2)
canvas.DrawLine(pen, x, y + (height + 5), size.Width - x, y + (height + 2))
i += 1
End While
End Sub
End Class
End Namespace
设置 PDF 文档中图层的可见性
要设置现有图层的可见性,您需要使用 PdfDocument.Layers 属性通过其索引或名称获取指定图层,然后使用 PdfLayer.Visibility 属性显示或隐藏该图层。详细步骤如下。
- 创建一个 PdfDocument 实例。
- 使用 PdfDocument.LoadFromFile() 方法加载示例 PDF 文档。
- 使用 PdfDocument.Layers.Visibility 属性设置指定图层的可见性。
- 使用 PdfDocument.SaveToFile() 方法保存结果文档。
- C#
- VB.NET
using Spire.Pdf;
using Spire.Pdf.Graphics.Layer;
namespace HideLayer
{
class Program
{
static void Main(string[] args)
{
//创建一个 PdfDocument 实例
PdfDocument pdf = new PdfDocument();
//加载示例 PDF 文档
pdf.LoadFromFile("添加图层.pdf");
//通过索引隐藏指定图层
pdf.Layers[0].Visibility = PdfVisibility.Off;
//按名称隐藏指定图层
//pdf.Layers["水印"].Visibility = PdfVisibility.Off;
//保存结果文档
pdf.SaveToFile("隐藏图层.pdf");
}
}
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics.Layer
Namespace HideLayer
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'创建一个 PdfDocument 实例
Dim pdf As PdfDocument = New PdfDocument()
'加载示例 PDF 文档
pdf.LoadFromFile("添加图层.pdf")
'通过索引隐藏指定图层
pdf.Layers(0).Visibility = PdfVisibility.Off
'按名称隐藏指定图层
'pdf.Layers["水印"].Visibility = PdfVisibility.Off;
'保存结果文档
pdf.SaveToFile("隐藏图层.pdf")
End Sub
End Class
End Namespace
删除 PDF 文档中的图层
Spire.PDF for .NET 还允许您使用 PdfDocument.Layers.RemoveLayer(String) 方法按名称删除现有层。但请注意,PDF 图层的名称可能不是唯一的,此方法将删除所有具有相同名称的 PDF 图层。详细步骤如下。
- 创建一个 PdfDocument 实例。
- 使用 PdfDocument.LoadFromFile() 方法加载示例 PDF 文档。
- 使用 PdfDocument.Layers.RemoveLayer(String) 方法按名称删除指定图层。
- 使用 PdfDocument.SaveToFile() 方法保存结果文档。
- C#
- VB.NET
using Spire.Pdf;
namespace DeleteLayer
{
class Program
{
static void Main(string[] args)
{
//创建一个 PdfDocument 实例
PdfDocument pdf = new PdfDocument();
//加载示例 PDF 文档
pdf.LoadFromFile("添加图层.pdf");
//按名称删除图层
pdf.Layers.RemoveLayer(("水印"));
//保存结果文档
pdf.SaveToFile("删除图层.pdf", FileFormat.PDF);
}
}
}
Imports Spire.Pdf
Namespace DeleteLayer
Friend Class Program
Private Shared Sub Main(ByVal args As String())
'创建一个 PdfDocument 实例
Dim pdf As PdfDocument = New PdfDocument()
'加载示例 PDF 文档
pdf.LoadFromFile("添加图层.pdf")
'按名称删除图层
pdf.Layers.RemoveLayer("水印")
'保存结果文档
pdf.SaveToFile("删除图层.pdf", FileFormat.PDF)
End Sub
End Class
End Namespace
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。