Spire.PDF for .NET【文档操作】演示:查找并删除 PDF 中的空白页

PDF 中的空白页并不罕见,因为它们可能是作者故意留下的或在操作文档时意外添加的。当您阅读或打印文档时,这些空白页可能会很烦人,因此可能非常有必要将其删除。在本文中,您将了解如何使用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 等格式(qun:767755948 )

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

安装适用于 .NET 的 Spire.PDF

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

PM> Install-Package Spire.PDF
查找并删除 PDF 文档中的空白页

Spire.PDF for .NET 提供了方法PdfPageBase.IsBlank()来检测 PDF 页面是否绝对空白。但有些看起来空白的页面实际上包含白色图像,使用PdfPageBase.IsBlank()方法不会将这些页面视为空白。因此,有必要创建一个自定义方法IsImageBlank()与PdfPageBase.IsBlank()方法结合使用来检测这些白色但非空白的页面。

注意:此解决方案会将 PDF 页面转换为图像并检测图像是否为空白。需要申请许可证才能删除转换图像中的评估消息。否则,该方法将无法正常工作。如果您没有许可证,请联系sales@e-iceblue.com获取临时许可证以进行评估。

详细步骤如下:

  • 创建一个PdfDocument实例。
  • 使用PdfDocument.LoadFromFile()方法加载 PDF 文档。
  • 使用PdfPageBase.IsBlank()方法循环遍历 PDF 文档中的页面以检测页面是否为空白。
  • 对于绝对空白的页面,请使用PdfDocument.Pages.RemoveAt()方法删除它们。
  • 对于并非绝对空白的页面,请使用PdfDocument.SaveAsImage()方法将其保存为图像。然后使用自定义方法IsImageBlank()检测转换后的图像是否为空白,并使用PdfDocument.Pages.RemoveAt()方法删除“空白”页面。
  • 使用PdfDocument.SaveToFile()方法保存结果文档。

