Gerando um arquivo em PDF sem interface

Blog Advpl - Share knowledge

Gerando um arquivo em PDF sem interface

 

Outro dia me perguntaram se era possível gerar um arquivo PDF no Protheus, mas sem que abri-se uma tela, procura daqui, procura dali, encontrei a função FWMSPrinter, é o mesmo componente utilizado na geração da Danfe. Para mais detalhes consulte http://tdn.totvs.com/display/public/mp/FWMsPrinter

Abaixo tem um bom exemplo funcional para mostrar o seu funcionamento

#INCLUDE "RPTDEF.CH"
#INCLUDE "FWPrintSetup.ch"
#INCLUDE "protheus.ch"
User Function fPrintPDF() 
	Local lAdjustToLegacy := .F.
	Local lDisableSetup  := .T.
	Local oPrinter
	Local cLocal          := "c:\siga\"
	Local cCodINt25 := "34190184239878442204400130920002152710000053475"
	Local cCodEAN :=      "123456789012"   
	Local cFilePrint := ""
	oPrinter := FWMSPrinter():New('orcamento_000000.PD_', IMP_PDF, lAdjustToLegacy,cLocal, lDisableSetup, , , , , , .F., )
	oPrinter:FWMSBAR("INT25" /*cTypeBar*/,1/*nRow*/ ,1/*nCol*/, cCodINt25/*cCode*/,oPrinter/*oPrint*/,.T./*lCheck*/,/*Color*/,.T./*lHorz*/,0.02/*nWidth*/,0.8/*nHeigth*/,.T./*lBanner*/,"Arial"/*cFont*/,NIL/*cMode*/,.F./*lPrint*/,2/*nPFWidth*/,2/*nPFHeigth*/,.F./*lCmtr2Pix*/)
	oPrinter:FWMSBAR("EAN13" /*cTypeBar*/,5/*nRow*/ ,1/*nCol*/ ,cCodEAN  /*cCode*/,oPrinter/*oPrint*/,/*lCheck*/,/*Color*/,/*lHorz*/, /*nWidth*/,/*nHeigth*/,/*lBanner*/,/*cFont*/,/*cMode*/,.F./*lPrint*/,/*nPFWidth*/,/*nPFHeigth*/,/*lCmtr2Pix*/)
	oPrinter:Box( 130, 10, 500, 700, "-4")
	oPrinter:Say(210,10,"Teste para Code128C")
	cFilePrint := cLocal+"orcamento_000000.PD_"
	File2Printer( cFilePrint, "PDF" )
        oPrinter:cPathPDF:= cLocal 
	oPrinter:Preview()
Return
Arquivos include – Gerando um arquivo em PDF sem interface

 

 

 

6 comentários

  1. luciano.aol disse:

    Por favor se puder enviar os arquivos “RPTDEF.CH” e “FWPrintSetup.ch” pq sem eles não roda.
    luciano.aol@gmail.com

  2. Bom dia,
    Estou precisando gerar um arquivo PDF, utilizei o exemplo acima, e funcionou. Não sei o que aconteceu que parou de funcionar. O programa gera o .rel e nao consegue gerar o pdf, mas não gera nenhum erro.
    parace que a funcao File2Printer( cFilePrint, “PDF” ) não consegue gerar.
    Onde obtenho informações a respeito desta função?

    • Moderador disse:

      Boa tarde!

      Poderia enviar para nosso e-mail (contatos@blogadvpl.com) o seu fonte para compararmos.

      Possíveis problemas para não gerar o arquivo PDF:
      1. caracteres especiais no nome do arquivo (incluindo acento)
      2. caracteres especiais no caminho onde será gravado o PDF
      3. caminho não existente

      Aguardamos seu retorno

  3. Bom dia ,
    Obrigada pelo retorno
    Segue o programa de teste copiei e executei, que so gera o arquivo orcamento_000000.rel no diretorio d:temp

    #INCLUDE "RPTDEF.CH"
    #INCLUDE "FWPrintSetup.ch"
    #INCLUDE "protheus.ch"
    User Function BoletoPDF() 
        Local lAdjustToLegacy := .F.
        Local lDisableSetup  := .T.
        Local oPrinter
        Local cLocal          := "d:temp"
        Local cCodINt25 := "34190184239878442204400130920002152710000053475"
        Local cCodEAN :=      "123456789012"   
        Local cFilePrint := ""
        oPrinter := FWMSPrinter():New('orcamento_000000.PD_', IMP_PDF, lAdjustToLegacy,cLocal, lDisableSetup, , , , , , .F., )
        oPrinter:FWMSBAR("INT25" /*cTypeBar*/,1/*nRow*/ ,1/*nCol*/, cCodINt25/*cCode*/,oPrinter/*oPrint*/,.T./*lCheck*/,/*Color*/,.T./*lHorz*/,0.02/*nWidth*/,0.8/*nHeigth*/,.T./*lBanner*/,"Arial"/*cFont*/,NIL/*cMode*/,.F./*lPrint*/,2/*nPFWidth*/,2/*nPFHeigth*/,.F./*lCmtr2Pix*/)
        oPrinter:FWMSBAR("EAN13" /*cTypeBar*/,5/*nRow*/ ,1/*nCol*/ ,cCodEAN  /*cCode*/,oPrinter/*oPrint*/,/*lCheck*/,/*Color*/,/*lHorz*/, /*nWidth*/,/*nHeigth*/,/*lBanner*/,/*cFont*/,/*cMode*/,.F./*lPrint*/,/*nPFWidth*/,/*nPFHeigth*/,/*lCmtr2Pix*/)
        oPrinter:Box( 130, 10, 500, 700, "-4")
        oPrinter:Say(210,10,"Teste para Code128C")
        cFilePrint := cLocal+"orcamento_000000.PD_"
        File2Printer( cFilePrint, "PDF" )
        //oPrinter:Preview()     
        
    Return
    
    • Moderador disse:

      Olá!
      Neste exemplo é necessário que a propriedade Preview() esteja habilitada, mas para gravar o PDF em alguma pasta definida por você é necessário incluir a propriedade cPathPDF
      Exemplo:
      oPrinter:cPathPDF:= cLocal

      Atualizei o fonte para que você possa visualizar melhor.

Português Português Español Español English English