문제

인쇄 코드를 따릅니다.

void Print(QPrinter *printer)
{
    QPainter q(printer);
    q.setRenderHint(QPainter::HighQualityAntialiasing, true);

    q.setPen(QPen(QColor("red")));
    q.drawRect(printer->pageRect());
    q.drawLine(printer->pageRect().topRight(), printer->pageRect().bottomLeft());

    q.setPen(QPen(QColor("blue")));
    q.drawRect(printer->paperRect());
    q.drawLine(printer->paperRect().topRight(), printer->paperRect().bottomLeft());
}

결과는 QprintpreviewDialog, PDF 렌더링, 프린터 출력 (HP LaserJet, PDFFACTORY, PDFCREATOR)에서는 다릅니다. 대부분의 경우 결과 사각형은 종이가 없습니다. 그렇게해야 할 일은 모든 프린터와 유사합니다.

도움이 되었습니까?

해결책 2

검토 한 QT 코드는 종이의 5%를 여백으로 가정합니다. 올바른 종이 마진을 신뢰하는 사람은 없습니다.

다른 팁

이것은 실제로 얼마 전에 묻는 질문을 받았지만, 나는 위에서 코드를 가져 와서 그것을 알아내는 데 몇 시간이 걸렸습니다. 먼저 QT 소스 코드를 살펴보면 5% 마진을 가정하는 곳을 찾을 수 없었습니다. QT는 Windows XP에서 여백을 올바르게 읽고 페이지 여백을 완전히 신뢰할 수 있습니다 (Windows XP의 QT 4.5.3).

위의 코드에는 두 가지 문제가 포함되어 있습니다. paperRect를 인쇄하려면 전체 페이지 옵션을 설정해야합니다. 그런 다음 PaperRect는 적어도 미리보기에 올바르게 인쇄됩니다. 물론 PageRect 외부에 있기 때문에 실제 프린터에 있지 않습니다. 일반적으로 PaperRect를 인쇄하는 것은 제대로 인쇄 된 경우 종이 경계에 정확히 있습니다.

두 번째 주요 문제는 원점을 수정하지 않고 Pagerect 인쇄에서 비롯됩니다. FullPage가 비활성화 된 경우 (기본값) PageRect 원점은 PaperRect 원점에 있으므로 여백이 포함됩니다. 그러나 인쇄는 QPoint (LeftMargin, TopMargin)에서 시작되므로 여백이 두 번 추가됩니다.

이 문제를 해결하려면 PageRect.Moveto (0,0)를 호출 해야하는 다음 PagerEct가 속한 위치에 잘 인쇄해야합니다.

다른 프린터가 다른 장치 마진에서 다른 결과를 보여줍니다. 0 마진이있는 장치 만 원래 코드에서 작동합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top