Skip to main content

rtfparse

Parses Microsoft's Rich Text Format (RTF) documents. It creates an in-memory object which represents the tree structure of the RTF document. This object can in turn be rendered by using one of the renderers. So far, rtfparse provides only one renderer (HTML_Decapsulator) which liberates the HTML code encapsulated in RTF. This will come handy, for examle, if you ever need to extract the HTML from a HTML-formatted email message saved by Microsoft Outlook.

MS Outlook also tends to use RTF compression, so the CLI of rtfparse can optionally decompress that, too.

You can of course write your own renderers of parsed RTF documents and consider contributing them to this project.

Installation

Install rtfparse from your local repository with pip:

pip install rtfparse

Installation creates an executable file rtfparse in your python scripts folder which should be in your $PATH.

Usage From Command Line

Use the rtfparse executable from the command line. Read rtfparse --help.

rtfparse writes logs into ~/rtfparse/ into these files:

rtfparse.debug.log
rtfparse.info.log
rtfparse.errors.log

Example: Decapsulate HTML from an uncompressed RTF file

rtfparse --rtf-file "path/to/rtf_file.rtf" --decapsulate-html --output-file "path/to/extracted.html"

Example: Decapsulate HTML from MS Outlook email file

For this, the CLI of rtfparse uses extract_msg and compressed_rtf.

rtfparse --msg-file "path/to/email.msg" --decapsulate-html --output-file "path/to/extracted.html"

Example: Only decompress the RTF from MS Outlook email file

rtfparse --msg-file "path/to/email.msg" --output-file "path/to/extracted.rtf"

Example: Decapsulate HTML from MS Outlook email file and save (and later embed) the attachments

When extracting the RTF from the .msg file, you can save the attachments (which includes images embedded in the email text) in a directory:

rtfparse --msg-file "path/to/email.msg" --output-file "path/to/extracted.rtf" --attachments-dir "path/to/dir"

In rtfparse version 1.x you will be able to embed these images in the decapsulated HTML. This functionality will be provided by the package embedimg.

rtfparse --msg-file "path/to/email.msg" --output-file "path/to/extracted.rtf" --attachments-dir "path/to/dir" --embed-img

In the current version the option --embed-img does nothing.

Programatic usage in a Python module

Decapsulate HTML from an uncompressed RTF file

from pathlib import Path
from rtfparse.parser import Rtf_Parser
from rtfparse.renderers.html_decapsulator import HTML_Decapsulator

source_path = Path(r"path/to/your/rtf/document.rtf")
target_path = Path(r"path/to/your/html/decapsulated.html")
# Create parent directory of `target_path` if it does not already exist:
target_path.parent.mkdir(parents=True, exist_ok=True)

parser = Rtf_Parser(rtf_path=source_path)
parsed = parser.parse_file()

renderer = HTML_Decapsulator()

with open(target_path, mode="w", encoding="utf-8") as html_file:
    renderer.render(parsed, html_file)

Decapsulate HTML from an MS Outlook msg file

from pathlib import Path
from extract_msg import openMsg
from compressed_rtf import decompress
from io import BytesIO
from rtfparse.parser import Rtf_Parser
from rtfparse.renderers.html_decapsulator import HTML_Decapsulator


source_file = Path("path/to/your/source.msg")
target_file = Path(r"path/to/your/target.html")
# Create parent directory of `target_path` if it does not already exist:
target_file.parent.mkdir(parents=True, exist_ok=True)

# Get a decompressed RTF bytes buffer from the MS Outlook message
msg = openMsg(source_file)
decompressed_rtf = decompress(msg.compressedRtf)
rtf_buffer = BytesIO(decompressed_rtf)

# Parse the rtf buffer
parser = Rtf_Parser(rtf_file=rtf_buffer)
parsed = parser.parse_file()

# Decapsulate the HTML from the parsed RTF
decapsulator = HTML_Decapsulator()
with open(target_file, mode="w", encoding="utf-8") as html_file:
    decapsulator.render(parsed, html_file)

RTF Specification Links

Metadata

Release files for rtfparse 0.9.5

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

Source distribution (sdist)

Source distribution for rtfparse 0.9.5
File Size Uploaded
rtfparse-0.9.5.tar.gz 14.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for rtfparse 0.9.5
File Interpreter ABI Platform
rtfparse-0.9.5-py3-none-any.whl Python 3 none any Details

Total release size: 29.8 kB

Release files / rtfparse-0.9.5.tar.gz

Download URL rtfparse-0.9.5.tar.gz
Size 14.4 kB
Tags Source
SHA-256 checksum
How to use checksums
20abb1b031cd9ae22bdfd681e7d76e70e5276b58afd91d048679f08a9f58bb07
BLAKE2b-256 checksum
How to use checksums
9bd9ad8cbab90da379e9081b6843a2fcc760d0e6c02fee5e53ce6a5895e1b810
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-httpx/0.28.1

Release files / rtfparse-0.9.5-py3-none-any.whl

Download URL rtfparse-0.9.5-py3-none-any.whl
Size 15.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e683e562e57ae90e259c29fcdeadc9644726706a0f24e506756cddfb23f32e69
BLAKE2b-256 checksum
How to use checksums
fc6a1a718df5f4479f5dcf5cf3be017808b492e2aa65587685d7d35b58ae5094
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-httpx/0.28.1

Release history Release notifications | RSS feed

This release

0.9.5 This release

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.2

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.8

2 release files

0.7.7

2 release files

0.7.6

2 release files

0.7.5

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.7.1

2 release files

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