Impressão FWMsPrinter usando método SayAlign e Say

Estou utilizar o objeto FWMsPrinter para criar impressões de relatórios gráficos (como boleto, etc.) e me deparei com uma situação que preciso de uma ajuda de vocês.

Ocorre que o método Say só imprime texto alinhado à esquerda, e existe também o método SayAlign que serve para impressão usando outros alinhamentos (esquerda, direita, centralizado, superior, inferior, etc.) ele dá muita flexibilidade nessa operação.

O problema está no alinhamento entre esses dois métodos. Se eu imprimo um texto usando Say, o sistema entende que a coordenada linha fica na parte inferior do texto, e quando imprimo usando SayAlign a coordenada é da parte superior. Como eu poderia fazer um ajuste de nessa coordenada para que esses dois métodos imprimam no mesmo alinhamento?

Eu poderia converter tudo para SayAlign, mas isso vai exigir um pouco de refatoração, se houvesse uma forma de compensar essa diferença ajudaria muito.

Abaixo um trecho de como estou imprimindo o meu texto para mostrar a situação:


    nLin    := 200
    oRpt:line(nLin,0,nLin,500)
    oRpt:Say (nLin,050, "EXEMPLO SAY",oFonte08N)
    oRpt:SayAlign(nLin            ,;    //01
                060                ,;    //02
                "EXEMPLO SAYALIGN",;    //03
                oFonte08N        ,;    //04
                500                ,;    //05 Largura
                100                ,;    //06 Altura
                                ,;    //07 Cor
                0                ,;    //08 0=Esquerda
                1                 )    //09 1=Superior

Observem como fica os dois textos na imagem anexa.

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Olá boa tarde,

Segue informações da TOTVS:

https://centraldeatendimento.totvs.com/hc/pt-br/articles/360040194533-Cross-Segmentos-TOTVS-Backoffice-Linha-Protheus-ADVPL-FWMSPrinter-m%C3%A9todo-SayAlign-definir-o-espa%C3%A7amento

No meu caso, eu sempre subtraio 8 da linha posicionada que preciso imprimir.

Por exemplo:

oPrint:SayAlign(nLin-008,470, nQtde , oFont8,85,/nWidth/,CLR_BLACK,1,0) //QUANTIDADE

oPrint:Say(nLin,580, cUnidade , oFont8,/nWidth/,CLR_BLACK) //UNIDADE

Não sei se essa informação ajuda.

Grato.

Josuel só subtrair uma quantidade fixa não resolve, porque se a fonte for maior ou menor esse valor vai variar, então eu teria que ficar testando e ajustando para cada tamanho de fonte.