Documentation

PageFuse is a CLI tool for assembling pages from multiple documents into one output, or splitting one document into many — across any mix of formats.

Installation

Linux (recommended)

pipx install pagefuse

If you don't have pipx:

sudo apt install pipx && pipx ensurepath

macOS

pip install pagefuse

Windows

pip install pagefuse

Via Cargo

cargo install pagefuse

Requires Python 3.9+ on your PATH. The Python package is installed automatically.

LibreOffice (optional)

Required only for Office and OpenDocument formats (.docx, .pptx, .odt, etc.). PDF, image, Markdown, and HTML input/output work without it.

# Ubuntu / Debian
sudo apt install libreoffice

# macOS
brew install --cask libreoffice

# Windows — download from https://www.libreoffice.org/download
# then add soffice.exe to your PATH

Uninstall

pipx uninstall pagefuse   # if installed via pipx
pip uninstall pagefuse    # if installed via pip

Quick Start

Combine a cover page and a report into one PDF:

pagefuse assemble output.pdf cover.pdf:1 report.pdf:all

Include specific pages from multiple formats:

pagefuse assemble board_pack.pdf \
  cover.pdf:1 \
  financials.docx:all \
  slides.pptx:2-5

Split a report into separate files:

pagefuse split report.pdf cover.pdf:1 body.pdf:2-10 appendix.docx:11-20

Check your version:

pagefuse --version

Global Options

These options apply to all subcommands and must be placed before the subcommand name.

pagefuse [OPTIONS] COMMAND [ARGS]...
OptionDefaultDescription
--lo-timeout SECS300LibreOffice conversion timeout in seconds. Increase for large or complex files — there is no hard limit.
--versionPrint version and exit.

Example

pagefuse --lo-timeout 600 assemble output.docx big_report.pdf:all

assemble

Combine pages from multiple documents into one output. Pass a .fuse config file, or specify everything inline.

pagefuse assemble OUTPUT SOURCE [SOURCE ...]
pagefuse assemble CONFIG.fuse
OptionDescription
--dry-runPreview the assembly plan — shows input files, page selection, and resource estimates without writing any output.

Inline usage

Output file first, then sources. Each source is file:pages — omit :pages to include all pages.

# PDF output
pagefuse assemble output.pdf cover.pdf:1 terms.docx:all pricing.pdf:1-3

# Word output
pagefuse assemble output.docx cover.pdf:1 report.pdf:all

# Self-contained HTML
pagefuse assemble output.html report.pdf:1-5

# Images — single page → file, multi-page → output.png.zip
pagefuse assemble output.png slides.pdf:1-3

# Preview without writing files
pagefuse assemble --dry-run output.pdf cover.pdf:1 report.docx:all

Config file usage

pagefuse assemble board_pack.fuse
pagefuse assemble --dry-run board_pack.fuse

See Config Format for the full .fuse syntax.

split

Extract pages from one document into multiple output files. Each output can be a different format. Pass a .fuse config file, or specify everything inline.

pagefuse split SOURCE OUTPUT [OUTPUT ...]
pagefuse split CONFIG.fuse
OptionDescription
--dry-runPreview what pages would be written to each output file without writing anything.

Inline usage

Source file first, then outputs with page specs.

pagefuse split report.pdf cover.pdf:1 body.pdf:2-10 appendix.docx:11-20

# Each output can be a different format
pagefuse split report.pdf summary.pdf:1 full.docx:all preview.png:1

# Preview without writing files
pagefuse split --dry-run report.pdf cover.pdf:1 body.pdf:2-10

Config file usage

pagefuse split split.fuse

Example split.fuse:

source: annual_report.pdf

# Metadata (optional — defaults to source file metadata)
title:  Annual Report
author: Finance Team

output: cover.pdf              1
output: executive_summary.pdf  2-5
output: financials.pdf         6-20
output: appendix.docx          21-30
output: cover_preview.png      1

Restrictions

Images (.png, .jpg, etc.) cannot be used as split sources. Run pagefuse info <file> to check what a file supports.

Format compatibility rules also apply to outputs — see Supported Formats.

info

Show page count, metadata, and format support for one or more files. Uses fast native reading — no LibreOffice required.

pagefuse info FILE [FILE ...]

Examples

pagefuse info report.pdf
pagefuse info report.pdf slides.pptx photo.png

Output

For each file, shows a file info table followed by a Format Support table listing which commands accept it as input and what output formats are available:

  File    slides.pptx
  Format  PPTX
  Pages   12

              Format Support
 ┌──────────┬───────────────┬─────────────────────────────────────┐
 │ Command  │ Input support │ Output support                      │
 ├──────────┼───────────────┼─────────────────────────────────────┤
 │ assemble │ yes           │ .html  .jpg  .jpeg  .odp  .pdf  ... │
 │ split    │ yes           │ .html  .jpg  .jpeg  .odp  .pdf  ... │
 └──────────┴───────────────┴─────────────────────────────────────┘

init

Generate a starter .fuse config file.

