Pergunta

Eu tenho seguinte imprimir código:

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());
}

O resultado é diferente com QPrintPreviewDialog, PDF prestados, saída para impressoras (HP LaserJet, PdfFactory, pdfcreator). Na maioria das vezes o retângulo resultante é fora do papel. O que fazer para que a saída é semelhante a todas as impressoras?

Foi útil?

Solução 2

O código Qt eu revi assume 5% de papel como de margem. confia ninguém sobre as margens de papel correto.

Outras dicas

Este realmente foi perguntado há algum tempo, mas eu levei o código de cima e custou-me algumas horas para descobrir o que há de errado com ele. Em primeiro lugar, olhar para o código-fonte Qt, eu não poderia encontrar qualquer lugar que assume uma margem de 5%. Qt lê volta das margens correctamente a partir do Windows XP e você pode confiar completamente as margens da página (Qt 4.5.3 com o Windows XP).

O código acima contém duas questões: para imprimir uma paperrect, a opção FullPage deve ser definido. Em seguida, a paperRect é impresso pelo menos na visualização corretamente. Claro que não em uma impressora real, como ele é fora do pageRect. Geralmente, a impressão do paperRect não faz sentido, como, se impresso corretamente, ele está exatamente na fronteira papel.

O segundo grande problema decorre de impressão pageRect sem corrigir a origem. Se FullPage está desativado (padrão), então as mentiras origem pageRect na origem paperRect inclui, assim, as margens. Mas a impressão começa em QPoint (leftMargin, TopMargin), de modo que a margem é adicionada duas vezes.

Para corrigir o problema, pageRect.moveTo (0,0) precisa ser chamado e, em seguida, os pageRect impressões muito bem onde ele pertence.

Isso impressoras diferentes mostram diferentes resultados vem de diferentes margens de dispositivo. Apenas os dispositivos com 0-margin irá trabalhar com o código original.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top