Spire.PDF for .NET【文档操作】演示:在 PDF 中添加、隐藏或删除图层

PDF 图层是一种将 PDF 文件的内容按图层排列的功能,允许用户在同一个 PDF 文件中选择性地将某些内容设置为可见,将其他内容设置为不可见。PDF 图层是分层艺术品、地图和 CAD 图纸中使用的常见元素。本文将演示如何使用Spire.PDF for .NET以编程方式在 PDF 文件中添加、隐藏或删除图层。

Spire.PDF for .NET 是一款独立 PDF 控件,用于 .NET 程序中创建、编辑和操作 PDF 文档。使用 Spire.PDF 类库,开发人员可以新建一个 PDF 文档或者对现有的 PDF 文档进行处理,且无需安装 Adobe Acrobat。

E-iceblue 功能类库Spire 系列文档处理组件均由中国本土团队研发,不依赖第三方软件,不受其他国家的技术或法律法规限制,同时适配国产操作系统如中科方德、中标麒麟等,兼容国产文档处理软件 WPS(如 .wps/.et/.dps 等格式

Spire.PDF for.net下载   Spire.PDF for java下载

安装 Spire.PDF for .NET

首先,您需要将 Spire.PDF for.NET 包中包含的 DLL 文件作为引用添加到您的 .NET 项目中。 可以从此链接下载 DLL 文件,也可以通过NuGet安装。

PM> Install-Package Spire.PDF
使用 C# 和 VB.NET 向 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#】

using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Graphics.Layer;
using System.Drawing;namespace AddLayersToPdf
{
class Program
{
static void Main(string[] args)
{
//Create a PdfDocument instance and load a sample PDF file
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile(@"C:\Users\Administrator\Desktop\Sample.pdf");//Invoke AddLayerWatermark method to add a watermark layer
AddLayerWatermark(pdf);//Invoke AddLayerHeader method to add a header layer
AddLayerHeader(pdf);//Save to file
pdf.SaveToFile("AddLayers.pdf");
pdf.Close();
}private static void AddLayerWatermark(PdfDocument doc)
{
//Create a layer named "Watermark"
PdfLayer layer = doc.Layers.AddLayer("Watermark");//Create a font
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 48), true);//Specify the watermark text
string watermarkText = "CONFIDENTIAL";//Get text size
SizeF fontSize = font.MeasureString(watermarkText);//Calculate two offsets
float offset1 = (float)(fontSize.Width * System.Math.Sqrt(2) / 4);
float offset2 = (float)(fontSize.Height * System.Math.Sqrt(2) / 4);//Get page count
int pageCount = doc.Pages.Count;//Declare two variables
PdfPageBase page;
PdfCanvas canvas;//Loop through the pages
for (int i = 0; (i < pageCount); i++)
{
page = doc.Pages[i];//Create a canvas from layer
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);//Draw sting on the canvas of layer
canvas.DrawString(watermarkText, font, PdfBrushes.DarkBlue, 0, 0);
}
}
private static void AddLayerHeader(PdfDocument doc)
{
// Create a layer named "Header"
PdfLayer layer = doc.Layers.AddLayer("Header");//Get page size
SizeF size = doc.Pages[0].Size;//Specify the initial values of X and y
float x = 90;
float y = 40;//Get page count
int pageCount = doc.Pages.Count;//Declare two variables
PdfPageBase page;
PdfCanvas canvas;//Loop through the pages
for (int i = 0; (i < pageCount); i++)
{
//Draw an image on the layer
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);//Draw a line on the layer
PdfPen pen = new PdfPen(PdfBrushes.DarkGray, 2);
canvas.DrawLine(pen, x, (y + (height + 5)), (size.Width - x), (y + (height + 2)));
}
}
}
}

