Skip to content

Assemble your first document

This tutorial creates its own two-page PDF, reorders it and saves a .mcruft folder. Only the core install is required. Start in an empty working directory.

uv venv
source .venv/bin/activate
uv pip install mcruft

Save this as first_document.py and run python first_document.py:

from pathlib import Path
from pypdf import PdfReader, PdfWriter
import mcruft

writer = PdfWriter()
writer.add_blank_page(width=300, height=200)
writer.add_blank_page(width=200, height=300)
with Path("input.pdf").open("wb") as stream:
    writer.write(stream)

doc = mcruft.open("input.pdf")
assert len(doc.pages) == 2
assert doc.pages[0].size == (300, 200)
doc.move_page(0, 1)
doc.meta["title"] = "First document"
saved = doc.save("first.mcruft")
assert Path("first.mcruft/manifest.json").is_file()

reopened = mcruft.open("first.mcruft")
assert reopened.pages[0].size == (200, 300)
report = reopened.export("result.pdf", policy="editable")
assert len(PdfReader("result.pdf").pages) == 2
print(report.outputs)
print(report.losses, report.warnings)

You now have input.pdf, the folder first.mcruft and result.pdf. The folder preserves its source PDF; page ordering lives in the manifest. Open the output in your PDF viewer.

To assemble real material, call doc.add_file("another.pdf") before saving. doc.split() returns one document per page; mcruft.merge(documents) concatenates them. Indexes are zero-based. See exporting when adding images or slide decks.