Qt에서 작동하는 일부 이미지 인쇄 프로그램을 얻으려고합니다. ppd가있는 사용자 정의 프린터로 인쇄하려고합니다. 프린터로 전송할 이미지를 생성하기 위해 장치 정보를 기반으로 한 계산이 있습니다.QPrinter 해상도가 Linux에서 올바르지 않습니다.
프린터 속성을 보면 Resolution
은 300 dpi x 300 dpi
입니다.
윈도우에서는 모든 것이 정상적으로 작동하지만 리눅스에서는 계산 된 이미지 정보가 매우 커져서 파일이 폭발합니다 ... 리눅스에서 찾은 모든 데이터를 살펴보면 physicalDpiX
및 physicalDpiY
(코드 계산에 사용됨) 1200 대신
300입니다 그래서 QPrinter에 비난 :: PrinterMode는
QPrinter :: 고해상도 2 Windows의 경우는, 사용중인 프린터에 대해 정의 프린터 해상도를 설정합니다. PostScript 인쇄의 경우 PostScript 드라이버의 해상도를 1200dpi로 설정합니다.
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 }
숫자가 리눅스에서 해결 잘못하지만 올바른 : -
내가 알아서 내 생성자를 변경 단지의 경우 기본값이 잘못에 ... 그것은 작동하지 않았다 Windows에서
는
this-> setResolution (300)을 시도;
이로 인해 this.resolution()은 300이되지만 physicalDpiX와 Y는 여전히 1200이됩니다.
QPrinter::supportedResolutions()
는 가 어떻게 내 프린터가 프린터 속성에서 표시되는 해상도를 참조해야합니까 ... 경우 희망이라고 말할 것 같다?컵에서 몇 가지 방법을 가져올 수있는 유일한 희망입니까? 시도한 ... 내가 찾은 정보 만 사용하는 방법을 모르겠다. cups Resolution
당신의 말은 아름답습니다 - 불행히도 그것은 Windows에서만 작동합니다. 각각의 해상도가있는 여러 장치로 인쇄하려면 시스템에서 해상도를 인식 할 수 있어야합니다. Qt 인쇄가 사용자/장치 해상도를 인식 할 수 없다는 사실은 광산과 같은 문제를 야기합니다. 프린터가 300 (거대한 이미지를 처리하는 매우 큰 규모의 프린터) 만 지원하는 반면 시스템은 16 배 더 큰 처리를 시도합니다 가용 메모리 (및 특정 시스템의 디스크 공간조차도)를 초과하는 작업으로 이어진다. – Thalia
하지만 코드 조각도 장치 해상도에 의존합니다 ... "printer-> resolution()"도 잘못되었으므로 불행히도 작동하지 않습니다 – Thalia
QPrinter :: resolution() 값은 드라이버에서 설정합니다. 그리고 리눅스 드라이버가 항상 1200을 반환한다면, 나는 물리적 인 해상도로 콘텐츠를 추가적으로 확장 할 것입니다. 방금 Windows 및 Linux (OpenSUSE, 삼성 레이저 프린터)에서 Qt 코드에서 인쇄를 시도했지만 두 경우 모두 종이에 같은 크기의 출력물을 얻었습니다. 600dpi로 인쇄하더라도 resolution()이 Linux에서 1200을 반환한다는 것은 사실이지만, 필자는 종이에서 정확한 출력을 얻고 있습니다. – user645859