If you run a business on Xinuos SCO OpenServer, you already know the shape of this problem. The application works. It has worked for twenty years. But everything it produces comes out as plain, fixed-width text: invoices, delivery notes, statements, picking lists, end-of-day reports. That text was designed for a line printer, and a line printer is often still where it goes.
Getting any of it into a PDF, one you can email to a customer, archive, or put on headed paper, is where it gets awkward. The old options were a commercial print-to-PDF product with per-CPU licensing, or a pile of PostScript and Ghostscript glue that nobody wants to maintain. Neither is appealing on a machine you are trying to keep stable.
There is a simpler way now, and it needs nothing on the SCO box except a tool you have probably already installed.
If you have worked through the SCO OpenServer binaries page, the first thing you installed was curl with TLS. That single binary is what makes this possible. It lets the SCO box make a secure HTTPS call to a modern endpoint and get a real response back.
I run a service at that does one job: you send it fixed-width text, it sends back a PDF. It understands the things that matter for legacy output, like fixed page lengths, form feeds, and the old code pages that carry line-drawing characters. There is nothing to install on SCO, nothing to license, and the application it is reporting on is never touched.
How to use the PDF Generation Service
The simplest version: text in, PDF out.
Here is the whole thing. Take any text file your system produces and pipe it to curl:
cat invoice.txt | curl -s \ -F "text=@-" \ https://pdf.tachytelic.net/api/render-raw \ -o invoice.pdf
That is it. invoice.pdf lands on the box, ready to email, copy off, or print. No JSON to parse, no base64 to decode, just the PDF bytes written straight to a file.
Most legacy reports are laid out for a fixed page, usually 66 lines, so it is worth saying so:
cat invoice.txt | curl -s \
-F "text=@-" \
-F 'options={"lines":66}' \
https://pdf.tachytelic.net/api/render-raw \
-o invoice.pdf
Branding the PDF
A plain PDF of monospaced text is useful, but it is not something you would send to a customer. This is where it gets interesting and enables you to replace pre-printed stationary.
Design your letterhead once, as an ordinary PDF (Word, Canva, whatever you like), and keep a copy on the SCO box. Then hand it to curl as a background, and your text is printed straight onto it:
cat invoice.txt | curl -s \ -F "text=@-" \ -F "[email protected]" \ -F 'options={"lines":66}' \ https://pdf.tachytelic.net/api/render-raw \ -o invoice.pdf
Your fixed-width data lands in the right places on your headed paper. The output looks like your real stationery, produced by the same application that has always produced it.

Getting the layout right
Fixed width output has its quirks, and the settings that deal with them are worth knowing:
linessets the page length. Match it to your source (66 is common) so each printed page maps to one PDF page.encodingtells it how to read your bytes. If your reports draw boxes and tables with line characters, they are almost certainly in an old code page.cp850covers most of it.skipEachPageblanks a header line that repeats at the top of every page, if your spool format has one.
Working these out by trial and error over an SSH session is tedious, so there is a small tool for it: pdf-tool.tachytelic.net.
Load a sample of your output, adjust the options until the preview looks right, and it hands you the exact settings and the matching command. Do that once on your PC, then use the settings on the box.
What to do with the PDF
Once the SCO box can produce a PDF on demand, a lot opens up:
- Email it. Pipe it out through your mailer and the customer gets a proper invoice instead of a posted printout.
- Use cURL to send it to a web service of your choice for further automations.
- Archive it. Keep a dated copy on a modern share via rsync, so you have a real record that is not tied to the old line printer.
- Retire the printer. Deliver documents as files instead of paper.
- None of this replaces the application. It sits alongside it, using the plain text it already produces.
The same curl that made the PDF can post it straight to another service. Once the box can make an HTTPS request, the whole modern automation world is in reach:
- Drop the file into SharePoint or OneDrive with Microsoft Graph.
- Kick off a Power Automate or Zapier flow.
- File it in a document system.
- Hand it off to your own API.
The SCO box stops being an island.
Prefer it done for you?
Everything above is the do-it-yourself route, and for plenty of people that is exactly right.
If you would rather not build and maintain it, DocuSwift is the same idea as a finished product. It captures the print output, generates a fully branded PDF, and puts it into a Microsoft Teams app stored in your own Office 365, indexed so you can find any document later, with optional automatic sending to your customer or supplier.
This page shows how to do it with curl. DocuSwift is the same job, done for you or get in touch to discuss your specific requirements.
It is not only for SCO
The service is deliberately generic. It does not know or care that the text came from SCO.
Any legacy system that produces fixed-width output can use it the same way: old ERPs, accounting packages, spool files saved as text, anything that still prints to a line printer.
There is also a Power Platform connector, PDF Tools by Tachytelic, if you want the same rendering inside Power Automate. But for a legacy Unix box, the curl one-liner is the whole story.
Fair use, and using it in a production Scenario
The public endpoint is free and needs no key. To keep it available for everyone, it is rate limited to 60 requests a minute from any single machine. That is plenty for testing, occasional jobs, or a low-volume site.
The moment this becomes part of a real business process, you will want more, and the answer is an API key. A key lifts those limits and gives you your own daily allowance, sized to what you actually do, whether that is a nightly run of hundreds of invoices or steady volume all day.
Keys are about as simple as it gets. You send your key with the request and the free-tier limits no longer apply to you. Nothing about how you call it changes except the key:
cat invoice.txt | curl -s \ -F "text=@-" \ -H "x-api-key: your-key-here" \ https://pdf.tachytelic.net/api/render-raw \ -o invoice.pdf
Get in touch for a key and I will set an allowance that fits your usage.
Need help modernising a legacy system?
This is one small example of what becomes possible once a legacy system can talk to a modern endpoint.
I work with SCO OpenServer and other legacy platforms, and a great deal of that work is exactly this: taking something that still runs the business and quietly giving it modern capabilities, without the risk of a rip-and-replace.
If you have an old system producing output you wish you could do more with, get in touch or for more information see my SCO OpenServer Support Page.