【VB.NET】

Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports Spire.Pdf.Graphics.Layer
Imports System.DrawingNamespace AddLayersToPdf
Class Program
Private Shared Sub Main(ByVal args() As String)'Create a PdfDocument instance and load a sample PDF file
Dim pdf As PdfDocument = New PdfDocument
pdf.LoadFromFile("C:\Users\Administrator\Desktop\Sample.pdf")'Invoke AddLayerWatermark method to add a watermark layer
Program.AddLayerWatermark(pdf)'Invoke AddLayerHeader method to add a header layer
Program.AddLayerHeader(pdf)'Save to file
pdf.SaveToFile("AddLayers.pdf")
pdf.Close()
End SubPrivate Shared Sub AddLayerWatermark(ByVal doc As PdfDocument)'Create a layer named "Watermark"
Dim layer As PdfLayer = doc.Layers.AddLayer("Watermark")'Create a font
Dim font As PdfTrueTypeFont = New PdfTrueTypeFont(New Font("Arial", 48), True)'Specify the watermark text
Dim watermarkText As String = "CONFIDENTIAL"'Get text size
Dim fontSize As SizeF = font.MeasureString(watermarkText)'Calculate two offsets
Dim offset1 As Single = CSng((fontSize.Width * System.Math.Sqrt(2) / 4))
Dim offset2 As Single = CSng((fontSize.Height * System.Math.Sqrt(2) / 4))'Get page count
Dim pageCount As Integer = doc.Pages.Count'Declare two variables
Dim page As PdfPageBase
Dim canvas As PdfCanvas'Loop through the pages
Dim i As Integer = 0
While (i < pageCount)
page = doc.Pages(i)'Create a canvas from layer
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)'Draw sting on the canvas of layer
canvas.DrawString(watermarkText, font, PdfBrushes.DarkBlue, 0, 0)
i = (i + 1)
i += 1
End While
End SubPrivate Shared Sub AddLayerHeader(ByVal doc As PdfDocument)' Create a layer named "Header"
Dim layer As PdfLayer = doc.Layers.AddLayer("Header")'Get page size
Dim size As SizeF = doc.Pages(0).Size'Specify the initial values of X and y
Dim x As Single = 90
Dim y As Single = 40'Get page count
Dim pageCount As Integer = doc.Pages.Count'Declare two variables
Dim page As PdfPageBase
Dim canvas As PdfCanvas'Loop through the pages
Dim i As Integer = 0
While (i < pageCount)'Draw an image on the layer
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)'Draw a line on the layer
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

C#/VB.NET:在 PDF 中添加、隐藏或删除图层

在 C# 和 VB.NET 中设置 PDF 文档中图层的可见性

要设置现有图层的可见性,您需要使用PdfDocument.Layers属性通过其索引或名称获取指定的图层,然后使用PdfLayer.Visibility属性显示或隐藏该图层。详细步骤如下。

  • 创建一个PdfDocument实例。
  • 使用PdfDocument.LoadFromFile()方法加载示例 PDF 文档。
  • 使用PdfDocument.Layers.Visibility属性设置指定图层的可见性。
  • 使用PdfDocument.SaveToFile()方法保存结果文档。

【C#】

using Spire.Pdf;
using Spire.Pdf.Graphics.Layer;namespace HideLayer
{
class Program
{
static void Main(string[] args)
{
//Create a PdfDocument instance
PdfDocument pdf = new PdfDocument();//Load a sample PDF document
pdf.LoadFromFile("AddLayers.pdf");//Hide a specified layer by index
pdf.Layers[0].Visibility = PdfVisibility.Off;//Hide a specified layer by name
//pdf.Layers["Watermark"].Visibility = PdfVisibility.Off;//Save the result document
pdf.SaveToFile("HideLayer.pdf");
}
}
}

【VB.NET】

Imports Spire.Pdf
Imports Spire.Pdf.Graphics.LayerNamespace HideLayer
Class Program
Private Shared Sub Main(ByVal args() As String)'Create a PdfDocument instance
Dim pdf As PdfDocument = New PdfDocument'Load a sample PDF document
pdf.LoadFromFile("AddLayers.pdf")'Hide a specified layer by index
pdf.Layers(0).Visibility = PdfVisibility.Off'Hide a specified layer by name
'pdf.Layers["Watermark"].Visibility = PdfVisibility.Off;'Save the result document
pdf.SaveToFile("HideLayer.pdf")
End Sub
End Class
End Namespace

C#/VB.NET:在 PDF 中添加、隐藏或删除图层

使用 C# 和 VB.NET 删除 PDF 文档中的图层

Spire.PDF for .NET 还允许您使用PdfDocument.Layers.RemoveLayer(String)方法按名称删除现有图层。但请注意,PDF 图层的名称可能不是唯一的,此方法将删除所有具有相同名称的 PDF 图层。详细步骤如下。

  • 创建一个PdfDocument实例。
  • 使用PdfDocument.LoadFromFile()方法加载示例 PDF 文档。
  • 使用PdfDocument.Layers.RemoveLayer(String)方法根据名称删除指定图层。
  • 使用PdfDocument.SaveToFile()方法保存结果文档。

【C#】

