Clipper On Line • Ver Tópico - ajuda sobre Pdfclass

ajuda sobre Pdfclass

Projeto Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

 

ajuda sobre Pdfclass

Mensagempor jparada » 20 Out 2021 18:13

Olá,

Estou usando a classe pdfclass para um relatório fácil que estou fazendo, tudo bem, mas no final do arquivo pdf exibe a legenda "NENHUM CONTEUDO (SEM CONTEÚDO)", aqui está o código que uso (obtido dos exemplos aqui exposto no fórum)

  oPDF := PDFClass():New()
  oPDF:Begin()
  oPDF:cFileName := tempFile
  nLinha   := 75
  nPagina := 1
  nMaxCol := oPDF:MaxCol()
 
  rs:MoveFirst()
  Do While !rs:Eof()
   
    If  nLinha   > 65
      oPDF:AddPage()
     
      oPDF:DrawText(  3,  1, 'Empresa, Nil, 10, "Helvetica-Bold", Nil, Nil )
      oPDF:DrawText(  3, 80, 'Hoja ' + hb_NtoS( nPagina ), Nil, 10, "Helvetica", Nil, Nil )
      oPDF:DrawText(  4,  1, 'Reporte de existencias al ' + fechaLegible( Date() ) + ' ' + Time(), Nil, 10, "Helvetica-Bold", Nil, Nil )

      oPDF:DrawText( 6,  1, hb_utf8ToStr( 'Código' ), Nil, 10, "Helvetica-Bold", Nil, Nil )
      oPDF:DrawText( 6, 12, 'Nombre del producto' , Nil, 10, "Helvetica-Bold", Nil, Nil )     
      oPDF:DrawText( 6, 75, "Existencia", Nil, 10, "Helvetica-Bold", Nil, Nil )

      nLinha := 8
      nPagina += 1
    Endif

    oPDF:DrawText( nLinha    ,  1, rs:Fields( "codigoproducto" ):Value, NIL, 10, 'Courier-Bold', NIL, NIL )
    oPDF:DrawText( nLinha    , 12, rs:Fields( "descripcion" ):Value   , NIL, 10, 'Courier-Bold', NIL, NIL )
    oPDF:DrawText( nLinha    , 70, rs:Fields( "existencia" ):Value, '@E 99,999,999.99', 10, 'Courier-Bold', NIL, NIL )
   
    nLinha += 1.5
   
    rs:MoveNext()
 
  Enddo
 
  oPDF:End()


o que preciso para evitar aquela última página com essa legenda?

Eu aprecio sua ajuda.

Saudações,
Javier
jparada
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 4
Data de registro: 20 Out 2021 18:01
Cidade/Estado: México
Curtiu: 0 vez
Mens.Curtidas: 0 vez

ajuda sobre Pdfclass

Mensagempor JoséQuintas » 20 Out 2021 18:31

jparada escreveu:o que preciso para evitar aquela última página com essa legenda?


Era só ter olhado o fonte de onde imprime isso.

      IF ::nPdfPage == 0
         ::AddPage()
         ::DrawText( 10, 10, "NENHUM CONTEUDO (NO CONTENT)",, ::nFontSize * 2 )
      ENDIF


E procurando um pouco mais, é no oPDF:PageHeader() que soma 1 na contagem de páginas.

Opção 1:

Ao invés de oPDF:AddPage(), usar oPDF:PageHeader()

Opção 2:

Alterar diretamente oPDF:nPDFPage := 1

Opção 3:

Na verdade, pra testar pular página é oPDF:MaxRowTest()
Fazendo de cabeça, mas acho que seria isto, estilo um relatório normal feito a mão.

oPDF:nPDFRow := 99
DO WHILE ! Eof()
   oPDF:MaxRowTest()
   @ oPDF:nRow + 1, 0 SAY "xx"
  SKIP
ENDDO

oPDF
O MaxRowTest() equivale a IF lin > 66... cabecalho()... ENDIF, sendo que se não criar oPDF:acHeader(), não tem impressão de cabeçalho.

METHOD PageHeader() CLASS PDFClass

   LOCAL nCont

   IF Len( ::acHeader ) > 0
      IF ::nPageNumber != 0 .AND. ::nRow != 0 .AND. ::nPdfPage != 0
         ::PageFooter()
      ENDIF
   ENDIF
   ::nPdfPage    += 1
   ::nPageNumber += 1
   ::nRow        := 0
   Mensagem( "Impressão em andamento, folha " + StrZero( ::nPageNumber, 7 ) )
   ::AddPage()
   IF Len( ::acHeader ) > 0


METHOD MaxRowTest( nRows ) CLASS PDFClass

   hb_Default( @nRows, 0 )
   IF ::nRow > ::MaxRow() - 2 - nRows
      ::PageHeader()
   ENDIF

   RETURN Nil


Opcionalmente, se quiser que pule 3 linhas antes do final, usa MaxRowTest(3)
2 linhas foram reservadas como margem no final.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18151
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes

ajuda sobre Pdfclass

Mensagempor jparada » 20 Out 2021 19:21

oi, optei pela primeira opção, funcionando muito bem.

Obrigado pela ajuda.

Saudações,
Javier
jparada
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 4
Data de registro: 20 Out 2021 18:01
Cidade/Estado: México
Curtiu: 0 vez
Mens.Curtidas: 0 vez

ajuda sobre Pdfclass

Mensagempor jparada » 21 Out 2021 15:24

Pediram-me uma alteração no relatório, colocaram a linha de classificação do produto, e agora não estou obtendo o resultado que desejo, tenho esses relatórios funcionando gerando arquivos Excel sem problema, mas me pediram para alterá-los para pdf e não para pdf não tenho experiência, então estou tentando replicar o código que funciona no Excel para usá-lo com a classe PdfClass, até agora tenho esse código:

  
  oPDF := PDFClass():New()
  oPDF:Begin()
  oPDF:cFileName := tempFile
  nLinha   := 70 // 75
  nPagina := 1
  nMaxCol := oPDF:MaxCol()
 
  //METHOD SetInfo( cAuthor, cCreator, cTitle, cSubject ) CLASS PDFClass
  oPDF:SetInfo( 'Javier Parada', hb_utf8ToStr( '' ),'Reporte de existencias', 'empresa' )
 
  rs:MoveFirst()
  Do While !rs:Eof()
   
    idclasificacion := rs:Fields( 'idclasificacion' ):Value
     clasificacion   := rs:Fields( 'clasificacion' ):Value
   
    If  nLinha   > 60 // 65
      oPDF:PageHeader()
     
      oPDF:DrawText(  3,  1, 'Empresa', NIL, 10, 'Helvetica-Bold', NIL, NIL )
      oPDF:DrawText(  3, 80, 'Hoja ' + hb_NtoS( nPagina ), NIL, 10, 'Helvetica', NIL, NIL )
      oPDF:DrawText(  4,  1, 'Reporte de existencias al ' + fechaLegible( Date() ) + ' ' + Time(), NIL, 10, 'Helvetica-Bold', NIL, NIL )

      oPDF:DrawText( 6,  1, hb_utf8ToStr( 'Código' ), NIL, 10, 'Helvetica-Bold', NIL, NIL )
      oPDF:DrawText( 6, 12, 'Nombre del producto' , NIL, 10, 'Helvetica-Bold', NIL, NIL )     
      oPDF:DrawText( 6, 75, 'Existencia', NIL, 10, 'Helvetica-Bold', NIL, NIL )

      nLinha := 8
      nPagina += 1
    Endif   
   
    oPDF:DrawText( nLinha    ,  1, hb_Utf8ToStr( 'Clasificación: ' ) + hb_NToS( idclasificacion ) + ' - ' + clasificacion, NIL, 10, 'Courier-Bold', NIL, NIL )
    nLinha += 1

    Do While !rs:Eof() .AND. idclasificacion == rs:Fields( 'idclasificacion' ):Value

      oPDF:DrawText( ++nLinha    ,  1, rs:Fields( 'codigoproducto' ):Value, NIL, 10, 'Courier-Bold', NIL, NIL )
      oPDF:DrawText(   nLinha    , 12, rs:Fields( 'descripcion' ):Value   , NIL, 10, 'Courier-Bold', NIL, NIL )
      oPDF:DrawText(   nLinha    , 70, rs:Fields( 'existencia' ):Value, '@E 99,999,999.99', 10, 'Courier-Bold', NIL, NIL )
   
      nLinha += 1.5
   
      rs:MoveNext()
 
    Enddo

  Enddo
 
  oPDF:End()

poderia me ajudar a ver o que estou fazendo de errado, os erros é que agora não consigo controlar o salto da folha e nem todos os produtos na classificação estão imprimindo.

meu maior problema é que com o pdf não sei como controlar a quebra de folha

Eu aprecio sua ajuda.

Javier
jparada
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 4
Data de registro: 20 Out 2021 18:01
Cidade/Estado: México
Curtiu: 0 vez
Mens.Curtidas: 0 vez

ajuda sobre Pdfclass

Mensagempor Fernando queiroz » 21 Out 2021 18:16

da uma olhada na rotina que tem quebra de pagina

   oPDF := PDFClass()
   IF oPDF == NIL
      hwg_msginfo("Falha da criação do objeto PDF")
      RETURN .F.
   ENDIF
   HB_GTINFO( HB_GTI_CLIPBOARDDATA, ::cFileName)
   oPDF:cFileName    := ::cFileName
   oPDF:cDefaultPrinter := ::cDefaultPrinter

   oPDF:SetType( PDFCLASS_LANDSCAPE )

   oPDF:Begin()
   nLinha   := 100
   nPagina := 1
   nMaxCol := oPDF:MaxCol()
   
   DO WHILE ! oQuery:Eof()
      IF    nLinha   > 96
         oPDF:AddPage()

         oPDF:DrawBox( 0, 0, 9, 41, Nil, Nil, Nil )                 // box esquerdo
         oPDF:DrawImageSize( 0.5, 0.5, 8, 39, "logotipo.jpg" )             // logotipo

         oPDF:DrawBox( 0, 41, 9, 117, Nil, Nil, Nil )  // box centro
         oPDF:DrawText( 2.0, 42, RTRIM(oQuery1:Fields( "NomeUsuario" ):Value), nil, 10, "Helvetica-Bold", Nil, Nil )
         oPDF:DrawText( 3.5, 42, RTRIM(oQuery1:Fields( "n_xLgr" ):Value) + ', ' + RTRIM(oQuery1:Fields( "n_nro" ):Value), Nil, 8, "Helvetica", Nil, Nil )
         oPDF:DrawText( 5.0, 42,'BAIRRO - ' + RTRIM(oQuery1:Fields( "n_xBairro" ):Value), Nil, 8, "Helvetica", Nil, Nil )
         oPDF:DrawText( 6.4, 42, "CEP " +oQuery1:Fields( "n_CEP" ):Value + ' - ' + RTRIM(oQuery1:Fields( "n_xMun" ):Value) + ' - ' + oQuery1:Fields( "n_xUF" ):Value + " - FONE: " +oQuery1:Fields( "n_fone" ):Value, Nil, 8, "Helvetica", Nil, Nil )
         oPDF:DrawText( 8.0, 42, 'CNPJ-'+RTRIM(oQuery1:Fields( "n_CNPJ" ):Value) + '   Insc.Est.-' + RTRIM(oQuery1:Fields( "n_IE" ):Value) , Nil, 10, "Helvetica-Bold", Nil, Nil )

         oPDF:DrawBox( 0, nMaxCol, 9, 41, Nil, Nil, Nil )  // box direito
         oPDF:DrawText( 2, 120, "CONTAS A RECEBER 2" , Nil, 10, "Helvetica", Nil, Nil )
         oPDF:DrawText( 4, 120, "PAGINA Nr.: " + STRZERO(nPagina,4,0), Nil, 10, "Helvetica", Nil, Nil )
         oPDF:DrawText( 6, 120, "DATA: " + DTOC(M->DAT_HOJE), Nil, 10, "Helvetica", Nil, Nil )
         oPDF:DrawText( 8, 120, "HORA: " + TIME(), Nil, 10, "Helvetica", Nil, Nil )

         oPDF:DrawBox( 9, 0, 12, nMaxCol, Nil, Nil, Nil )
         oPDF:DrawText( 11, 1, "RELACAO DAS RECEITAS EM ABERTO DE "+DTOC(::dPERINI)+" A "+DTOC(::dPERFIN), Nil, 10, "Helvetica-Bold", Nil, Nil )

         oPDF:DrawBox( 12, 0, 14.5, nMaxCol, Nil, Nil, Nil )
         oPDF:DrawText( 14, 01, "TITULO", Nil, 10, "Helvetica-Bold", Nil, Nil )
         oPDF:DrawText( 14, 21, "CLIENTE" , Nil, 10, "Helvetica-Bold", Nil, Nil )
         oPDF:DrawText( 14, 81, "VALOR TITULO", Nil, 10, "Helvetica-Bold", Nil, Nil )      
         oPDF:DrawText( 14, 104, "ACRESCIMOS", Nil, 10, "Helvetica-Bold", Nil, Nil )   
         oPDF:DrawText( 14, 126, "TOTAL RECEBER", Nil, 10, "Helvetica-Bold", Nil, Nil )

         nLinha := 16
         nPagina += 1

      ENDIF
      
      IF oQuery:Fields( "DATVEN" ):Value != dDATVEN
         oPDF:DrawText( nLinha++, 10, "Total a RECEBER no Dia "+DTOC(dDATVEN)+" --->"+transform(TOTDIARIO,"@E 99,999,999,999.99") , Nil, 10, "Courier-Bold", Nil, Nil )   
         oPDF:DrawLine( nLinha-0.5, 0, nLinha-0.5, nMaxCol, 1 )
         nLinha++
         TOTDIARIO   := 0.00
         dDATVEN      := oQuery:Fields( "DATVEN" ):Value
      ENDIF

      MULTA:=0.00
      JUROS:=0.00
      IF (M->DAT_HOJE-oQuery:Fields( "DATVEN" ):Value) > 0
         IF M->DAT_HOJE > oQuery:Fields( "VENPRO" ):Value
            MULTA=oQuery:Fields( "MORA" ):Value*(M->DAT_HOJE-oQuery:Fields( "DATVEN" ):Value)
            JUROS=(oQuery:Fields( "VALOR" ):Value*oQuery:Fields( "PER_MULTA" ):Value*(M->DAT_HOJE-oQuery:Fields( "DATVEN" ):Value))/3000
         END
      END
      ACRESCIMOS+=MULTA+JUROS
      TOTALARECEBER+=oQuery:Fields( "VALOR" ):Value+MULTA+JUROS
      oPDF:DrawText( nLinha, 00, STRZERO(oQuery:Fields( "DOCUMENTO" ):Value,9,0) + "/" + STRZERO(oQuery:Fields( "PARCELA" ):Value,2,0), Nil, 10, "Courier-Bold", Nil, Nil )
      oPDF:DrawText( nLinha, 21, STRZERO(oQuery:Fields( "CLIENTES_ID" ):Value,9,0)+"-"+SUBSTR(oQuery:Fields( "nraz_soc" ):Value,1,27) , Nil, 10, "Courier-Bold", Nil, Nil )            
      oPDF:DrawText( nLinha, 80, oQuery:Fields( "VALOR" ):Value, "@E 99,999,999.99", 10, "Courier-Bold", Nil, Nil )
      oPDF:DrawText( nLinha, 108, MULTA+JUROS, "@E 99,999.99", 10, "Courier-Bold", Nil, Nil )
      oPDF:DrawText( nLinha, 128, oQuery:Fields( "VALOR" ):Value+MULTA+JUROS, "@E 99,999,999.99", 10, "Courier-Bold", Nil, Nil )
      nLinha +=2
      TOTDIARIO  += oQuery:Fields( "VALOR" ):Value
      TOTGERAL   += oQuery:Fields( "VALOR" ):Value

      oQuery:MoveNext()
   ENDDO   
   oPDF:DrawText( nLinha++, 10, "Total a RECEBER no Dia "+DTOC(dDATVEN)+" --->"+transform(TOTDIARIO,"@E 99,999,999,999.99") , Nil, 10, "Courier-Bold", Nil, Nil )   
   oPDF:DrawBox( nLinha, 0, nLinha+3, nMaxCol, Nil, Nil, Nil )
   oPDF:DrawText( nLinha+2, 10, "TOTAL A RECEBER NO PERIODO ==> "+transform(TOTGERAL,"@E 99,999,999,999.99") , Nil, 12, "Courier-Bold", Nil, Nil )
   
   oPDF:End(  )

   oPDF:PrintPreview(  )

RETURN NIL   
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Fernando queiroz
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 737
Data de registro: 12 Nov 2014 23:41
Cidade/Estado: Porto Alegre/RS
Curtiu: 12 vezes
Mens.Curtidas: 58 vezes

ajuda sobre Pdfclass

Mensagempor jparada » 21 Out 2021 23:27

lamento não poder entender o código de exemplo no momento.

Javier
jparada
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 4
Data de registro: 20 Out 2021 18:01
Cidade/Estado: México
Curtiu: 0 vez
Mens.Curtidas: 0 vez




Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro