Skip to main content

Python bindings for libcdr

DOI PyPI

Intro

Simple Python bindings for the libcdr. The binding chain is:

Python (CDRParser) → Cython (.pyx) → C++ (parser.cxx) → libcdr / librevenge

Installation

First, the libcdr newer than v0.1.8 must be compiled.

E.g. on Debian:

apt-get install automake cmake libtool libboost-all-dev libicu-dev liblcms2-dev librevenge-dev libcppunit-dev zlib1g-dev
git clone https://git.libreoffice.org/libcdr
cd libcdr
./autogen.sh
./configure
make && sudo make install

Then: pip install git+https://github.com/mpds-io/pylibcdr

The build steps (orchestrated automatically):

  1. CMake configures using pylibcdr/CMakeLists.txt.
  2. CMake invokes Cython to transpile libcdr_interface.pyx into libcdr_interface.cpp (via add_custom_command).
  3. CMake compiles the generated .cpp and core/parser.cxx into the Python extension libcdr_interface (via Python_add_library), linking against libcdr and librevenge.

If CMake fails, delete any _skbuild/ or build/ temp directories before retrying.

Usage

import sys
from pylibcdr import CDRParser
parser = CDRParser(sys.argv[1])
print(parser.xml)   # raw XHTML/SVG string
print(parser.dict)  # parsed as a nested dict

Architecture

File Role
pylibcdr/__init__.py CDRParser class; converts XML string to dict via dictify()
pylibcdr/libcdr_interface.pyx Cython bridge; calls svg(char*) from C++, raises CDRException on error strings
pylibcdr/core/parser.cxx C++ core; uses libcdr/librevenge to parse CDR files, returns XHTML wrapping SVG pages
pylibcdr/core/parser.h Header declaring std::string svg(char* file)
pylibcdr/CMakeLists.txt CMake build: Cython transpilation + Python_add_library for the extension
pylibcdr/cmake/ Custom Find*.cmake modules for libcdr and librevenge
pyproject.toml Project metadata and scikit-build-core configuration

The C++ svg() function returns an error string prefixed with "ERROR" on failure; the Cython layer detects this and raises CDRException.

The output of svg() is XHTML wrapping one or more SVG documents (one per page). CDRParser.xml exposes this raw string; CDRParser.dict parses it with xml.etree.ElementTree into a nested dict where repeated child tags become lists.

License

Inherited from the libcdr (MPL 2.0).

Metadata

Release files for pylibcdr 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pylibcdr 0.1.1
File Size Uploaded
pylibcdr-0.1.1.tar.gz 4.8 kB Details

Release files / pylibcdr-0.1.1.tar.gz

Download URL pylibcdr-0.1.1.tar.gz
Size 4.8 kB
Tags Source
SHA-256 checksum
How to use checksums
9b964f4497477bb867c12f03d44f50b10b6f49e278c3780c891a68a38519faba
BLAKE2b-256 checksum
How to use checksums
8fdc530ed53b44bd159f9480670b8837c31040c670e1be324e281f2dea015cee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.8.10

Release history Release notifications | RSS feed

This release

0.1.1 This release

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page