using Spire.Pdf;namespace DeleteLayer
{
class Program
{
static void Main(string[] args)
{
//Create a PdfDocument instance
PdfDocument pdf = new PdfDocument();//Load a sample PDF document
pdf.LoadFromFile("AddLayers.pdf");//Remove a layer by name
pdf.Layers.RemoveLayer(("Watermark"));//Save the result document
pdf.SaveToFile("DeleteLayer.pdf", FileFormat.PDF);
}
}
}

【VB.NET】

Imports Spire.PdfNamespace DeleteLayer
Class Program
Private Shared Sub Main(ByVal args() As String)
'Create a PdfDocument instance
Dim pdf As PdfDocument = New PdfDocument'Load a sample PDF document
pdf.LoadFromFile("AddLayers.pdf")'Remove a layer by name
pdf.Layers.RemoveLayer("Watermark")'Save the result document
pdf.SaveToFile("DeleteLayer.pdf", FileFormat.PDF)
End Sub
End Class
End Namespace

C#/VB.NET:在 PDF 中添加、隐藏或删除图层

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/50022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分类常用的评价指标-二分类/多分类

二分类常用的性能度量指标 精确率、召回率、F1、TPR、FPR、AUC、PR曲线、ROC曲线、混淆矩阵 「精确率」查准率 PrecisionTP/(TPFP) 「召回率」查全率RecallTP/(TPFN) 「真正例率」即为正例被判断为正例的概率TPRTP/(TPFN) 「假正例率」即为反例被判断为正例的概率FPRFP/(TNFP)…

唯众物联网(IOT)全功能综合实训教学解决方案

一、引言 在信息技术日新月异的今天&#xff0c;物联网&#xff08;IoT&#xff09;作为推动数字化转型的关键力量&#xff0c;其触角已延伸至我们生活的方方面面&#xff0c;深刻地重塑了工作模式、生活习惯乃至社会结构的每一个角落。面对这一前所未有的变革浪潮&#xff0c…

Java的类加载机制

Java的类加载机制是指将类的字节码文件&#xff08;.class文件&#xff09;加载到JVM中并将其转换为Class对象的过程。这个过程由类加载器&#xff08;ClassLoader&#xff09;完成。Java的类加载机制具有动态性和灵活性&#xff0c;使得Java能够支持动态加载类、实现模块化开发…

day4 vue2以及ElementUI

创建vue2项目 可能用到的命令行们 vue create 项目名称 // 创建项目 cd 项目名称 // 只有进入项目下&#xff0c;才能运行 npm run serve // 运行项目 D: //切换盘符 更改 Vue项目的端口配置 基础语法 项目创建完成之后&#xff0c;会有一个组件HelloWorld.vue&#xff0c;…

推动智慧交通建设,边缘计算赋能交通信号灯数据处理与决策能力

随着智慧城市建设的快速发展&#xff0c;智慧交通已成为城市发展的重要组成项目。智慧交通旨在通过大数据、人工智能、物联网等先进技术&#xff0c;实现交通系统的全面感知、智能分析、主动服务和协同管理。边缘计算在交通信号灯物联网应用中展现了交通信号灯数据处理与决策能…

手机怎么设置不同的ip地址

在数字化日益深入的今天&#xff0c;智能手机已成为我们生活、工作和学习中不可或缺的设备。然而&#xff0c;随着网络应用的广泛和深入&#xff0c;我们有时需要为手机设置不同的IP地址来满足特定需求。比如&#xff0c;避免网络限制、提高网络安全、或者进行网络测试等。本文…

内网对抗-隧道技术篇防火墙组策略HTTP反向SSH转发出网穿透CrossC2解决方案

知识点&#xff1a; 1、C2/C2上线-CrossC2插件-多系统平台支持 2、隧道技术篇-应用层-SSH协议-判断&封装&建立&穿透 3、隧道技术篇-应用层-HTTP协议-判断&封装&建立&穿透隧道技术主要解决网络通讯问题&#xff1a;遇到防火墙就用隧道技术&#xff0c;…

Ubuntu设置网络

进入网络配置文件夹 cd /etc/netplan 使用 vim 打开下的配置文件 打开后的配置 配置说明&#xff1a; network:# 网络配置部分ethernets:# 配置名为ens33的以太网接口ens33:addresses:# 为ens33接口分配IP地址192.168.220.30&#xff0c;子网掩码为24位- 192.168.220.30/24n…

软考-软件设计师(3)-数据结构与算法:树、图、队列、查找算法、排序算法、霍夫曼编码/树、环路复杂性、算法/时间复杂度/空间复杂度等高频考点

场景 软考-软件设计师-数据结构与算法模块高频考点整理。 以下为高频考点、知识点汇总,不代表该模块所有知识点覆盖,请以官方教程提纲为准。 注: 博客:霸道流氓气质-CSDN博客 实现 知识点 树:节点的度、树的度、深度、高度、满二叉树、完全二叉树、平衡二叉树、B树…

