Skip to content

rpptx Python bindings: what is left for a production deck chain, as one checklist #169

Description

@hadim

Thanks for #141 to #145: on main at 9a7ed714 I can open a real deck exported from Google Slides, edit runs, paragraphs,
text frames, geometry, fills, lines, pictures, notes and slide visibility, add shapes and connectors,
save, validate, reopen it in python-pptx and render it, all from Python; text_layout() gives the same
line count as my own wrap model on every text frame of the deck, which lets me drop that model. What
remains, in one list rather than one ticket per bench:

Exists in Rust, not bound

Not found in Rust, or modelled without a public API

  • Table rows and columns: add, remove, row height, cell borders.
  • Z-order: bring a shape forward or backward (new shapes are appended on top).
  • Picture crop (a:srcRect): modelled as BlipFill.source_rect (oxml-drawing/src/fill.rs:844),
    with no public setter.
  • Changing the layout a slide uses.
  • Hyperlinks on runs and shapes, read and write: the run's is modelled as hyperlink_click
    (oxml-drawing/src/text/paragraph.rs:599), which holds only the relationship id: it can be read and
    replaced through TextRunMut::properties() / set_properties(), but nothing public resolves, adds or
    retargets the hyperlink relationship.
  • Comments anchored on a shape or a text range rather than on the slide.
  • Built-in table styles: a table whose a:tableStyleId names one of PowerPoint's built-in styles
    without the package defining it (python-pptx writes every table that way) renders unstyled; the layout
    looks styles up in ppt/tableStyles.xml only (rpptx-layout/src/context.rs:2160). LibreOffice applies
    the built-in definition. Saying this is out of scope is a fine answer.

Setting Run.text invalidating every handle is filed separately.

If any of these is out of scope by design, a word saying so lets me keep a thin python-pptx step for it.

Environment: main at 9a7ed714 (S75), release build, linux x86_64, Python 3.11.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions