Skip to main content

pdf2dcm

PyPI version Supported Python versionsDownloads Downloads License: MITcodecovTest PipelineRelease Pipeline

PDF to DICOM Converter

Convert PDFs into standards-compliant DICOM files for PACS, radiology, and healthcare interoperability workflows.

Features

  • Convert PDFs to Encapsulated DICOM or RGB Secondary Capture DICOM
  • Preserve patient/study metadata from template DICOMs
  • Simple Python API built on pydicom
  • Compatible with PACS workflows

SETUP

Python Package Setup

The python package is available for use on PyPI. It can be setup simply via pip

pip install pdf2dcm

To the check the setup, simply check the version number of the pdf2dcm package by

python -c 'import pdf2dcm; print(pdf2dcm.__version__)'

Poppler Setup

Poppler is a popular project that is used for the creation of Dicom RGB Secondary Capture. You can check if you already have it installed by calling pdftoppm -h in your terminal/cmd. To install poppler these are some of the recommended ways-

Conda

conda install -c conda-forge poppler

Ubuntu

sudo apt-get install poppler-utils

MacOS

brew install poppler

PDF to Encapsulated DCM

Stores the original PDF directly inside a DICOM object. This is useful for:

  • Radiology or pathology or any structured clinical documents
  • PACS archival workflows

Usage

from pdf2dcm import Pdf2EncapsDCM

converter = Pdf2EncapsDCM()
converted_dcm = converter.run(path_pdf='tests/test_data/test_file.pdf', path_template_dcm='tests/test_data/CT_small.dcm', suffix =".dcm")
print(converted_dcm)
# [ 'tests/test_data/test_file.dcm' ]

Parameters converter.run:

  • path_pdf (str): path of the pdf that needs to be encapsulated
  • path_template_dcm (str, optional): Optional template DICOM used for metadata inheritance.
  • suffix (str, optional): suffix of the dicom files. Defaults to ".dcm".

Returns:

  • List[Path]: list of path of the stored encapsulated dcm

PDF to RGB Secondary Capture DCM

Renders PDF pages as RGB images and stores them as Secondary Capture DICOM instances. Useful when:

  • Encapsulated PDFs are unsupported
  • Image-based viewing is preferred
  • Legacy PACS compatibility is required

Usage

from pdf2dcm import Pdf2RgbSC

converter = Pdf2RgbSC()
converted_dcm = converter.run(path_pdf='tests/test_data/test_file.pdf', path_template_dcm='tests/test_data/CT_small.dcm', suffix =".dcm")
print(converted_dcm)
# [ 'tests/test_data/test_file_0.dcm', 'tests/test_data/test_file_1.dcm' ]

Parameters converter.run:

  • path_pdf (str): path of the pdf that needs to be converted
  • path_template_dcm (str, optional): Optional template DICOM used for metadata inheritance.
  • suffix (str, optional): suffix of the dicom files. Defaults to ".dcm".

Returns:

  • List[Path]: list of paths of the stored secondary capture dcm

Notes

  • Output DICOM filenames are derived from the input PDF filename.
  • If no template is provided no repersonalisation takes place
  • It is possible to produce dicoms without a suffix by simply passing suffix="" to the converter.run()

Metadata Inheritance

Metadata can optionally be copied from a template DICOM file to preserve patient and study context. Currently, the fields that is inherited by default are-

  • PatientName
  • PatientID
  • PatientSex
  • StudyInstanceUID

The fields SeriesInstanceUID and SOPInstanceUID have been removed from the inheritance by copying as it violates the DICOM standards.

You can set the fields to repersonalize by passing repersonalisation_fields into Pdf2EncapsDCM(), or Pdf2RgbSC()

Example:

fields = [
    "PatientName",
    "PatientID",
    "PatientSex",
    "StudyInstanceUID",
    "AccessionNumber"
]
converter = Pdf2RgbSC(repersonalisation_fields=fields)

note: this will overwrite the default fields.

The field names must be standard DICOM keywords recognized by pydicom. If a field is missing from the template, pdf2dcm uses its dictionary-defined value representation (VR) and adds an appropriate empty value. Missing UID fields receive a newly generated UID. An unknown keyword raises a ValueError.

Metadata

Release files for pdf2dcm 0.7.2

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

Source distribution (sdist)

Source distribution for pdf2dcm 0.7.2
File Size Uploaded
pdf2dcm-0.7.2.tar.gz 7.3 kB Details

Built distribution (wheel)

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

Total release size: 16.9 kB

Release files / pdf2dcm-0.7.2.tar.gz

Download URL pdf2dcm-0.7.2.tar.gz
Size 7.3 kB
Tags Source
SHA-256 checksum
How to use checksums
9390d9aa8fc3b0888d3720f838c1d217f22710cffa4c2f75e98287ac1065e76a
BLAKE2b-256 checksum
How to use checksums
3fb48b97311baeff3ae044e7e630c3040a1957a1102a4543f4c3f413338cb2c5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pdf2dcm-0.7.2-py3-none-any.whl

Download URL pdf2dcm-0.7.2-py3-none-any.whl
Size 9.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a360493771999d0c0027eda0fcd8e3250e0b31318ed91b521cb764bcbe3ae7e1
BLAKE2b-256 checksum
How to use checksums
a5f431f4cea13199d5d0ed31043d10169b004cb35396137ec82e50ae5b2e6fdf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.7.2 This release

2 release files

0.6.0

2 release files

0.5.2

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.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