利用宝塔部署前后端分离springboot项目,以EasyPan为例

前置准备 服务器购买 请参考其他教程&#xff0c;这里不再赘述。 项目 部署到服务器前请确保项目在本地运行正常 安装宝塔面板 宝塔Linux面板的安装配置以及基本使用教程&#xff08;超详细&#xff09;_宝塔linux面板新手使用教程-CSDN博客 sql文件 IDEA中怎样导出数据…

删除的视频怎样才能恢复?详尽指南

在日常生活中&#xff0c;我们有时会不小心删除一些重要的视频文件&#xff0c;或者在整理存储空间时不慎丢失了珍贵的记忆片段。这时候&#xff0c;我们可以通过一些数据恢复工具和技巧&#xff0c;找回这些被删除的视频。本文将详细介绍几种常见且有效的视频恢复方法&#xf…

Vue与ASP.NET Core Web Api设置localhost与本地ip地址皆可访问

Vue的设置 我们创建并启动一个Vue项目&#xff0c;如下所示&#xff1a; 打开cmd&#xff0c;输入ipconfig查询本地ip地址&#xff1a; 想通过本地ip地址访问&#xff0c;把localhost改成本地ip地址&#xff0c;发现打不开&#xff1a; 这是因为Vue项目默认只有localhost&…

【Linux】进程IO|重定向|缓冲区|dup2|dup|用户级缓冲区|模拟缓冲区

目录 前言 重定向 实验一 为什么log.txt文件的文件描述符是1 为什么向stdout打印的信息也出现在文件中 实验二 用户级缓冲区 为什么要有用户级缓冲区 系统调用 dup 为什么close(fd1)之后还能向log.txt写入数据&#xff1f; dup2 缓冲区 观察现象 测试1 测试2 测…

C++初阶学习第三弹——类与对象(上)

目录 一.初步认知对象 二.类的基本组成、 1.类的定义 2.类的访问限定符及封装 3.类的作用域 4、类的大小的计算 5.this指针 三.总结 一.初步认知对象 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。…

Linux下普通用户无法执行sudo指令

当执行sudo指令时出现&#xff1a; xxx&#xff08;普通用户名字&#xff09; is not in the sudoers file 说明在/etc/sudoers文件中没有把xxx加入到可执行sudo指令的名单中&#xff0c;因此需要修改sudoers文件。 解决方法&#xff1a;1、vim /etc/sudoers &#xff08;要…

什么是hdfs如何使用驱动程序访问hdfs

目录 什么是hdfs 主要特点包括&#xff1a; 架构组成&#xff1a; 应用场景&#xff1a; 如何使用驱动程序访问hdfs 准备工作环境&#xff1a; 启动 Hadoop 服务 可能遇到的问题&#xff1a; ssh验证失败 验证Hadoop服务 对hdfs进行文件操作 什么是hdfs HDFS&#x…

vite5+vue3开发阅读APP实战笔记20240725

目前界面长成这样&#xff1a; 配置别名 修改vite.config.js import {defineConfig} from vite import vue from vitejs/plugin-vue import path from "path"// https://vitejs.dev/config/ export default defineConfig({server: {open: true,port: 8088,},plug…

论文阅读【检测】:商汤 ICLR2021 | Deformable DETR

文章目录 论文地址AbstractMotivation技术细节多尺度backbone特征MSDeformAttention 小结 论文地址 Deformable DETR 推荐视频&#xff1a;bilibili Abstract DETR消除对目标检测中许多手工设计的组件的需求&#xff0c;同时表现出良好的性能。然而&#xff0c;由于Transfor…

Odoo 17 仪表盘开发指南:打造高效的数据可视化中心

在现代企业管理中,数据驱动的决策至关重要。Odoo 17 提供了强大的平台来构建自定义仪表板, 适用于数据统计、工作台、驾驶舱、数据可视化等场景,以便用户能够一目了然地监控关键指标并做出及时反应。本文将介绍如何在 Odoo 17 中开发一个灵活且高度定制化的仪表盘系统,包括…

12_TypeScript 模块 以及 模块化封装DB 库

TypeScript 模块 1、模块中暴露方法12、模块中暴露方法23、模块中暴露方法34、封装[上一节的db 库](https://blog.csdn.net/qq_46143850/article/details/140664100)5、TypeScript 命名空间 模块的概念&#xff08;官方&#xff09;&#xff1a; 关于术语的一点说明&#xff1a…