Boa noite colegas.
Realmente o CutePDF é uma outra opção, que eu uso somente quando estou tratando com textos que contenham caracteres especiais. Para o feijão com arroz do dia a dia, ainda prefiro o PDFCreator que possui mais recursos.
O problema do colega Locio é de programação, ou melhor, de tempo para se adaptar e entender o funcionamento da Classe Win32prn().
Fiz algumas alterações, e comentei do porquê... Testei e está funcionando. Veja.
Código: Selecionar todos
Function MAIN()
Imprime( "PDFCreator", "Teste.txt", 80, .f., 58 )
RETURN(.T.)
*
*
FUNCTION Imprime( cPrinter, cArq, tamrel, ver, tampag )
////////////////////////////////////////////////////////////////////////////////
local cTexto, nLinhas, nA, cLinha, nB // oPrinter := win32prn():New(cPrinter)
*--------------------------------------
LOCAL oPrinter:= WIN32PRN():New(cPrinter), aFonts, x, nColFixed, nColTTF, ;
nColCharSet, aForms
// Abre o objeto oPrinter. As variáveis que não estiverem declaradas são
// automaticamente assumidas como default pela Win32prn().
*--------------------------------------
// LOCAL oPrinter := win32prn():new(getdefaultprinter())
// lembre-se que oPrinter é o objeto do documento da classe Win32prn() e você
// não pode usar esta variável para arquivar o namo da impressora.
// Alterei para cPrt e comentei pois usei só o PDFCreator.
// LOCAL cPrt := win32prn():new(getdefaultprinter())
*--------------------------------------
local Prn
// local nPrn:=1 // não usada.
local aPrn:= GetPrinters()
oPrinter:Landscape := .F.
oPrinter:FormType := 9
oprinter:SetPrintQuality(-1) // qualidade da impressão
oPrinter:Copies := 1
if tampag = nil
tampag := 58
endif
if cPrinter = "printfileraw"
Prn:=getdefaultprinter()
ret:=printfileraw(Prn,cArq)
@ maxrow()-8,10 say 'retorno printfileraw: ' + str(ret) + ' ' + PRN + ' ' + carq
return
endif
if empty(aPrn)
mens("NÆo encontrou impressoras instaladas....Favor Verificar a Impressora !!!")
return NIL
endif
IF ! oPrinter:Create()
mens(cor5,"Atenção !!! O Sistema encontrou um Problema ao Tentar Executar Create().")
return NIL
endif
*--------------------------------------
// Abaixo a variável cArq deve conter o nome do arquivo que deve ser gravado, e não o
// nome do arquivo texto que se deseja imprimir. Portanto vamos dar o nome de "Teste_11".
// O sufixo "pdf" será assumnido como default.
IF ! oPrinter:StartDoc( "Teste_11" )
mens("Atenção !!! O Sistema encontrou um Problema ao Tentar executar StartDoc()")
return NIL
endif
oPrinter:SetDefaultFont()
if tamrel > 80
// oPrinter:setfont('Courier New',,17,,,,255)
oPrinter:setfont(,,17,,,,255)
else
// oPrinter:setfont('Courier New',,11,,,,255)
oPrinter:setfont(,,11,,,,255)
endif
// oPrinter:TextOut( space(tamrel), .T. )
// Não entendi a finalidade da linha acima. Ela só vai imprimir em branco.
cTexto := memoread( cArq )
// nLinhas := mlcount( cTexto, tamrel, 1, .F. )
nLinhas := mlcount( cTexto, tamrel, 1, .F. )
//nConta := 0 // não é mais necessária.
for nA := 1 to nLinhas
cLinha := memoline( cTexto, tamrel, nA, 1, .F. )
// IF nCONTA = tampag
IF oPrinter:prow() >= tampag // eu prefiro assim. Usar os recurso da Classe.
oPrinter:NewPage()
oPrinter:Newline()
oPrinter:Newline()
oPrinter:Newline()
// nConta := 0
oPrinter:TextOut( cLinha, .T. ) // faltou esta linha.
else
oPrinter:TextOut( cLinha, .T. )
endif
// nConta=nConta+1
next
oPrinter:EndDoc()
oPrinter:Destroy()
RETURN NIL
Espero que tenha ficado claro. Boa sorte.