Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added Data/Tagged_PDF.pdf
Binary file not shown.
12 changes: 6 additions & 6 deletions FindAndSplit/FindAndSplit/FindAndSplit.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,14 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Syncfusion.Compression.Base, Version=27.1462.53.0, Culture=neutral, PublicKeyToken=3d67ed1f87d44c89, processorArchitecture=MSIL">
<HintPath>..\packages\Syncfusion.Compression.Base.27.1.53\lib\net462\Syncfusion.Compression.Base.dll</HintPath>
<Reference Include="Syncfusion.Compression.Base, Version=30.1462.42.0, Culture=neutral, PublicKeyToken=3d67ed1f87d44c89, processorArchitecture=MSIL">
<HintPath>..\packages\Syncfusion.Compression.Base.30.1.42\lib\net462\Syncfusion.Compression.Base.dll</HintPath>
</Reference>
<Reference Include="Syncfusion.Licensing, Version=27.1462.53.0, Culture=neutral, PublicKeyToken=632609b4d040f6b4, processorArchitecture=MSIL">
<HintPath>..\packages\Syncfusion.Licensing.27.1.53\lib\net462\Syncfusion.Licensing.dll</HintPath>
<Reference Include="Syncfusion.Licensing, Version=30.1462.42.0, Culture=neutral, PublicKeyToken=632609b4d040f6b4, processorArchitecture=MSIL">
<HintPath>..\packages\Syncfusion.Licensing.30.1.42\lib\net462\Syncfusion.Licensing.dll</HintPath>
</Reference>
<Reference Include="Syncfusion.Pdf.Base, Version=27.1462.53.0, Culture=neutral, PublicKeyToken=3d67ed1f87d44c89, processorArchitecture=MSIL">
<HintPath>..\packages\Syncfusion.Pdf.WinForms.27.1.53\lib\net462\Syncfusion.Pdf.Base.dll</HintPath>
<Reference Include="Syncfusion.Pdf.Base, Version=30.1462.42.0, Culture=neutral, PublicKeyToken=3d67ed1f87d44c89, processorArchitecture=MSIL">
<HintPath>..\packages\Syncfusion.Pdf.WinForms.30.1.42\lib\net462\Syncfusion.Pdf.Base.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
Expand Down
6 changes: 1 addition & 5 deletions FindAndSplit/FindAndSplit/Program.cs
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
using Syncfusion.Pdf;
using Syncfusion.Pdf.Parsing;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FindAndSplit
{
class Program
{
static void Main(string[] args)
{
{
//Load the PDF document
PdfLoadedDocument loadedDocument = new PdfLoadedDocument("../../../../Data/PDF_Succinctly.pdf");
Dictionary<int, List<RectangleF>> textFound = new Dictionary<int, List<RectangleF>>();
Expand Down
6 changes: 3 additions & 3 deletions FindAndSplit/FindAndSplit/packages.config
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Syncfusion.Compression.Base" version="27.1.53" targetFramework="net462" />
<package id="Syncfusion.Licensing" version="27.1.53" targetFramework="net462" />
<package id="Syncfusion.Pdf.WinForms" version="27.1.53" targetFramework="net462" />
<package id="Syncfusion.Compression.Base" version="30.1.42" targetFramework="net462" />
<package id="Syncfusion.Licensing" version="30.1.42" targetFramework="net462" />
<package id="Syncfusion.Pdf.WinForms" version="30.1.42" targetFramework="net462" />
</packages>
25 changes: 25 additions & 0 deletions ImportAccessibilityTags/ImportAccessibilityTags.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.14.36310.24 d17.14
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImportAccessibilityTags", "ImportAccessibilityTags\ImportAccessibilityTags.csproj", "{FA3029EE-1A24-494A-8A36-6C9C207C9854}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{FA3029EE-1A24-494A-8A36-6C9C207C9854}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FA3029EE-1A24-494A-8A36-6C9C207C9854}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FA3029EE-1A24-494A-8A36-6C9C207C9854}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FA3029EE-1A24-494A-8A36-6C9C207C9854}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6CED5213-C7E8-4EEB-8303-FA768BDAD6E2}
EndGlobalSection
EndGlobal
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{FA3029EE-1A24-494A-8A36-6C9C207C9854}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>ImportAccessibilityTags</RootNamespace>
<AssemblyName>ImportAccessibilityTags</AssemblyName>
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Syncfusion.Compression.Base, Version=30.1462.42.0, Culture=neutral, PublicKeyToken=3d67ed1f87d44c89, processorArchitecture=MSIL">
<HintPath>..\packages\Syncfusion.Compression.Base.30.1.42\lib\net462\Syncfusion.Compression.Base.dll</HintPath>
</Reference>
<Reference Include="Syncfusion.Licensing, Version=30.1462.42.0, Culture=neutral, PublicKeyToken=632609b4d040f6b4, processorArchitecture=MSIL">
<HintPath>..\packages\Syncfusion.Licensing.30.1.42\lib\net462\Syncfusion.Licensing.dll</HintPath>
</Reference>
<Reference Include="Syncfusion.Pdf.Base, Version=30.1462.42.0, Culture=neutral, PublicKeyToken=3d67ed1f87d44c89, processorArchitecture=MSIL">
<HintPath>..\packages\Syncfusion.Pdf.WinForms.30.1.42\lib\net462\Syncfusion.Pdf.Base.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="packages.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
22 changes: 22 additions & 0 deletions ImportAccessibilityTags/ImportAccessibilityTags/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using Syncfusion.Pdf;
using Syncfusion.Pdf.Parsing;

