Re: Qt issue with printing landscape-oriented images
Johannes Meixner <[email protected]> Wed, 26 Feb 2025 13:24:36 +0100
| Newsgroups | dev.linux.lists.printing-architecture |
|---|---|
| Message-ID | <[email protected]> |
Hello,
I didn't check any details here
so only a side note for the fun of it:
There is no such thing as "landscape printing".
Cf.
https://en.opensuse.org/SDB:Landscape_Printing
On 2025-02-26 10:25, Zdenek Dohnal wrote:
> Hi Alex,
>
> thank you for heads-up!
>
> To be honest I have never seen IPP attribute landscape :D - I know
> there is IPP attribute 'orientation-requested' which is used for
> setting whether you want portrait, landscape, etc.
>
> Based on the code for image it looks like landscape is really a thing,
> and if okular wants to do landscape this way, it should pass
> landscape=true instead of false.
>
> The older cups-filters ignores anything besides landscape=true, but
> the current libcupsfilters sets "auto-rotate" if landscape=false is
> passed, which looks correct to me.
>
>
> Zdenek
>
> On 2/18/25 15:18, Alexander Pevzner wrote:
>> Hi!
>>
>> This information may be interesting for printing stack maintainers
>> of various Linus distros (Zdenek?).
>>
>> I've already posted it into the OpenPrinting Telegram group,
>> but as not everybody subscribed to the group, I repost it here,
>> by Till's advise.
>>
>> We've recently noticed, that the Okular (Qt-based image viewer)
>> incorrectly prints images in the landscape orientation.
>>
>> When printing image (see attached test.png) it sends the
>> following Create-Job request, followed by the image,
>> converted to PDF (see attached 00000020-data.pdf:
>>
>> -----
>> IPP: request message:
>> {
>> VERSION 2.0
>> OPERATION Create-Job
>>
>> GROUP operation-attributes-tag
>> ATTR "attributes-charset" charset: utf-8
>> ATTR "attributes-natural-language" naturalLanguage: en-us
>> ATTR "printer-uri" uri:
>> ipp://localhost/printers/Kyocera_ECOSYS_M2040dn
>> ATTR "requesting-user-name" nameWithoutLanguage: pzz
>> ATTR "job-name" nameWithoutLanguage: bug.png
>>
>> GROUP job-attributes-tag
>> ATTR "media" keyword: A4
>> ATTR "sides" keyword: one-sided
>> ATTR "landscape" boolean: false
>> ATTR "number-up" integer: 1
>> ATTR "number-up-layout" keyword: lrtb
>> ATTR "job-billing" nameWithoutLanguage:
>> ATTR "job-priority" integer: 50
>> ATTR "job-sheets" nameWithoutLanguage: none none
>> }
>> -----
>>
>> It can be reduced down to the very simple Qt example:
>>
>> -----
>> #include <iostream>
>> #include <QApplication>
>> #include <QPrinter>
>> #include <QPrintDialog>
>> #include <QImage>
>> #include <QPainter>
>>
>> int main(int argc, char* argv[])
>> {
>> QApplication app(argc, argv);
>> QPrinter printer;
>> printer.setPageOrientation(QPageLayout::Landscape);
>> QImage img("./test.png");
>> img = img.scaled(printer.width(), printer.height(),
>> Qt::KeepAspectRatio, Qt:
>> QPainter painter(&printer);
>> painter.drawImage(0, 0, img, 0, 0);
>> painter.end();
>> return 0;
>> }
>> -----
>>
>> The problem is obviously in the ATTR "landscape" boolean: false
>> attribute. This is definitely at the Qt side. Seems like all
>> existing versions of Qt are affected.
>>
>> We have submitted PR agains qt-base, it is pretty trivial
>> and currently on review:
>>
>> https://codereview.qt-project.org/c/qt/qtbase/+/624835
>>
>> I believe, all more or less modern Linux distros are affected
>> and wonder why nobody complained before
>>
>> Note, the problem doesn't exist with old versions of the
>> cups-filters (I was able to test with very old version1.28)
>>
>> Looks like the landscape attribute attribute is silently ignoring
>> by these old versions, and without this explicit orientation setting,
>> filters set correct orientation automatically.
>>
Kind Regards
Johannes Meixner
--
SUSE Software Solutions Germany GmbH
Frankenstr. 146 - 90461 Nuernberg - Germany
(HRB 36809, AG Nuernberg) GF: Ivo Totev