pagefuse init [OPTIONS]
OptionDescription
--splitGenerate a split config (with source: and output: lines) instead of the default assemble config.
--output FILEOutput filename. Default: config.fuse.

Examples

pagefuse init                               # assemble config → config.fuse
pagefuse init --split                       # split config → config.fuse
pagefuse init --output board_pack.fuse      # custom filename
pagefuse init --split --output split.fuse   # split config with custom name

activate / deactivate

Manage your PageFuse license on this machine.

pagefuse activate KEY
pagefuse deactivate

activate

Activate PageFuse with a license key. Each key allows up to 3 simultaneous machine activations. The license is lifetime — pay once, use forever, with 1 year of updates included. On success, the license is stored locally and re-validated automatically every 7 days.

pagefuse activate PF-XXXX-XXXX-XXXX-XXXX

deactivate

Remove the license from this machine, freeing up an activation slot so you can use it elsewhere.

pagefuse deactivate

Trial period

Without a license, PageFuse runs in trial mode for 30 days from first use — full access, no restrictions.

DetailValue
Trial length30 days from first run
License typeLifetime — pay once, use forever
Activations per key3 machines
Updates included1 year from purchase
Re-validation intervalEvery 7 days (online)
Offline useAllowed; requires online check every 7 days

Config Format (.fuse)

A plain-text config file for repeatable builds. Comments start with #. Pass the file directly to assemble or split.

Assemble config

# Output format is determined by the file extension.
# Add multiple output: lines to export to several formats in one run.
output: board_pack.pdf
output: board_pack.docx

# Metadata (all optional — title defaults to output filename)
title:   Q4 Board Pack
author:  Finance Team
subject: Board meeting materials

# Files are assembled in order. Same file may appear multiple times.
from: cover.pdf                1
from: reports/financials.docx  all
from: slides/deck.pptx         1-4
from: reports/charts.pdf       3,5,7

Split config

source: annual_report.pdf

# Metadata (optional — defaults to source file metadata)
title:  Annual Report
author: Finance Team

output: cover.pdf              1
output: executive_summary.pdf  2-5
output: financials.pdf         6-20
output: appendix.docx          21-30

Key rules

DirectiveUsed inDescription
output:bothOutput file path. Extension sets format. Multiple allowed in assemble.
from:assembleInput file with optional page spec. Processed in order.
source:splitSingle input file to split from. Exactly one required.
title:bothPDF metadata title.
author:bothPDF metadata author.
subject:bothPDF metadata subject.

Page Spec Syntax

Page numbers are 1-based. Omitting the page spec defaults to all.

SpecMeaningExample
allEvery pagereport.pdf:all
5Page 5 onlyreport.pdf:5
1-3Pages 1 through 3 (inclusive)report.pdf:1-3
1,3,5Pages 1, 3, and 5report.pdf:1,3,5
1-3,5,7-9Mixed ranges and singlesreport.pdf:1-3,5,7-9

Supported Formats

Input

FormatExtensionsLibreOfficeSplit source
PDF.pdfNoYes
Images.png .jpg .jpeg .tiff .tifNoNo
Markdown.md .markdownNoYes
Word.docx .docYesYes
PowerPoint.pptx .pptYesYes
OpenDocument.odt .odpYesYes
Web / HTML.htmlYesYes

Output

FormatExtensionLibreOfficeNotes
PDF.pdfNoDefault — fast, lossless
HTML.htmlNoSelf-contained; pages embedded as base64 images
Word.docxYesNot from presentation sources (.pptx, .ppt, .odp)
OpenDoc Text.odtYesNot from presentation sources
OpenDoc Pres.odpYesNot from word-processor sources (.docx, .doc, .odt)
Image.png .jpg .tiffNoSingle page → file; multi-page → .ext.zip

Format compatibility

Two restrictions apply when the source document type is known:

Source typeCannot output to
Presentation (.pptx, .ppt, .odp).docx, .odt
Word-processor (.docx, .doc, .odt).odp

Run pagefuse info <file> to see exactly what is supported for any given file.

Error Messages

PageFuse validates all inputs before starting work and reports all errors at once.

File not found

Error: Error(s):
  File not found: 'missing.pdf'
  File not found: 'also_missing.docx'

Invalid page range

Error: Page specification errors:
  range '2-50' is invalid in 'report.pdf' (12 pages total)
  page 15 does not exist in 'cover.pdf' (3 pages total)

Unsupported format

Error: Error(s):
  Unsupported input format '.xyz' for 'file.xyz'

Format incompatibility

Error: Error(s):
  Presentation source 'deck.pptx' cannot produce word-processor output '.docx'
  Run: pagefuse info deck.pptx

LibreOffice not installed

Error: LibreOffice is not installed or not on PATH.
Install with: sudo apt install libreoffice

Password-protected PDF

Error: 'secure.pdf' is password-protected. PageFuse cannot open encrypted PDFs.

Bug Reports & Feature Requests

Issues and feature requests are tracked publicly on GitHub. Search existing issues before opening a new one — someone may have already reported the same thing.

TypeWhere
Bug reportOpen a bug report →
Feature requestOpen a feature request →
License / billingContact support