C#实现合并及拆分PDF文件的方法
作者:E-iceblue 发布时间:2021-06-15 12:55:23
标签:C#,合并,拆分,PDF
有时我们可能会遇到下图这样一种情况 — 我们需要的资料或教程被分成了几部分存放在多个PDF文件中,不管是阅读还是保存都不是很方便,这时我们肯定想要把这些PDF文件合并为一个PDF文件。相对应的,有时候我们也需要拆分一个大的PDF文件,来从中获取我们需要的那一部分资料。这篇文章主要分享如何使用C#来将多个PDF文件合并为一个PDF文件以及将一个PDF文件拆分为多个PDF文件。
合并PDF文件
合并PDF文件的代码很简单,主要分为三步,首先获取需要合并的PDF文件,然后调用public static PdfDocumentBase MergeFiles(string[] InputFiles)方法,将这些PDF文件合并,然后保存文件。
代码如下:
using System;
using Spire.Pdf;
namespace 合并PDF文件
{
class Program
{
static void Main(string[] args)
{
String[] files = new String[] { "文件1.pdf", "文件2.pdf", "文件3.pdf" };
string outputFile = "输出.pdf";
PdfDocumentBase doc = PdfDocument.MergeFiles(files);
doc.Save(outputFile, FileFormat.PDF);
System.Diagnostics.Process.Start(outputFile);
}
}
}
合并前:
合并后:
拆分PDF文件
在拆分PDF文件时,我们可以选择将文件的每一页单独拆分为一个PDF文件,还可以设定页码范围,将其拆分为多个PDF文件。下面将分两个部分来介绍。
一、将PDF文件的每一页拆分为一个单独的PDF文件
在上一个部分中,合并后的PDF文件一共有4页,这里我将它的每一页拆分为一个单独的PDF文件。
代码如下:
using System;
using Spire.Pdf;
namespace 拆分PDF文件1
{
class Program
{
static void Main(string[] args)
{
PdfDocument doc = new PdfDocument("输出.pdf");
String pattern = "拆分-{0}.pdf";
doc.Split(pattern);
doc.Close();
}
}
}
效果图:
二、根据指定页面范围拆分PDF文件
这里我将一个18页的PDF文件的前10页拆分为一个PDF文件,后8页拆分为另一个PDF文件。
代码如下:
using System.Drawing;
using Spire.Pdf;
using Spire.Pdf.Graphics;
namespace 拆分PDF文件2
{
class Program
{
static void Main(string[] args)
{
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("各种点心的做法.pdf");
PdfDocument pdf1 = new PdfDocument();
PdfPageBase page;
for (int i = 0; i < 10; i++)
{
page = pdf1.Pages.Add(pdf.Pages[i].Size, new PdfMargins(0));
pdf.Pages[i].CreateTemplate().Draw(page, new PointF(0, 0));
}
pdf1.SaveToFile("DOC_1.pdf");
PdfDocument pdf2 = new PdfDocument();
for (int i = 10; i < 18; i++)
{
page = pdf2.Pages.Add(pdf.Pages[i].Size, new PdfMargins(0));
pdf.Pages[i].CreateTemplate().Draw(page, new PointF(0, 0));
}
pdf2.SaveToFile("DOC_2.pdf");
}
}
}
拆分前:
拆分后:
Note: 这里我使用了一个PDF组件Spire.PDF.
来源:http://www.cnblogs.com/Yesi/p/5604166.html


猜你喜欢
- Android11 读写权限申请Android11系统对应用写入权限做了严格的限制。本文介绍如何获取文件读写权限。项目中 build.gra
- 传统的Trie实现简单,但是占用的空间实在是难以接受,特别是当字符集不仅限于英文26个字符的时候, * 起来的空间根本无法接受。双数组Trie
- 1、注意事项众所周知,对一个文件进行读写操作时,我们需要创建对应的输入流和输出流但需要注意的是,读写操作不能同时进行(边读边写),即不能同时
- 安全发布对象在静态初始化函数中初始化一个对象引用将对象的引用保存到volatile类型域或者AtomicReference对象中将对象的引用
- 前言Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBa
- jdk中自带了很多工具可以用于性能分析,位于jdk的bin目录下,jvisualvm工具可以以图形化的方式更加直观的监控本地以及远程的jav
- 本文实例讲述了C#使用xsd文件验证XML格式是否正确的实现方法。分享给大家供大家参考,具体如下://创建xmlDocumentXmlDoc
- 当 Maven 无法依赖 spring-cloud-starter-zipkin 时,您可以尝试以下方法解决:确保拼写正确:请检查项目中的
- 一、WebSocket简介WebSocket协议通过在客户端和服务端之间提供全双工通信来进行Web和服务器的交互功能。在WebSocket应
- 本文实例为大家分享了android实现ListView下拉刷新上拉加载的具体代码,供大家参考,具体内容如下这次使用的是系统的SwipeRef
- 本文实例为大家分享了AsyncTask异步类实现网页内容放大缩小的详细代码,供大家参考,具体内容如下WebActivity.java:pac
- Accessors翻译是存取器。通过该注解可以控制getter和setter方法的形式。 @Accessors(fluent = true)
- 首先,通过一张最新(2021.11)的编程语言排名图来了解常见的编程语言:从图中可以看出,C++的排名相对于Python、Java、C来说并
- 首先我们应该知道线程安全问题一般发生在成员变量上,这是为什么啦?因为成员变量是存放在堆内存中,而堆内存又是线程共享的,这就造成了线程安全问题
- 主要思想:将一个view设计成多层:背景层,含中奖信息等;遮盖层,用于刮奖,使用关联一个Bitmap的Canvas在该Bitmap上,使用它
- 一、基本介绍 1、介绍学习很多算法知识,力争做到最优解的学习过程中,很多时候都会遇到PriorityQueue(优先队列)。一个基
- 准备过程:在电脑桌面 右键点击 “此电脑”的“属性”选项选择“高级系统设置”选项点击下面的“环境变量”选项配置过程:点击“系统变量”下面的”
- 目录多通道分离API操作通道合并API操作结果源码多通道分离APIpublic static void split(Mat m, List&
- 通过GitHub获取Eureka源码进入git bash命令行,自己找个目录,用来存放eureka源码,然后在目录里面,执行git clon
- springboot集成mybatis plus和dynamic-datasource注意事项环境spring-boot-starter-p