Tinha muito disto na NFCe.
Código: Selecionar todos
nLinha := 1
DO WHILE .T.
cLinha := Trim( MemoLine( ::aDest[ "xNome" ], 44, nLinha ) )
IF Empty( cLinha )
EXIT
ENDIF
::DrawTexto( 37, ::nLinhaPDF - 10, 220, NIL, cLinha, HPDF_TALIGN_LEFT, ::oPDFFontNormal, 7 )
::nLinhaPDF -= 10
nLinha++
ENDDO
Código: Selecionar todos
FOR EACH oElement IN ::FormatMemoAsArray( ::aDest[ "xNome" ] )
::DrawTexto( 37, ::nLinhaPDF - 10, 220, NIL, oElement, HPDF_TALIGN_LEFT, ::oPDFFontNormal, 7 )
::nLinhaPDF -= 10
NEXT
Código: Selecionar todos
METHOD FormatTextAsArray( cText, nLarguraCol )
LOCAL aText := {}, nCont, cLinha
FOR nCont = 1 TO 100
cLinha := MemoLine( cText, nLarguraCol, nCont )
IF Empty( cLinha )
EXIT
ENDIF
AAdd( aText, cLinha )
NEXT
RETURN aText
Depois, foi só usar outra função já existente
Código: Selecionar todos
HPDF_Page_SetFontAndSize( ::oPdfPage, ::oPDFFontBold, 7 )
cText := ::FormataMemo( cText, Int( 220 / 60 * nLarguraCol ) )
Agora é testar com vários CFes.
por enquanto o antes e o depois, com o ajuste por "largura em pdf".
Achei interessante usar o FOR/EACH pra isso, por isso postando como mais um exemplo de uso.
Nota: reduziu cerca de 25 linhas, mesmo com a adição do novo recurso.
https://github.com/JoseQuintas/sefazcla ... d8bd887207

