Juntar PDFs (*)

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

Juntar PDFs (*)

Mensagem por JoséQuintas »

Hoje surgiu uma situação:

Cliente vai usar logística e enviar PDFs e boletos para serem impressos na logística.
Média de 30 notas por dia.
A intenção seria PDF único.

Tudo bem, harupdf não faz isso de juntar páginas depois de pronto.
Mas será que vai dar pra fazer "durante" ?

Por exemplo, o Danfe passei a numerar folhas no final, assim tem a quantidade exata de folhas.
Teria que fazer um pré-processamento separado, pra depois juntar.

Alguém já fez algo assim?
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

Juntar PDFs (*)

Mensagem por JoséQuintas »

Consegui.

Basicamente é não destruir o objeto do documento, e usar sempre o mesmo.
O caso de renumerar páginas, não precisei mexer em nada.
Vou criando um array com as páginas criadas, pra renumerar no final.
Tanto faz se já existiam mais páginas, esse array só tem as páginas que interessam.
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
developer
Usuário Nível 3
Usuário Nível 3
Mensagens: 149
Registrado em: 09 Nov 2024 23:45
Localização: Londrina/PR

Juntar PDFs (*)

Mensagem por developer »

E sobre usar um programa externo que faça isso? Não seria mais fácil?

O PDFill faz isso:

Código: Selecionar todos

"Merge PDFs into a new PDF:
"C:\Program Files\PlotSoft\PDFill\PDFill.exe" MERGE Input1.pdf Input2.pdf Input3.pdf Output.pdf

Merge all PDFs under a folder into a new PDF:
"C:\Program Files\PlotSoft\PDFill\PDFill.exe" MERGE "C:\Test\" Output.pdf
Detalhe: (It is only available for the registered user of PDFill PDF Editor)

Alternativamente pode tentar também com PDF Toolkit, parece que este não precisa registrar.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Juntar PDFs (*)

Mensagem por JoséQuintas »

De jeito nenhum.
programa externo só complicaria.
Se é que existe programa grátis pra isso.
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
developer
Usuário Nível 3
Usuário Nível 3
Mensagens: 149
Registrado em: 09 Nov 2024 23:45
Localização: Londrina/PR

Juntar PDFs (*)

Mensagem por developer »

De jeito nenhum.
programa externo só complicaria.
Se é que existe programa grátis pra isso.
Pelo que diz no site, o PDF Toolkit faz "split" e "merge" pela linha de comando gratuitamente, a versão paga faz outras coisas mais (assinar, stamp, etc..) e custa $3.99 apenas.

Porém eu entendo o que quer dizer, o ideal é encontrar uma solução que funcione 100% de dentro do seu próprio executável.
Eu iria na direção do PDF Toolkit ou do Ghostscript (talvez este último é mais universal), ambos são gratuítos e parece que resolvem e parece ser mais flexível.
A sua solução me parece um pouco complexa, depende de manter o ponteiro aberto o tempo todo até que tenha todos as páginas necessárias, deixa meio amarrado, mas com certeza vai funcionar.

Fiz um teste aqui com Ghostscript (úlitma versão 64bits):

Código: Selecionar todos

PROC MAIN()

    CLS
    ? 'Rotina de testes Ghostscript'
    RUN gswin64c -dBATCH -dNOPAUSE -dQUIET -sDEVICE=pdfwrite -dFirstPage=2 -dLastPage=3 -sOUTPUTFILE=resultado1.pdf teste.pdf
    RUN gswin64c -dBATCH -dNOPAUSE -dQUIET -sDEVICE=pdfwrite -sOUTPUTFILE=resultado2.pdf teste.pdf resultado1.pdf
    WAIT 'Fim da rotina'

RETURN
O resultado para mim foi muito satisfatório, na instalação do Ghostscript já coloca o executável no PATH automaticamente.

Não fui a fundo, mas creio que tem até como usar a impressora virtual que já vem no Windows para gerar PDF sem precisar instalar nada adicional, mas acho que mais simples que Ghostscript vai ser difícil de encontrar!

Veja aí o que lhe convém e posta as suas conclusões, por favor.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Juntar PDFs (*)

Mensagem por alxsts »

Olá!

Lembram do velho DOS?

Código: Selecionar todos

copy /b /y file01.Pdf + file02.Pdf Destino.Pdf
Pode criar a string com o comando e executar com RUN ou equivalente.

Referência:
In MS DOS copying several files to one file
[]´s
Alexandre Santos (AlxSts)
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

Juntar PDFs (*)

Mensagem por Softwhouse »

Aqui não funcionou. Copia somente o primeiro arquivo, e o tamanho do arquivo final é a soma dos dois arquivos.
Fernando
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Juntar PDFs (*)

Mensagem por JoséQuintas »

Mas é lógico que não funciona.
Copy junta arquivos físicos, não páginas de PDF.
Pode servir pra juntar TXT, PRG, mas não arquivos de formato específico.
O leitor de PDF vai usar só a primeira parte, onde diz início e fim.

Se meu aplicativo gera os Danfes, gerar junto deixou de ser problema.
Isso é diferente de ter PDFs gerados por OUTRO aplicativo e querer juntar.
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
developer
Usuário Nível 3
Usuário Nível 3
Mensagens: 149
Registrado em: 09 Nov 2024 23:45
Localização: Londrina/PR

Juntar PDFs (*)

Mensagem por developer »

Lembram do velho DOS?
Sim, mas... não...

Amigo, você vai precisar se atualizar... isso não é uma questão de juntar dois arquivos .TXT como se fosse uma coisa simples assim.

Não vai funcionar, como já disse o José, pois se trata de adicionar páginas de um PDF com páginas de outro PDF, coisa totalmente diferente.

O que você sugere é algo como imagem1 + imagem2 = imagem3. O que você vai obter disso é uma imagem misturada ou o quê? Na prática só vai pegar a primeira, lógico, não tem como misturar ou fazer uma imagem dupla assim.

Mas de qualquer forma foi uma ideia. :)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Juntar PDFs (*)

Mensagem por JoséQuintas »

Alterei hoje PDFClass

Mesma coisa, fornecer objeto anterior e não destruir no final se tiver continuação.
Também boletos em PDF, derivado da PDFClass.

Dá pra gerar Danfes, boletos, e qualquer outra coisa, tudo junto no mesmo PDF.
Talvez um relatório do conteúdo, ou resumo, sei lá.

Ou abrir o aplicativo, e deixar PDFs pendentes, pro usuário adicionar a qualquer um pré-existente.
Agora que tá pronto, é só inventar uso pra ele.
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