Solutions

Merge and split. Correctly.

Lossless PDF merge and split in Rust — bookmarks, page labels, and named destinations preserved.

Code example

rust
use pdfluent::{Sdk, merge::MergeOptions};

let sdk = Sdk::init_with_license("license.json")?;

let doc1 = sdk.open("chapter1.pdf")?;
let doc2 = sdk.open("chapter2.pdf")?;
let doc3 = sdk.open("chapter3.pdf")?;

let opts = MergeOptions::builder()
    .preserve_bookmarks(true)
    .preserve_page_labels(true)
    .linearize(true)
    .build();

let merged = sdk.merge(vec![doc1, doc2, doc3], opts)?;
merged.save("book_complete.pdf")?;

println!("Pages: {}, Bookmarks: {}", merged.page_count(), merged.bookmark_count());

Run cargo add pdfluent@1.0.0-beta.5 to get started.

What it does

Lossless merging

Merge multiple PDFs with correct page ordering, bookmark preservation, and page label handling. No lost pages, no reordered content.

Flexible splitting

Split by page range, by bookmark level, by empty page, or by content pattern (e.g., 'new chapter'). Extract exactly the pages you need.

Bookmark preservation

Merge documents with existing bookmarks. PDFluent merges outline trees correctly — nested bookmarks, named destinations, and cross-document links preserved.

Page label handling

Merge PDFs with different page label formats (Roman, Arabic, alphabetic). Output has correct consolidated page labels.

Linearised PDF support

Merge and split linearised (web-optimised) PDFs without losing the linearisation structure. Output remains web-optimised.

Encrypted file handling

Merge and split password-protected PDFs. Handles user passwords, owner passwords, and permission flags correctly during operations.

Deployment options

Server-side (Rust binary)Docker containerAWS LambdaWebAssembly (browser)

Frequently asked questions