Harupdf: Numerando páginas no final / selecionando página

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

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harupdf: Numerando páginas no final / selecionando página

Mensagem por JoséQuintas »

Quando mexi na classe Sefaz pra geração de PDF de NFE, necessitava de determinado recurso pra facilitar.
Acabei postando no github da harupdf, como um pedido de alteração.

Tudo bem, postei em novembro/2016 e a ajuda veio agora abril/2017, mas já vai ajudar a deixar mais simples:

https://github.com/libharu/libharu/issues/141

Problema:
Numerar páginas do PDF de NFE somente no final, pois só no final se sabe quantas páginas vai dar

Minha solução:
Faço cálculos antes de de gerar o PDF, baseado nos campos variáveis, e item por item

Com essa resposta:
Basta gerar o PDF normalmente, e numerar no final.
A única necessidade é salvar o retorno de HPDF_AddPage() num array, pra ter acesso a cada página no final.

É só pra repassar o recurso, e também pra lembrar que harupdf tem documentação na internet, suporte, etc.
Lembrando também que não importa a linguagem de programação, as soluções serão idênticas, talvez só o código fonte que não.

Depois vou analisar com calma, pra simplificar o DaNFe. Talvez até dê pra acrescentar também no DaCte e DaMDFe.
Vai eliminar uma rotina chatinha.... rs
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Harupdf: Numerando páginas no final

Mensagem por asimoes »

Quintas,

Eu não uso nada de NFE, mas esse cálculo para saber o número de páginas acho interessante, como é você considera uma página cheia: registros + cabeçalho + rodapé ?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harupdf: Numerando páginas no final

Mensagem por JoséQuintas »

Harupdf é pra PDF.
Estamos falando das páginas do PDF.
É tudo que sai em cada página.

Por falar nisso... são 1001 utilidades.
Por exemplo, pra criar um índice, ou outras coisas mais.
Daria pra atualizar qualquer página no final.

Só lembrar do recurso quando precisar de algo extra.

Ao invés de oPage := HPDF_AddPage()
No final usaria oPage := oPageList[ nCont ]

Pro manual do Harbour, por exemplo....

(Considerando um índice pra sair no ínicio e não no final).
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harupdf: Numerando páginas no final

Mensagem por JoséQuintas »

Eu não uso nada de NFE, mas esse cálculo para saber o número de páginas acho interessante, como é você considera uma página cheia: registros + cabeçalho + rodapé ?
Não sei se esta perguntando do meu cálculo.
É mais complicado porque cada produto pode usar uma quantidade de linhas diferentes, cada produto pode ou não ter uma ou mais linhas de observações, a a própria observação pode utilizar o campo próprio, continuar no centro da primeira página, e continuar em páginas seguintes
Sem falar que a quebra de linha é de acordo com o espaço necessário no PDF, e não pela largura em caracteres.

Todo cálculo podendo ser eliminado com o uso do recurso acima.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Harupdf: Numerando páginas no final

Mensagem por Pablo César »

Em HMG o Dr. Claudio em concesso com ideias no fórum e a pedido de Rathinagiri, foi elaborado uma função que grava em arquivos metafiles depois de te-los gerado.

http://www.hmgforum.com/viewtopic.php?p=47335#p47335
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harupdf: Numerando páginas no final

Mensagem por JoséQuintas »

Não sei se tem a ver com esse recurso: lembro de ter visto em algum lugar, da OOHG ter uma classe que pode gerar pra PDF, objeto printer to Windows, ou outra coisa.
Pra quem já gera PDF, assim como eu, a opção da Harupdf é mais fácil.

Hoje:

Código: Selecionar todos

  oPage := HPDF_AddPage()
A alteração:

Código: Selecionar todos

oPage := HPDF_AddPage()
AAdd( oPageList, oPage )
E no final, faz o que quiser com o array, algo parecido com isto:

Código: Selecionar todos

FOR EACH oPage IN oPageList
   HPDF_ShowText( oPage, 1,1, "Página " + Str( oPage:__EnumIndex, 10 ) + " do total de " + Str( oPage:__EnumLast, 10 ) )
