dialog image
Experience, Information Technology, Thank You Sir May I Have Another

Qt – Printing – Taxes — Pt. 2

Apple Screws The Known Universe

For whatever reason Apple (AAPL) has been allowed to maintain the CUPS (Common Unix Printing System) software for Linux and other platforms. Despite what people may tell you Apple is not a technology company, it’s a cult. That’s how you get idiots to spend over $1000 on an iDiot Phone and a ludicrous $53K for a desktop computer. Apple has, on multiple occasions abandoned computer platforms and operating systems, yet they still have loyal customers. That’s a cult. Business requires stability.

Some time around 2006 Apple decided they shouldn’t have to maintain serial and parallel port drivers for CUPS because they didn’t make any computers which had them. In the same stroke of genius they decided the incredibly mature and stable PostScript format would no longer be supported. Instead, all printers and their drivers/PPD files would now have to use PDF. They unilaterally made this decision and pushed it out with the new version of CUPS. Ubuntu rolled the new version of CUPS into their new release after testing it in true Ubuntu fashion (not at all.) Holy Hell broke loose on the message boards. Printers broke all over the place, not to mention many other things using serial and parallel ports. I went looking for some of the conversations, in particular one I had with one of the Apple developers responsible for this global cluster screw but all I could find was this bug report.

I remember a lengthy exchange.

Developer: We don’t feel we should have to support those as part of the printing system because they are device drivers. Besides, we don’t even make computers with those ports.

Me: Well you’re not a computer company, you’re a cult! Buy a real desktop. Get one from HP or Lenovo.

Developer: PDF is the new standard. Adobe stopped working on PostScript years ago.

Me: PostScript is the standard. It is a mature and stable method of communicating print information. Millions of programs around the world directly generate PostScript print files from batch programs then transmit them to where they need to be printed. You just hosed payroll, financial reporting and most other forms of business output. You laid this egg without any warning. That’s why Apple never makes it into the business world.


Trust me, things went downhill fast. Apple is used to having a cult following that will never question its wisdom, business users running various Linux distributions for various production systems were not happy about someone kicking the stool out from under them for fun.

Adding insult to injury, this was about the time when the downward spiral of Lexmark printer quality became obvious to myself and many others. The Optra R and R+ printers I had were built like tanks and worked with everything. Mine lasted about ten years and I was printing books to send off for editing. The later models, not so much. If I could get them to work with Linux I had to use a Generic Postscript PPD. As a result of this I had to generate my expense report then use a2ps on the command line so I could print my expense report to file taxes. Why is this important? If memory serves, the Apple debacle hit right when I and most others needed to work on taxes. I did manage to find an a2pdf utility but I really hate pulling down code from unknown/untrusted places. The result is I never bothered fixing the printing.

Eventually there was a “Come to Jesus” meeting between the Linux community and Apple. Many more input formats started working with CUPS, notably ASCII works again. It’s the end of the year and I decided to work on the xpnsqt program. I needed to update it because with some of the proposed changes coming in Qt 6 it might not even compile next year. I also wanted to fix the printing.

This code is not yet up on Sourceforge. But I wanted to share with you the cheap hack that should work well for most business class uses.

print report image


dialog image

dialog header

dialog source

Yes, there should be some kind of editing on pages and yes, the return value for system() should be checked.

In the next post we will discuss why a business system should do it this way and why applications written by developers on tiny computers don’t.