Passei por um problema com impressão via Terminal Service utilizando a Win32prn e gostaria de compartilhar, para facilitar a vida de alguém algum dia.
Um cliente passou a utilizar meu sistema através de acesso via Terminal Service. Tudo estava funcionando bem no inicio dos testes em sua empresa, porém ao tentar imprimir em uma impressora Brother, a impressão saia cortada ao na parte Superior e lado Esquerdo. Quando realizei os teste no meu ambiente de trabalho, utilizando uma impressora Ricoh, a impressão saiu correta, sem nenhum corte.
Atualizei os drivers no computador do cliente e no servidor do TS, tentei todos os drivers disponíveis para Brother e nenhum resultado.
A solução foi alterar no código responsável pelas impressões, agradeço ao Vagucs que me forneceu a alguns anos este código.
Fazendo testes descobri que na impressora Ricoh, ao iniciar um novo documento de impressão, Win32prn:StartDoc, os valores para ::LeftMargin e ::TopMargin eram setados, ao utilizar a Brother estes valores ficavam com zero.
A Solução foi setar as margens (::LeftMargin e ::TopMargin) antes de chamar o método ::StartDoc.
Abaixo esta como ficou meu código para setar as margens:
Código: Selecionar todos
//A Função recebe a impressora pelo parâmetro cPrinter.
oPrinter:= Win32Prn():New(cPrinter)
oPrinter:Landscape := FALSE //Layout Retrato
oPrinter:FormType := DMPAPER_A4 //Papel A4
oPrinter:Copies := nNumCopias //Total de cópias
if !oPrinter:Create()
cMsg += "Ocorreu um erro ao tentar imprimir em "+cPrinter+".*"+;
"Verifique se a impressora esta disponível."
exit
else
oPrinter:leftMargin := oPrinter:mm_To_PosX(9) //9 Milimetros
oPrinter:topMargin := oPrinter:mm_To_PosY(9) //9 Milimetros
if !oPrinter:startDoc(cRelatorio)
cMsg += "Erro de comunicação com a impressora "+cPrinter+".*"+;
"Verifique se a impressora esta ligada ou se você tem"+;
"permissão na rede para realizar impressões nesta impressora."
exit
endif
endif
//Código que faz a impressão...
No meu caso defini 9 Milímetros, podemos melhorar colocando uma condição para as margens forem Zero, então define. Ai vai a criatividade e necessidade de cada um.
Espero que alguém possa se beneficiar destas informações, e gostaria de lhe incentivar a compartilhar descobertas com todos nós. É ajudando ao grupo que poderemos nos desenvolver cada vez mais.
Abraços e Deus abençoe a todos nós!