NEXT
__EnumIndex é o número do elemento atual (Index)
__EnumLast é o número do último elemento (Last)
O resto é só como exemplo, não sei se usei a sintaxe/comando direito.
Geralmente eu memorizo que existe a opção, e quando vou usar pesquiso os detalhes de como se usa.
Só o que faz parte do dia a dia é que lembro dos detalhes.... rs
Acho que o ShowText() precisa de posicionamento prévio, e ele apenas mostra o texto aonde estiver posicionado.
Mas dá uma idéia do que seria preciso, aí quem for usar, provavelmente vai estar com a "mão na massa" nos detalhes, e saberá a forma correta.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Harupdf: Numerando páginas no final

Mensagem por asimoes »

Quintas,

Esse final que você se refere é no final de toda impressão ? ou é por cada folha impressa, desculpa ainda não entendi direito

Tipo assim :

Página 1 do total de 10
Página 2 do total de 10
Página 3 do total de 10
...
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harupdf: Numerando páginas no final

Mensagem por JoséQuintas »

Exato, seria pra isso, no final do relatório.
Não sabemos quantas páginas vai dar, então é guardar a referência a cada página, e depois só precisamos colocar a numeração.
Com o acesso a cada página, é só imprimir a numeração normalmente, como faria durante a impressão, só que no final.

Lembrando que é HARUPDF, que gera PDF.
A numeração está sendo feita dentro do PDF, antes de salvar, mostrar na tela ou enviar pra impressora.
Ou seja, TODO o PDF, TODAS as páginas, tudo disponível pra acrescentar o que quiser antes de encerrar.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Harupdf: Numerando páginas no final

Mensagem por asimoes »

Quintas,
Entendi, a HPDF_ShowText gera um índice de busca baseado nas páginas correto ?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harupdf: Numerando páginas no final

Mensagem por JoséQuintas »

Não.
É usar as funções normais da harupdf de escrever texto, desenhar, etc.
Essa ShowText(), se não errei o nome, é pra escrever algum texto.

O normal é a gente usar a página atual e colocar texto, desenho, etc. e ir pra próxima.
Salvando a referência das páginas num array, podemos selecionar qualquer página, e usá-la pra escrever, desenhar, etc.

Não sei se comparando com matricial fica mais fácil de entender:
É como se pudesse fazer:

GOTO page 5
@ 5, 5 SAY "pagina 5/10"
GOTO page 10
@ 5, 5 SAY "pagina 0/10"

Ou comparando com banco de dados: ir pro "registro/página" que quiser, e gravar o que quiser.
Desta forma, podemos preencher partes que deixamos pro final de tudo.

No caso do Danfe de nota fiscal eletrônica, eu geraria todas as páginas, e quando terminar, eu coloco a numeração 1/3, 2/3, 3/3, afinal, só vou saber a quantidade de páginas no fim de tudo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Harupdf: Numerando páginas no final

Mensagem por asimoes »

Quintas,

o assunto é "off topic" você mencionou em algum lugar que tem uma getsys personalizada, tem como você postar o código ou colocar no github AllInOne ?

Obrigado
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harupdf: Numerando páginas no final

Mensagem por JoséQuintas »

Ok. Mas a diferença é mínima da original (Clipper).
Mouse, que na época do Clipper não tinha, limitado ao campo pra não pular validação, bloqueio de caracteres especiais, e tempo limite.
Que eu me lembre é isso.
Nem na digitação de números não mexi até hoje... rs
Ah sim... a atualização de tela... que o Clipper/Harbour não faz, tinha esquecido disso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Harupdf: Numerando páginas no final

Mensagem por asimoes »

Off topic, Quintas justamente a função getapllykey com o uso do mouse que me interessa.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Softwhouse
Usuário Nível 3
Usuário Nível 3
Mensagens: 324
Registrado em: 07 Dez 2011 18:44
Localização: Porto Alegre/RS

Harupdf: Numerando páginas no final

Mensagem por Softwhouse »

Olá Quintas,

Teria um exemplo de como selecionar a página do pdf e escrever nela ? Estou tentando da maneira abaixo e é informado que a página não existe.

Código: Selecionar todos

            


             oPage:=HPDF_AddPage()
             AAdd(oPageList, oPage)

           
             For Each oPage In oPageList
	          nCont:=oPage: __EnumIndex
                 oPage:=oPageList[nCont]    
                 @ nRow, nCol + 262 HPDFPRINT  'Test'
            Next

     END HPDFDOC


Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harupdf: Numerando páginas no final

Mensagem por JoséQuintas »

Pelo fonte, parece que está misturando harupdf do Harbour com harupdf da HMG.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder