How to convert a TXT file to PDF
Typeset a plain-text file into a paginated PDF, and know in advance which characters will not survive the trip.
The reason to turn a text file into a PDF is almost always that somebody else has to read it, and they are not going to open a .log. A support ticket wants the error excerpt attached, not pasted. A client wants the README as a document. Someone without a spreadsheet wants the CSV. A PDF is the format that opens everywhere and looks the same when it does, and that is the entire job here.
Convert a text file to PDF
Upload the file
Drop in a .txt, .md, .log or .csv. It is read straight away and the first 800 characters appear as a preview, along with a line count, so you can see what is about to be typeset.
Pick a page size
A4 or Letter. Those are the only two, and there is no orientation control.
Pick a text size
9, 11 or 13 point. 11 is the default, and it is the one to change if your lines are wrapping.
Convert
Click Convert to PDF. It reports the page count it produced, and how many characters it could not encode.
The "?" problem, and why it is not an oversight
Know this before you convert anything that is not in a Western European language. The PDF is typeset in Helvetica — one of the standard fonts every PDF reader already has built in, which is why the output weighs kilobytes instead of megabytes. Those built-in fonts are WinAnsi-encoded. That encoding covers ASCII, the Latin-1 supplement and the Windows typographic row: English, French, German, Spanish, Italian, the Nordic languages, accented vowels, the pound, yen and euro signs, smart quotes, dashes and the trademark sign. It does not cover Cyrillic, Greek, Hebrew, Arabic, any CJK script, or a single emoji.
Characters outside that set cannot be drawn in that font at all. They become "?". Not "may become" — become. A line of Japanese customer names comes out as a line of question marks.
What the tool does about it is count them and tell you. When the conversion finishes, the note under the button says how many characters were replaced and why. That is the difference between a limitation and a trap: you learn it at conversion time, standing in front of the file, rather than after the client opens the attachment.
This is a deliberate trade rather than a thing we forgot. Supporting those scripts properly means embedding a real Unicode font, and a font covering CJK is measured in megabytes — several times the weight of everything else on this page combined, downloaded by every visitor including the ones converting an English log file. So instead: encode what the built-in font can, replace what it cannot, and say plainly how many were lost. The smart quotes, em dashes and ellipses that word processors scatter everywhere are all inside the font's encoding, so they arrive in the PDF exactly as you typed them.

Literal means literal
Four extensions are accepted — .txt, .md, .log and .csv — and all four are typeset identically: as characters on a page. There is no Markdown rendering and no CSV table. The file extension changes nothing about the output.
- A Markdown heading stays "## Results". Asterisks stay asterisks. Nothing turns bold, and no link becomes clickable.
- A CSV comes out as comma-separated lines of text. There is no grid, there are no columns, and there are no borders.
- A tab is expanded to four spaces. Tab-aligned columns will not line up the way they do in your editor, because Helvetica is proportional and four spaces of it is not a tab stop.
- Blank lines are kept exactly. A run of eight blank lines is a run of eight blank lines.
The typesetting, in numbers
None of this is adjustable beyond the two controls, so it is worth knowing what you are being handed. The margin is 54 points — three quarters of an inch — on all four sides, and there is no setting for it anywhere. Line spacing is 1.45 times the text size. Text is set flush left, ragged right, in a near-black rather than pure black.
On A4 at the default 11 point that gives you 46 lines per page. At 9 point, 56 lines. At 13 point, 38. Letter is the shorter sheet: 42 lines at 11 point. Multiply by your line count and you know how many pages you are about to hand someone, before you convert.
Will your log lines fit on one line?
Usually, at the default — but this is where people get caught, so here is the real answer. Helvetica is proportional and your terminal is not. "80 columns" has no fixed width once every character is a different width: 80 characters of lowercase prose is narrower than 80 digits, which is narrower than 80 capitals.
The A4 text column is 487 points wide. Measured against it: at 11 point that column holds 88 lowercase characters, or 79 digits. At 13 point it drops to 74 and 67. At 9 point it rises to 108 and 97.
So an 80-column line sits right on the boundary at the default size. Ordinary mixed log text — a timestamp, a level, a message — fits at 11 point with a few points to spare. A digit-heavy line, a numeric table, or anything shouting in capitals goes over and wraps onto a second line, which wrecks precisely the alignment you were trying to preserve. At 13 point most 80-column output wraps. At 9 point essentially none of it does.
If alignment matters more than legibility — and for a log excerpt or an ASCII table it usually does — use 9 point. That is the whole of the tuning advice, and it is why the size control exists at all. Wrapping is never silent, though: a wrapped line is visibly a wrapped line, and nothing is truncated or dropped. Words longer than the column are broken character by character rather than running off the page.

The filename bug, stated plainly
It is better to tell you than to let you find it. The download is named by stripping ".txt" off your filename and adding ".pdf". Only ".txt". So notes.txt becomes notes.pdf, exactly as you would expect — and app.log becomes app.log.pdf, readme.md becomes readme.md.pdf, and data.csv becomes data.csv.pdf.
It opens perfectly. It is a valid PDF with a silly name, and it affects three of the four formats this tool accepts. Rename it after it lands, or expect the person you send it to to raise an eyebrow.
Two last things. An empty file is refused with a message rather than producing a blank PDF. And your text is read and typeset entirely inside your browser — for a log file full of internal hostnames and customer identifiers, that is the part that matters most.


