#pdf #font #path #margin #define #ignore #image #overflowing #error-tolerant

bin+lib code-to-pdf

Generates a syntax-highlighted PDF of your source code

10 releases

Uses new Rust 2024

new 0.2.0 Apr 20, 2025
0.1.9 Apr 17, 2025
0.1.5 Mar 29, 2025

#1729 in Text processing

Download history 70/week @ 2025-03-18 327/week @ 2025-03-25 212/week @ 2025-04-01 198/week @ 2025-04-08 257/week @ 2025-04-15

1,064 downloads per month

MIT license

190KB
925 lines

code-to-pdf

Converts a folder of source code to a fully syntax-highlighted PDF

Features

  • Syntax highlights code (uses syntect for highlighting and two-face for syntax definitions)
  • Automatically handles line wrapping and page overflowing
  • Fast. Processing runs in parallel on multiple cores
  • Error-tolerant
  • Configurable (custom file exclusions, output filename, fonts)
  • Displays images
  • Respects ignore globs in .ignore and .gitignore (uses ignore)

Installation

From crates.io

cargo install code-to-pdf

Using cargo binstall

Installs a pre-built binary if it is available for your system

cargo binstall code-to-pdf

Using artefacts on Github Releases

Navigate to the latest release

Run the correct installer script for your system, or just download the correct binary directly

Build from repository source

git clone https://github.com/Tommypop2/code-to-pdf
cargo install --path ./code-to-pdf

Usage

Generating a PDF from a folder

c2pdf .

This walks the current folder and generates a syntax-highlighted PDF of all files in that folder

Excluding paths

c2pdf . --exclude pnpm-lock.yaml,*.lock

Custom output path

c2pdf . --out custom_name.pdf

Setting the font

Supports loading fonts from a path or the system fonts

# From a path
c2pdf . --font fonts/Helvetica.ttf

# From system fonts
c2pdf . --font "Arial"

Setting font size

c2pdf . --font-size 12.5 # 12.0 by default

Setting margins

c2pdf . --margin-top 20 --margin-bottom 5 --margin-left 10 --margin-right 10 # (these are the defaults)

Setting custom page text

This is text that is added to every page

c2pdf . --page-text "Hello\nWorld" # (use `\n` to indicate a newline)

Decoding

Generated PDFs can be decoded - recreating the original source tree which they were generated from

dc2pdf ./generated_pdf.pdf --out-dir ./generated # Default out-dir is `./generated`

Dependencies

~44–61MB
~755K SLoC