[C#]

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;namespace DeleteBlankPage
{
class Program
{
static void Main(string[] args)
{
//Apply license by license key
Spire.License.LicenseProvider.SetLicenseKey("your license key");//Create a PdfDocument instance
PdfDocument document = new PdfDocument();//Load a sample PDF document
document.LoadFromFile("input.pdf");//Loop through all pages in the PDF
for (int i = document.Pages.Count - 1; i >= 0; i--)
{
//Detect if a page is blank
if (document.Pages[i].IsBlank())
{
//Remove the absolutely blank page
document.Pages.RemoveAt(i);
}
else
{
//Save PDF page as image
Image image = document.SaveAsImage(i, PdfImageType.Bitmap);//Detect if the converted image is blank
if (IsImageBlank(image))
{
//Remove the page
document.Pages.RemoveAt(i);
}
}
}//Save the result document
document.SaveToFile("RemoveBlankPage.pdf", FileFormat.PDF);
}//Detect if an image is blank
public static bool IsImageBlank(Image image)
{
Bitmap bitmap = new Bitmap(image);
for (int i = 0; i < bitmap.Width; i++)
{
for (int j = 0; j < bitmap.Height; j++)
{
Color pixel = bitmap.GetPixel(i, j);
if (pixel.R < 240 || pixel.G < 240 || pixel.B < 240)
{
return false;
}
}
}
return true;
}
}
}

【VB.NET】

Imports Spire.Pdf
Imports Spire.Pdf.GraphicsNamespace DeleteBlankPage
Class Program
Private Shared Sub Main(ByVal args() As String)
'Apply license by license key
Spire.License.LicenseProvider.SetLicenseKey("your license key")'Create a PdfDocument instance
Dim document As PdfDocument = New PdfDocument'Load a sample PDF document
document.LoadFromFile("input.pdf")'Loop through all pages in the PDF
Dim i As Integer = (document.Pages.Count - 1)
Do While (i >= 0)'Detect if a page is blank
If document.Pages(i).IsBlank Then'Remove the absolutely blank page
document.Pages.RemoveAt(i)
Else'Save PDF page as image
Dim image As Image = document.SaveAsImage(i, PdfImageType.Bitmap)'Detect if the converted image is blank
If Program.IsImageBlank(image) Then'Remove the page
document.Pages.RemoveAt(i)
End IfEnd Ifi = (i - 1)
Loop'Save the result document
document.SaveToFile("RemoveBlankPage.pdf", FileFormat.PDF)
End Sub'Detect if an image is blank
Public Shared Function IsImageBlank(ByVal image As Image) As Boolean
Dim bitmap As Bitmap = New Bitmap(image)
Dim i As Integer = 0
Do While (i < bitmap.Width)
Dim j As Integer = 0
Do While (j < bitmap.Height)
Dim pixel As Color = bitmap.GetPixel(i, j)
If ((pixel.R < 240) _
OrElse ((pixel.G < 240) _
OrElse (pixel.B < 240))) Then
Return False
End Ifj = (j + 1)
Loopi = (i + 1)
LoopReturn True
End Function
End Class
End Namespace

C#/VB.NET:查找并删除 PDF 中的空白页

以上便是如何查找并删除 PDF 中的空白页,如果您有其他问题也可以继续浏览本系列文章,获取相关教程~

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

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

相关文章

亲测有效Djiango连接oracle

navicat连接本地oracle截图。 Djiango下面settings.py下面的DATABASES&#xff1a; 注意&#xff1a;USER最好不要用sys或者system可能会导致连接不了&#xff0c;最好是自己新建的oracle用户。

Aapche Nutch建立自己的搜索引擎

sudo apt install default-jdk‘ java -version openjdk version "11.0.22" 2024-01-16 vi .bashrc export JAVA_HOME/usr/lib/jvm/java-11-openjdk-amd64 爬梯子下载源代码 Apache Nutch™ – Downloads mkdir -p urls cd urls touch seed.txt 里面放入我的网站…

Redis是单线程还是多线程

之前面试又被问到这个问题&#xff0c;一直以为Redis是单线程&#xff0c;直到面试官的指点&#xff0c;才发现这么说有误&#xff0c;于是查了很多资料&#xff0c;下面简单聊聊Redis是单线程还是多线程&#xff1f; 单线程数据操作 首先需要理清一个基本概念&#xff1a;所…

【C++11】thread线程库

【C11】thread线程库 目录 【C11】thread线程库thread类的简单介绍函数指针lambda表达式常用在线程中 线程函数参数join与detach利用RAII思想来自动回收线程 原子性操作库(atomic)atomic中的load函数&#xff1a;atomic中对变量进行原子操作的一些函数 CAS(Compare-And-Swap)无…

VGG16神经网络搭建

一、定义提取特征网络结构 将要实现的神经网络参数存放在列表中&#xff0c;方便使用。 数字代表卷积核的个数&#xff0c;字符代表池化层的结构 cfgs {"vgg11": [64, M, 128, M, 256, 256, M, 512, 512, M, 512, 512, M],VGG13: [64, 64, M, 128, 128, M, 256, …

「11」显示器采集:捕获单个显示器的完整视频画面

「11」显示器采集捕获单个显示器的完整视频画面 在OBS软件中&#xff0c;「显示器采集」是一种用于捕集显示器屏幕画面的功能&#xff0c;您可以将其用于整个桌面窗口的采集到直播间。该功能主要用于捕捉您的计算机桌面屏幕内容&#xff0c;以便将其实时显示在直播窗口中&#…

MySQL Explain 字段详解

Explain 工具介绍 Explain 一般被称为解释器&#xff0c;通过 Explain 工具&#xff0c;我们能分析我们使用的查询语句或是结构的性能瓶颈&#xff0c;它提供 MySQL 如何执行语句的信息。 使用语法&#xff1a; explain [extended|partition] select在 select 关键字前加 ex…

第 1 章.提示词:开启AI智慧之门的钥匙

什么是提示词&#xff1f; 提示词&#xff0c;是引导语言模型的指令&#xff0c;让用户能够驾驭模型的输出&#xff0c;确保生成的文本符合需求。 ChatGPT&#xff0c;这位文字界的艺术大师&#xff0c;以transformer架构为基石&#xff0c;能轻松驾驭海量数据&#xff0c;编织…

R 生存分析3:Cox等比例风险回归及等比例风险检验

虽然Kaplan-Meier分析方法目前应用很广&#xff0c;但是该方法存在一下局限: 对于一些连续型变量&#xff0c;必须分类下可以进行生存率对比 是一种单变量分析&#xff0c;无法同时对多组变量进行分析 是一种非参数分析方法&#xff0c;必须有患者个体数据才能进行分析 英国…

Java冒泡排序详细讲解

冒泡排序是一种简单但效率较低的排序算法&#xff0c;它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。具体实现如下&#xff1a; 算法步骤&#xff1a; 比较相邻的元素&#xff1a;从第一个元素开始&#xff0c;依次…

阳光倒灌高准直汽车抬头显示器HUD太阳光模拟器

阳光倒灌高准直汽车抬头显示器HUD太阳光模拟器是一种高级别的模拟设备&#xff0c;用于模拟太阳光的光谱、强度及照射角度&#xff0c;应用于太阳能电池板、光伏系统等领域的研究和测试。其参数包括光谱范围、光强度、光源、照射角度、均匀性和稳定性&#xff0c;可根据需求调整…

ubuntu20.04安装截图工具flameshot

ubuntu20.04 自带的截图工具&#xff0c;可以使用快捷键“shift printScreen” ,但是它不能对截图进行编辑。 现在安装截图工具 flameshot&#xff0c;使用以下命令&#xff1a; sudo apt install flameshot 安装完成后&#xff0c;使用以下命令打开&#xff1a; flamesho…

Linux应用实战之网络服务器(一) HTTP协议介绍

0、前言 准备做一个Linux网络服务器应用实战&#xff0c;通过网页和运行在Linux下的服务器程序通信&#xff0c;这是第一篇&#xff0c;先简单介绍一下HTTP协议。 1、概述 1.1 定义 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是一种用于传输超文本数据的应用…

MySQL 命令 alter table 修改字段

新增字段 项目开发过程中以及项目迭代后&#xff0c;都会涉及到需要新增字段的场景。大多数人应该是使用数据库管理工具&#xff08;如&#xff1a;Navicat&#xff09;操作的&#xff0c;但是使用新增字段的命令进行操作也理应会使用&#xff0c;在特定场景下只能使用命令新增…

java分布式面试快问快答

目录 Java分布式面试宝典50题DubboRedisZookeeper分布式系统设计性能优化与监控安全实践经验 解答DubboRedisZookeeper分布式系统性能优化与监控安全 Java分布式面试宝典50题 Java分布式开发涉及到Dubbo、Redis、Zookeeper等技术&#xff0c;这些技术在实际工作中扮演着重要角…

Go 语言基础语法

目录 行分隔符 注释 标识符 字符串连接 关键字 Go 语言的空格 格式化字符串 Printf 实例 Go 语言变量 变量声明 多变量声明 值类型和引用类型 简短形式&#xff0c;使用 : 赋值操作符 Go 程序可以由多个标记组成&#xff0c;可以是关键字&#xff0c;标识符&#…

C++ 之LeetCode刷题记录(四十)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 目标&#xff1a;执行用时击败90%以上使用 C 的用户。 27. 移除元素 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值…

文献速递:文献速递:基于SAM的医学图像分割--SAM-Med3D

Title 题目 SAM-Med3D 01 文献速递介绍 医学图像分析已成为现代医疗保健不可或缺的基石&#xff0c;辅助诊断、治疗计划和进一步的医学研究]。在这一领域中最重要的挑战之一是精确分割体积医学图像。尽管众多方法在一系列目标上展现了值得称赞的有效性&#xff0c;但现有的…

jmeter二次开发发送java请求_保姆级教程!!!

一、引言 JMeter是Apache基金会开发的一款开源性能测试工具&#xff0c;广泛应用于软件性能测试领域。它能够模拟多线程并发用户对应用程序进行压力测试&#xff0c;以评估应用程序的性能和稳定性。然而&#xff0c;在实际使用过程中&#xff0c;用户可能会遇到需要发送Java请…

RHCE实验-建立NFS服务器,使的客户端顺序共享数据

第一步&#xff1a;服务端及客户端的准备工作 # 恢复快照[rootserver ~]# setenforce 0​[rootserver ~]# systemctl stop firewalld​[rootserver ~]# yum install nfs-utils -y # 服务端及客户端都安装 第二步&#xff1a;服务端建立共享文件目录&#xff0c;并设置权限…