anyconvert
Python document conversion engine
anyconvert converts PDF documents into DOCX, PPTX, ODT, ODP, TXT, SVG, and HTML5 using only the Python standard library.
Highlights
- Dual Layout Engines:
- Canvas Mode (
--mode canvas): 1:1 pixel-accurate positioning. Renders exact coordinates, font families, embedded images, and vector artwork (native DrawingML custom geometries in DOCX and PPTX, SVG paths in ODT, and CSS/SVG canvas in HTML5). Ideal for flyers, forms, annotated PDFs, and presentation slides. - Flow Mode (
--mode flow): Semantic reflowable document reconstruction. Automatically detects headings (H1–H6), bullet/numbered lists, tables, and reflowable paragraphs.
- Canvas Mode (
- Native Vector Graphics & DrawingML Engine:
- High-precision PDF vector path parser decomposing cubic Bézier curves, subpaths, line caps, line joins, miter limits, and dash patterns.
- Generates native OpenXML DrawingML custom geometries (
<a:custGeom>) in DOCX and PPTX, native ODF<draw:path>in ODT/ODP, and standalone scalable vector graphics (.svg).
- Single-File HTML5:
- Semantic reflowable output (
<article>,<header>,<footer>,<table class="pure-table">,<ul class="flow-list">) and pixel-accurate canvas (position: absolute, inline<svg>, affine matrix transforms). - Truly portable single-file packaging with Base64 Data URI image embedding and zero-telemetry offline Content-Security-Policy (
<meta http-equiv="Content-Security-Policy">).
- Semantic reflowable output (
- Comprehensive PDF Coverage:
- Classic ASCII xref tables, xref streams (
/Type /XRef), and object streams (/Type /ObjStm). - Standard PDF Security Revisions 2–6 (RC4 40–128 bit, AES-128, and AES-256 CBC).
- Decompression filters (
FlateDecodewith PNG/TIFF predictors,LZWDecode,ASCII85Decode,ASCIIHexDecode,RunLengthDecode,CCITTFaxDecode,JBIG2Decode,JPXDecode). - Modern image support: In-memory PNG extraction (ISO/IEC 15948), JPEG, JPEG 2000, and native WebP (RIFF/VP8/VP8L/VP8X).
- Full typography engine: Type 1, TrueType/OpenType SFNT tables, CFF/Type 2 CharStrings, CIDFonts, ToUnicode CMaps, Adobe Glyph List, and dynamic
/Differencesencodings.
- Classic ASCII xref tables, xref streams (
- Standards-Compliant Packaging:
- OPC (ISO/IEC 29500-2): Generates valid WordprocessingML (
.docx) and PresentationML (.pptx) packages with complete[Content_Types].xmland.relshierarchies. - ODF (ISO/IEC 26300): Generates compliant OpenDocument Text (
.odt) and Presentation (.odp) archives with uncompressedmimetypeheaders at byte offset 0. - W3C SVG & HTML5: Standards-compliant vector graphics and self-contained HTML5 reports.
- OPC (ISO/IEC 29500-2): Generates valid WordprocessingML (
Supported Format Matrix
| Target Format | Extension | Flow Mode | Canvas Mode | Container Standard |
|---|---|---|---|---|
| Microsoft Word | .docx |
Semantic <w:p>, <w:tbl> |
DrawingML <wps:wsp>, <w:framePr> |
ISO/IEC 29500-2 (OPC) |
| Microsoft PowerPoint | .pptx |
Reflowable slide text | Coordinate shapes & DrawingML <a:custGeom> |
ISO/IEC 29500-2 (OPC) |
| OpenDocument Text | .odt |
Semantic <text:p>, <table:table> |
Positioned <draw:frame>, <draw:path> |
ISO/IEC 26300 (ODF) |
| OpenDocument Presentation | .odp |
Slide content boxes | Coordinate <draw:frame>, <draw:path> |
ISO/IEC 26300 (ODF) |
| Plaintext / Markdown | .txt |
Formatted Markdown text | 2D character-grid layout | UTF-8 Plaintext |
| Scalable Vector Graphics | .svg |
Vertically stacked vector view | Individual SVG vector pages with curves & text | W3C SVG 1.1 |
| Standalone HTML5 | .html |
Semantic <article>, <p>, <table> |
Absolute coordinate <div> & <svg> canvas |
W3C HTML5 (Offline Data URI) |
Known Issues
- Slide Orientation (ODP & PPTX):
- If input PDF page aspect ratio is vertical/portrait, ODP and PPTX default slide dimensions currently scale to widescreen aspect ratios (resolving in Phase 12).
Installation
Install from PyPI:
pip install anyconvert
Or install in editable development mode:
git clone https://github.com/word-sys/anyconvert.git
cd anyconvert
pip install -e .
Command-Line Interface (CLI)
anyconvert provides a standalone command-line tool:
anyconvert [OPTIONS] INPUT_PDF
Options
| Flag | Argument | Description | Default |
|---|---|---|---|
-f, --format |
docx|pptx|odt|odp|txt|svg|html |
Target document format | docx |
-o, --output |
PATH |
Output destination file path | {input_basename}.{format} |
-m, --mode |
flow|canvas |
Layout reconstruction mode (canvas for 1:1 visual match) |
flow |
-p, --password |
STRING |
Decryption password for encrypted PDFs | "" |
-v, --verbose |
Enable diagnostic logging | False |
|
--version |
Print version and exit | ||
-h, --help |
Show help message and exit |
CLI Examples
Single-File Responsive Web Document (HTML5 Flow):
anyconvert article.pdf -f html -m flow -o article.html
1:1 Pixel-Accurate Offline Web Report (HTML5 Canvas):
anyconvert flyer.pdf -f html -m canvas -o flyer.html
Standalone Scalable Vector Graphics Page (SVG):
anyconvert blueprint.pdf -f svg -o blueprint.svg
1:1 Pixel-Accurate Visual Export (DOCX):
anyconvert flyer.pdf -f docx -m canvas -o flyer.docx
1:1 Pixel-Accurate Visual Export (ODT):
anyconvert document.pdf -f odt -m canvas -o document.odt
Semantic Reflowable Conversion for Editing (DOCX):
anyconvert article.pdf -f docx -m flow -o article.docx
Convert PDF Slides to PowerPoint with Vectors (PPTX):
anyconvert presentation.pdf -f pptx -m canvas -o presentation.pptx
Convert Encrypted / Password-Protected PDF:
anyconvert secret.pdf -f docx -p "MyPassword123"
Python API
High-Level File Conversion (convert)
from anyconvert import convert, ConversionMode
# Accurate visual export to Word or LibreOffice Writer
convert(
input_path="input.pdf",
output_format="docx",
output_path="output.docx",
mode=ConversionMode.CANVAS, # or "canvas"
)
# Semantic reflowable export to OpenDocument Text
convert(
input_path="input.pdf",
output_format="odt",
output_path="output.odt",
mode=ConversionMode.FLOW, # or "flow"
)
In-Memory Byte Conversion (convert_bytes)
Ideal for web APIs, AWS Lambda, Cloud Run, and microservices:
from anyconvert import convert_bytes
pdf_bytes = open("document.pdf", "rb").read()
# Convert in-memory without touching disk
docx_bytes = convert_bytes(
pdf_bytes=pdf_bytes,
output_format="docx",
mode="canvas",
)
Document Intermediate Representation (pdf_to_document_ir)
Inspect and manipulate document AST nodes before emitting:
from anyconvert import pdf_to_document_ir
doc_ir = pdf_to_document_ir("document.pdf", mode="canvas")
print(f"Total Pages: {len(doc_ir.pages)}")
print(f"Metadata: {doc_ir.metadata}")
for page in doc_ir.pages:
print(f"Page {page.page_number} ({page.width}x{page.height} pt): {len(page.blocks)} blocks")
Architecture
[ Raw PDF Bytes / Stream ]
│
▼
[ PDF Lexer & Parser ] ───► [ XRef Resolver & ObjStm Unpacker ]
│
┌────────────────────────────────┼────────────────────────────────┐
▼ ▼ ▼
[ Decryption Engine ] [ Decompression Filters ] [ Typography Engine ]
(RC4 / AES-128 / AES-256) (Flate/LZW/ASCII85/PackBits) (SFNT / CFF / Type 1 / CMap)
│ │ │
└────────────────────────────────┼────────────────────────────────┘
│
▼
[ Content Stream Interpreter ]
(Graphics & Text Evaluator)
│
▼
[ Spatial Indexing & Recursive XY-Cut ]
│
▼
[ Semantic Feature Detectors ]
(Headings / Lists / Tables / Flow)
│
▼
[ DocumentIR Builder ]
│
┌─────────────────────┬──────┴──────────────┬─────────────────────┐
▼ ▼ ▼ ▼
[ DOCX Emitter ] [ PPTX Emitter ] [ ODT / ODP / TXT ] [ HTML5 / SVG ]
(DrawingML) (DrawingML) (ISO/IEC 26300) (Flow & Canvas)
Development & Verification
Running Tests
python3 -m pytest tests/
Static Type Checking
The codebase enforces 100% strict type safety (mypy --strict):
python3 -m mypy --strict src/ tests/
Contributing
Contributions are welcome! Please read CONTRIBUTING.md for details on our architectural principles, development setup, code of conduct, and pull request guidelines.
License
GPL-3.0-or-later. See LICENSE for details.
Metadata
Release files for anyconvert 0.1.11
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| anyconvert-0.1.11.tar.gz | 206.6 kB | With provenance | Details for anyconvert-0.1.11.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| anyconvert-0.1.11-py3-none-any.whl | Python 3 | none | any | Details for anyconvert-0.1.11-py3-none-any.whl |
Total release size: 458.7 kB
Release files / anyconvert-0.1.11.tar.gz
| Download URL | anyconvert-0.1.11.tar.gz |
|---|---|
| Size | 206.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ff54508ccceba8fa7015e262198c90161e59997f9a2fa175b1add219c646db52
|
|
BLAKE2b-256 checksum How to use checksums |
e5485ee972d5f2a53e5611e511e91ac140d6e9f285c404a661629e92efd2d6e1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logRelease files / anyconvert-0.1.11-py3-none-any.whl
| Download URL | anyconvert-0.1.11-py3-none-any.whl |
|---|---|
| Size | 252.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0ae8c8596cc38f215c05217dc9ac079b9dbd5bf6daaf184952e170c4d528ff34
|
|
BLAKE2b-256 checksum How to use checksums |
d13a81bb8eb58d69344105958752f9afc2e0d30caf5ca2c67c76cd404c68d770
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logSecurity for anyconvert 0.1.11
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for anyconvert-0.1.11.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.