Clipper On Line • Ver Tópico - Harupdf: Numerando páginas no final / selecionando página

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

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

Moderador: Moderadores

 

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

Mensagempor JoséQuintas » 11 Abr 2017 12:17

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, 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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Harupdf: Numerando páginas no final

Mensagempor asimoes » 11 Abr 2017 19:32

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Harupdf: Numerando páginas no final

Mensagempor JoséQuintas » 11 Abr 2017 20:38

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, 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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Harupdf: Numerando páginas no final

Mensagempor JoséQuintas » 11 Abr 2017 20:46

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, 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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Harupdf: Numerando páginas no final

Mensagempor Pablo César » 12 Abr 2017 13:10

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 de usuário

Pablo César
Usuário Nível 7

Usuário Nível 7
 
Mensagens: 5312
Data de registro: 31 Mai 2006 10:22
Cidade/Estado: Curitiba - Paraná
Curtiu: 142 vezes
Mens.Curtidas: 152 vezes

Harupdf: Numerando páginas no final

Mensagempor JoséQuintas » 12 Abr 2017 14:13

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:

  oPage := HPDF_AddPage()


A alteração:
oPage := HPDF_AddPage()
AAdd( oPageList, oPage )


E no final, faz o que quiser com o array, algo parecido com isto:

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, 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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Harupdf: Numerando páginas no final

Mensagempor asimoes » 12 Abr 2017 14:20

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Harupdf: Numerando páginas no final

Mensagempor JoséQuintas » 12 Abr 2017 14:40

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, 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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Harupdf: Numerando páginas no final

Mensagempor asimoes » 12 Abr 2017 15:26

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Harupdf: Numerando páginas no final

Mensagempor JoséQuintas » 12 Abr 2017 15:47

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, 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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Harupdf: Numerando páginas no final

Mensagempor asimoes » 12 Abr 2017 18:16

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 de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Harupdf: Numerando páginas no final

Mensagempor JoséQuintas » 12 Abr 2017 18:52

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, 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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Harupdf: Numerando páginas no final

Mensagempor asimoes » 12 Abr 2017 19:10

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)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Harupdf: Numerando páginas no final

Mensagempor Softwhouse » 07 Jan 2019 21:19

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.

            

             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

Softwhouse
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 300
Data de registro: 07 Dez 2011 17:44
Cidade/Estado: Porto Alegre/RS
Curtiu: 0 vez
Mens.Curtidas: 12 vezes

Harupdf: Numerando páginas no final

Mensagempor JoséQuintas » 08 Jan 2019 08:06

Pelo fonte, parece que está misturando harupdf do Harbour com harupdf da HMG.
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: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Próximo



Retornar para Harbour

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 10 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