Я пытаюсь получить программу печати изображений для работы в Qt. Попытка печати на пользовательский принтер, для которого есть ppd. Существуют расчеты, основанные на информации об устройстве, для создания изображения, которое должно быть отправлено на принтер.Решение QPrinter ошибочно в Linux
При взгляде на свойства принтера я вижу, что Resolution
- 300 dpi x 300 dpi
.
В окнах все работает нормально, но в Linux вычисляемая информация об изображении становится очень большой, что делает мои файлы взрывоопасными ... Просматривая все данные, я обнаружил, что в Linux physicalDpiX
и physicalDpiY
(используется при вычислении кода) в 1200 вместо 300.
Так что я виню его на QPrinter :: PrinterMode
QPrinter :: высокого разрешения 2 в Windows устанавливает разрешение принтера в , который определил для принтера. Для печати PostScript устанавливает разрешение драйвера PostScript на 1200 dpi.
Я изменил свой конструктор, чтобы заботиться о нем - только в случае, если по умолчанию не правы ... Это не сработало:
Printer::Printer(const QPrinterInfo& printerInfo, MainWindow* pWnd) :
#if defined(Q_OS_WIN32) || defined (Q_MAC_OSX)
QPrinter(QPrinter::HighResolution)
#else
QPrinter(QPrinter::ScreenResolution)
#endif
{
qDebug()<<"printer resolution physicalDpiX="<< this->physicalDpiX()<<", physicalDpiY="<<this->physicalDpiY();
// prints 1200 for each in Linux, 300 in windows
qDebug()<<"printer resolution="<< this->resolution();
// prints 96 in Linux, 300 in windows
// printer properties (like from system-config-printer) show 300
// printerInfo.printerName() and printerInfo.defaultPrinter().printerName() show my printer
}
числа неверны для разрешения в Linux, но правильно в ОС Windows
Пробовал
this-> setResolution (300);
Это сделано.разрешение() становится 300, но физическийDpiX и Y показывают 1200 неподвижных.
QPrinter::supportedResolutions(), кажется, говорят, что дело безнадежно ...
Как мне сделать мой принтер увидеть разрешение, показанное в свойствах принтера?
Есть единственная надежда вытащить некоторые методы из чашек? Я пробовал ... Я не понимаю, как использовать единственную информацию, которую я нашел: cups Resolution
Что вы говорите красиво - к сожалению, оно работает только в Windows. Печать на нескольких устройствах, каждая со своим разрешением, требует, чтобы система могла распознавать разрешение. Тот факт, что печать Qt неспособна распознать разрешение пользователя/устройства, приводит к таким проблемам, как мой: пока принтер поддерживает только 300 (принтер с очень крупным масштабом, который работает с гигантскими изображениями), система попытается обработать что-то в 16 раз больше , что приводит к работам, которые превышают доступную память (и даже дисковое пространство на определенных системах). – Thalia
Но ... Ваш фрагмент кода также зависит от разрешения устройства ... К сожалению, он не работает, так как «printer-> resolution()» неверно тоже – Thalia
Значение QPrinter :: resolution() устанавливается драйвером, и если драйвер Linux всегда возвращает 1200, я предполагаю, что он дополнительно масштабирует содержимое до физического разрешения. Я просто попытался напечатать что-то из Qt-кода на Windows и Linux (OpenSUSE, лазерный принтер Samsung), и в обоих случаях я получил одинаковый размер вывода на бумаге. Это правда, что resolution() возвращает 1200 на Linux, даже если я печатаю в 600 dpi, но, как я уже сказал, я получаю правильный вывод на бумаге. – user645859