Página 1 de 1

ajuda sobre Pdfclass

Enviado: 20 Out 2021 18:13
por jparada
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)

Código: Selecionar todos

  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

ajuda sobre Pdfclass

Enviado: 20 Out 2021 18:31
por JoséQuintas
jparada escreveu:o que preciso para evitar aquela última página com essa legenda?
Era só ter olhado o fonte de onde imprime isso.

Código: Selecionar todos

      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.

Código: Selecionar todos

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.

Código: Selecionar todos

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

Código: Selecionar todos

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.

ajuda sobre Pdfclass

Enviado: 20 Out 2021 19:21
por jparada
oi, optei pela primeira opção, funcionando muito bem.

Obrigado pela ajuda.

Saudações,
Javier

ajuda sobre Pdfclass

Enviado: 21 Out 2021 15:24
por jparada
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:

Código: Selecionar todos

  
  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

ajuda sobre Pdfclass

Enviado: 21 Out 2021 18:16
por Fernando queiroz
da uma olhada na rotina que tem quebra de pagina

Código: Selecionar todos

	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	

ajuda sobre Pdfclass

Enviado: 21 Out 2021 23:27
por jparada
lamento não poder entender o código de exemplo no momento.

Javier