namespace ImportAccessibilityTags
{
internal class Program
{
static void Main(string[] args)
{
//Load the PDF document.
PdfLoadedDocument loadedDocument = new PdfLoadedDocument("../../../../Data/Tagged_PDF.pdf");
//Create the split options object.
PdfSplitOptions splitOptions = new PdfSplitOptions();
//Enable the Split tags property.
splitOptions.SplitTags = true;
//Split the document by ranges.
loadedDocument.SplitByFixedNumber("Output{0}.pdf", 1, splitOptions);
//Close the document.
loadedDocument.Close(true);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("SplitPDFWithMultiplePage")]
[assembly: AssemblyTitle("ImportAccessibilityTags")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SplitPDFWithMultiplePage")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyProduct("ImportAccessibilityTags")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

Expand All @@ -20,7 +20,7 @@
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("9aa30f33-2020-4a9b-b5c7-06e219ea1195")]
[assembly: Guid("fa3029ee-1a24-494a-8a36-6c9c207c9854")]

// Version information for an assembly consists of the following four values:
//
Expand All @@ -29,8 +29,5 @@
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Syncfusion.Compression.Base" version="30.1.42" targetFramework="net462" />
<package id="Syncfusion.Licensing" version="30.1.42" targetFramework="net462" />
<package id="Syncfusion.Pdf.WinForms" version="30.1.42" targetFramework="net462" />
</packages>
13 changes: 7 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ The [Syncfusion&reg; .NET PDF library](https://www.syncfusion.com/document-proce

Sample name | Description
--- | ---
[Split PDF document into multiple files](https://github.com/SyncfusionExamples/split-pdf-document-csharp/tree/master/SplitWholeDocument) | Split each pages in a PDF document into individual PDF documents.
[Split specific page into separate PDF file](https://github.com/SyncfusionExamples/split-pdf-document-csharp/tree/master/SplitParticularPage) | Split a particular page from an existing PDF document into separate PDF document.
[Split range of pages into separate PDF file](https://github.com/SyncfusionExamples/split-pdf-document-csharp/tree/master/SplitRange) | Split a range of pages from an existing PDF document into separate PDF document.
[Split PDF based on bookmarks](https://github.com/SyncfusionExamples/split-pdf-document-csharp/tree/master/SplitByBookmark) | Split a PDF document by sections using the bookmarks in PDF documnet.
[Find and split PDF](https://github.com/SyncfusionExamples/split-pdf-document-csharp/tree/master/FindAndSplit) | Find a page with specific text and split it into a separate PDF document.
[Split PDF with specific number of pages](https://github.com/SyncfusionExamples/split-pdf-document-csharp/tree/master/SplitPDFWithMultiplePage) | Split a large PDF document into multiple PDF files with any number of pages.
[Split PDF document into multiple files](https://github.com/SyncfusionExamples/split-pdf-document-csharp/tree/master/SplitWholeDocument) | Split each page in a PDF document into individual PDF documents.
[Split specific page into separate PDF file](https://github.com/SyncfusionExamples/split-pdf-document-csharp/tree/master/SplitParticularPage) | Split a particular page from an existing PDF document into a separate PDF document.
[Split range of pages into separate PDF file](https://github.com/SyncfusionExamples/split-pdf-document-csharp/tree/master/SplitRange) | Split a range of pages from an existing PDF document into a separate PDF document.
[Split PDF based on bookmarks](https://github.com/SyncfusionExamples/split-pdf-document-csharp/tree/master/SplitByBookmark) | Split a PDF document by sections using the bookmarks in a PDF document.
[Find and split PDF](https://github.com/SyncfusionExamples/split-pdf-document-csharp/tree/master/FindAndSplit) | Find a page with specific text and split it into a separate PDF document.
[Split PDF by fixed number of pages](https://github.com/SyncfusionExamples/split-pdf-document-csharp/tree/master/SplitByFixedNumber) | Split a PDF document every N pages into separate files.
[Split PDF without losing accessibility tags](https://github.com/SyncfusionExamples/split-pdf-document-csharp/tree/master/ImportAccessibilityTags) | Split PDF files while preserving accessibility tags to maintain screen reader compatibility and document structure.

# How to run the examples
* Download this project to a location in your disk.
Expand Down
66 changes: 21 additions & 45 deletions SplitByBookmark/SplitByBookmark/Program.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
using Syncfusion.Pdf;
using Syncfusion.Pdf.Interactive;
using Syncfusion.Pdf.Parsing;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SplitByBookmark
{
Expand All @@ -15,61 +11,42 @@ static void Main(string[] args)
{
//Load the PDF document
PdfLoadedDocument loadedDocument = new PdfLoadedDocument("../../../../Data/PDF_Succinctly.pdf");

//Get the bookmarks from the PDF document
PdfBookmarkBase bookmarks = loadedDocument.Bookmarks;
Dictionary<PdfPageBase, int> pages = new Dictionary<PdfPageBase, int>();
Dictionary<string, List<int>> splitRange = new Dictionary<string, List<int>>();

//iterate all the pages and its index
for (int i = 0; i < loadedDocument.Pages.Count; i++)
{
PdfPageBase page = loadedDocument.Pages[i] as PdfPageBase;
pages.Add(page, i);
}
//Create a dictionary to hold the pages and its index
Dictionary<string, int[]> splitRange = new Dictionary<string, int[]>();

//Iterate all the bookmarks and it is page range
for (int i = 0; i < bookmarks.Count; i++)
{
if (bookmarks[i].Destination != null)
PdfLoadedBookmark bookmark = bookmarks[i] as PdfLoadedBookmark;
if (bookmark.Destination != null)
{
PdfPageBase page = bookmarks[i].Destination.Page;
if (pages.ContainsKey(page))
{
//Bookmark doesn't have any child bookmark
if (bookmarks[i].Count == 0)
{
int startIndex = pages[page];
List<int> range = new List<int>();
range.Add(startIndex);
range.Add(startIndex);
splitRange.Add(bookmarks[i].Title, range);
}
//Bookmark has child bookmark
else
int startIndex = bookmark.Destination.PageIndex;
int endIndex = startIndex;

// If bookmark has child bookmarks, set endIndex to the last child's page index
if (bookmark.Count > 0)
{
foreach (PdfLoadedBookmark child in bookmark)
{
int startIndex = pages[page];
int endIndex = startIndex;
List<int> range = new List<int>();
foreach (PdfLoadedBookmark bookmark in bookmarks[i])
{
PdfPageBase innerPage = bookmark.Destination.Page;
if (pages.ContainsKey(innerPage))
{
endIndex = pages[innerPage];
}
}
range.Add(startIndex);
range.Add(endIndex);
splitRange.Add(bookmarks[i].Title, range);
if (child.Destination != null)
endIndex = child.Destination.PageIndex;
}
}
splitRange[bookmark.Title] = new[] { startIndex, endIndex };
}
}

//Split the PDF document based on the bookmark page range.
foreach (string title in splitRange.Keys)
foreach (var sRange in splitRange)
{
int startIndex = splitRange[title][0];
int endIndex = splitRange[title][1];
string title = sRange.Key;
int startIndex = sRange.Value[0];
int endIndex = sRange.Value[1];

//Create a new PDF document.
PdfDocument document = new PdfDocument();
//Import the pages to the new PDF document.
Expand All @@ -80,7 +57,6 @@ static void Main(string[] args)
document.Close(true);
}
loadedDocument.Close(true);

}
}
}
12 changes: 6 additions & 6 deletions SplitByBookmark/SplitByBookmark/SplitByBookmark.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,14 @@
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Syncfusion.Compression.Base, Version=27.1462.53.0, Culture=neutral, PublicKeyToken=3d67ed1f87d44c89, processorArchitecture=MSIL">
<HintPath>..\packages\Syncfusion.Compression.Base.27.1.53\lib\net462\Syncfusion.Compression.Base.dll</HintPath>
<Reference Include="Syncfusion.Compression.Base, Version=30.1462.42.0, Culture=neutral, PublicKeyToken=3d67ed1f87d44c89, processorArchitecture=MSIL">
<HintPath>..\packages\Syncfusion.Compression.Base.30.1.42\lib\net462\Syncfusion.Compression.Base.dll</HintPath>
</Reference>
<Reference Include="Syncfusion.Licensing, Version=27.1462.53.0, Culture=neutral, PublicKeyToken=632609b4d040f6b4, processorArchitecture=MSIL">
<HintPath>..\packages\Syncfusion.Licensing.27.1.53\lib\net462\Syncfusion.Licensing.dll</HintPath>
<Reference Include="Syncfusion.Licensing, Version=30.1462.42.0, Culture=neutral, PublicKeyToken=632609b4d040f6b4, processorArchitecture=MSIL">
<HintPath>..\packages\Syncfusion.Licensing.30.1.42\lib\net462\Syncfusion.Licensing.dll</HintPath>
</Reference>
<Reference Include="Syncfusion.Pdf.Base, Version=27.1462.53.0, Culture=neutral, PublicKeyToken=3d67ed1f87d44c89, processorArchitecture=MSIL">
<HintPath>..\packages\Syncfusion.Pdf.WinForms.27.1.53\lib\net462\Syncfusion.Pdf.Base.dll</HintPath>
<Reference Include="Syncfusion.Pdf.Base, Version=30.1462.42.0, Culture=neutral, PublicKeyToken=3d67ed1f87d44c89, processorArchitecture=MSIL">
<HintPath>..\packages\Syncfusion.Pdf.WinForms.30.1.42\lib\net462\Syncfusion.Pdf.Base.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
Expand Down
6 changes: 3 additions & 3 deletions SplitByBookmark/SplitByBookmark/packages.config
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Syncfusion.Compression.Base" version="27.1.53" targetFramework="net462" />
<package id="Syncfusion.Licensing" version="27.1.53" targetFramework="net462" />
<package id="Syncfusion.Pdf.WinForms" version="27.1.53" targetFramework="net462" />
<package id="Syncfusion.Compression.Base" version="30.1.42" targetFramework="net462" />
<package id="Syncfusion.Licensing" version="30.1.42" targetFramework="net462" />
<package id="Syncfusion.Pdf.WinForms" version="30.1.42" targetFramework="net462" />
</packages>
Loading