txt-to-pdf
Text to PDF
Set a plain text file on paper, at a size and margin you choose.
- Reads
- a text file — text/plain
- Writes
- one file — PDFs
- Tool page
- /txt-to-pdf
Example
Make a plain-text log into something you can attach to a ticket.
Given
- notes.txt — a plain text file
From code
import { loadDocument, runOperation } from '@pagecraft/core';
const notes = await loadDocument({ bytes, name: 'notes.txt' });
const [output] = await runOperation('txt-to-pdf', [notes], {
size: 'a4',
margin: 20,
font: 'mono',
});
From a shell
pagecraft txt-to-pdf notes.txt --size a4 --margin 20 --font mono
What comes back
One PDF, containing “Quarterly report”.
This example is run by the test suite. If it stopped being true, the build would fail.
Options
filename--filename
string
Filename
What the PDF will be called.
Default: ''
size--size
string, one of
Page size
Default: 'a4'
source— The size and margins in the file, or A4 with 20mm where it names none.a3— A3a4— A4a5— A5a6— A6b5— B5letter— Letterlegal— Legaltabloid— Tabloidexecutive— Executivecustom— Custom size
width--width
number
Width
Only when size is 'custom'.
Default: 210
height--height
number
Height
Only when size is 'custom'.
Default: 297
orientation--orientation
string, one of
Orientation
Default: 'portrait'
portrait— Portraitlandscape— Landscape
margin--margin
number
Margin
Default: 20
unit--unit
string, one of
Measured in
Default: 'mm'
mm— Millimetrescm— Centimetresin— Inchespt— Points
fontSize--font-size
number (pt)
Text size
Default: 11
lineHeight--line-height
number
Line spacing
A multiple of the text size. 1.4 is what a book uses.
Default: 1.4
align--align
string, one of
Alignment
Default: 'left'
left— Even word spacing; an uneven right edge.justify— Both edges flush; the word spacing stretches to do it.
font--font
string, one of
Typeface
Default: 'mono'
sans— Helvetica.serif— Times.mono— Courier.
fontFile--font-file
Uint8Array
Font file
A TrueType or OpenType font to set the text in. Needed for scripts the built-in fonts do not cover, unless the host supplies one.
reflow--reflow
boolean
Reflow the paragraphs
Join each paragraph up and let the lines fall where the page puts them. Off, every line in the file stays a line.
Default: false
What it cannot do
- The file has to be UTF-8. A file saved in a legacy encoding arrives with its accented characters mangled, because nothing in it says which encoding that was.
- A line too long for the measure is broken where it reaches the edge rather than lost, which will fall mid-word.
- A form feed starts a new page, as it does on a printer. Nothing else in the file is layout.
- Text is set in the standard fonts every reader already carries, so the file renders identically on a machine that has none of your fonts installed. Anything they cannot draw needs a font file, which is embedded and subsetted into the PDF with it.
- A font file you supply is used for everything: bold, italic and monospaced text are all drawn in that one face rather than in a bold, italic or fixed-width cut of it. Code blocks and columns of figures lose their alignment as a result, so supply one only when the built-in fonts cannot draw your text.
- Shaping and joining come from the font itself, and nothing reorders a line: text is drawn in the order it is given, so a line mixing right-to-left and left-to-right writing comes out in that order rather than in reading order.