2014-10-10 3 views
3

Qt에서 작동하는 일부 이미지 인쇄 프로그램을 얻으려고합니다. ppd가있는 사용자 정의 프린터로 인쇄하려고합니다. 프린터로 전송할 이미지를 생성하기 위해 장치 정보를 기반으로 한 계산이 있습니다.QPrinter 해상도가 Linux에서 올바르지 않습니다.

프린터 속성을 보면 Resolution300 dpi x 300 dpi입니다.

윈도우에서는 모든 것이 정상적으로 작동하지만 리눅스에서는 계산 된 이미지 정보가 매우 커져서 파일이 폭발합니다 ... 리눅스에서 찾은 모든 데이터를 살펴보면 physicalDpiXphysicalDpiY (코드 계산에 사용됨) 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

답변

0

많은 사람들이이 질문에 대한 일반적인 답을 원합니다. pdf 또는 hp 인쇄와 같은 다른 것들에 대한 기본값 (1200)을 남기면서 사용자가 사용할 것으로 예상되는 특정 드라이버에 대한 문제를 해결했습니다. ..

내 사용자 정의 프린터 내가 그것에서 해상도를 추출 할 수 있습니다

name="printer-resolution" value="300x300dpi" 

같이 보입니다 해상도 옵션, 컵 옵션 중 하나가 포함되어 있습니다. 해당 컵 옵션이없는 경우 기본 1200을 사용할 수 있습니다.

3

먼저 물리적 장치 해상도에 의존하지 마십시오. 사용자는 해상도가 다른 프린터를 사용할 수 있으며 한 해상도 (300dpi), 다음 번에 다른 해상도 (600dpi)로 인쇄하거나 PDF 파일로 인쇄하거나 화면 해상도를 사용하는 인쇄 미리보기 창을 열 수 있습니다. 둘째, ScreenResolution은 화면에 인쇄 할 때만 사용하십시오. 고해상도 장치의 경우 너무 거칩니다. 글자와 이미지는 추악 할 것이며 페이지의 위치는 너무 낮은 정밀도로 될 것입니다.

물리적 장치 해상도 및 운영 체제에서 독립적으로 인쇄하는 경우도 QPainter 크기 조정을 통해 얻을 수 있습니다. 내가 아는 한 QPainter 기본 해상도는 1200dpi입니다. 이는 Qt가 인쇄 할 수있는 가장 효과적인 효과적인 해결책이라는 것을 의미합니다. 다음 예제는 페이지에서 내용을 그리기 전에 크기를 설정하는 방법을 보여줍니다.

QPrinter printer(QPrinter::HighResolution); 
qreal resolutionFactor = 1200/printer->resolution(); 
QPainter painter; 
painter.begin(&printer); 
painter.scale(1/resolutionFactor, 1/resolutionFactor); 
printPage(&painter); // This method should implement printing itself 
painter.end(); 

이어서 1200DPI의베이스 QPainter를 해결 드로잉 내용 (집합 X 및 Y 좌표, 이미지의 폭 및 높이 등)을 구현하는 랜더링 과정은 모든 크기 자동 해상도로 스케일링 될 것이라는 돌보는 것 대상 장치.

+0

당신의 말은 아름답습니다 - 불행히도 그것은 Windows에서만 작동합니다. 각각의 해상도가있는 여러 장치로 인쇄하려면 시스템에서 해상도를 인식 할 수 있어야합니다. Qt 인쇄가 사용자/장치 해상도를 인식 할 수 없다는 사실은 광산과 같은 문제를 야기합니다. 프린터가 300 (거대한 이미지를 처리하는 매우 큰 규모의 프린터) 만 지원하는 반면 시스템은 16 배 더 큰 처리를 시도합니다 가용 메모리 (및 특정 시스템의 디스크 공간조차도)를 초과하는 작업으로 이어진다. – Thalia

+0

하지만 코드 조각도 장치 해상도에 의존합니다 ... "printer-> resolution()"도 잘못되었으므로 불행히도 작동하지 않습니다 – Thalia

+0

QPrinter :: resolution() 값은 드라이버에서 설정합니다. 그리고 리눅스 드라이버가 항상 1200을 반환한다면, 나는 물리적 인 해상도로 콘텐츠를 추가적으로 확장 할 것입니다. 방금 Windows 및 Linux (OpenSUSE, 삼성 레이저 프린터)에서 Qt 코드에서 인쇄를 시도했지만 두 경우 모두 종이에 같은 크기의 출력물을 얻었습니다. 600dpi로 인쇄하더라도 resolution()이 Linux에서 1200을 반환한다는 것은 사실이지만, 필자는 종이에서 정확한 출력을 얻고 있습니다. – user645859

관련 문제