PDF com link para documentos

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

luizmachado
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 06 Mar 2023 19:19
Localização: rio de janeiro

PDF com link para documentos

Mensagem por luizmachado »

Boa tarde pessoal. Estou desenvolvendo uma aplicacao que emite um extrato de pagamentos em PDF e, para cada pagamento (linha do extrato), preciso exibir um link para a imagem (PDF) daquele documento. Eh tipo extrato bancario onde voce clica para ver o cheque ou guia de deposito. Todos os documentos estao codificados e assim posso usar este codigo como link ou colocar uma lupa que me direcione para o ducumento desejado. Exibido o ducumento, no mesmo tem que ter um botao VOLTAR para que se retorne ao extrato. Alguem tem uma solucao para isto? Nao estou usando a Haru PDF, gero o arquivo usando uma printer PDF. Desde ja, obrigado.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

PDF com link para documentos

Mensagem por Itamar M. Lins Jr. »

Olá!
Bem vindo ao forum!
AS libs gráficas tem o controle LINK.(URL)
Mas eu acredito que usando HTML será mais simples.
Não informou qual é a sua LIB.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

PDF com link para documentos

Mensagem por JoséQuintas »

luizmachado escreveu:Todos os documentos estao codificados e assim posso usar este codigo como link ou colocar uma lupa que me direcione para o ducumento desejado. Exibido o ducumento, no mesmo tem que ter um botao VOLTAR para que se retorne ao extrato.
Sinceramente......
Vai precisar do computador pra isso, então faz logo no aplicativo.
Caso contrário, me parece uma espécie de aplicativo dentro do PDF, e nem sei se isso é possível pelos meios normais.
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

PDF com link para documentos

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:Não informou qual é a sua LIB.
informou sim.
luizmachado escreveu:gero o arquivo usando uma printer PDF
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
carlaoonline
Usuário Nível 3
Usuário Nível 3
Mensagens: 190
Registrado em: 24 Ago 2014 22:38
Localização: Porto Alegre-RS

PDF com link para documentos

Mensagem por carlaoonline »

Bom dia!
luizmachado escreveu:Alguem tem uma solucao para isto?
Eu faria a listagem em um browser e do browse abre os demais PDF's, pois talvez terá problemas com a questão de segurança de cada visualizador de PDF que estiver como padrão para cada usuário.


Mas independente da questão se segurança, é possível sim fazer um PDF com uma lista de links para outros PDF's (ou qualquer outro link) usando #require "hbhpdf" e #include 'harupdf.ch' e a função "HPDF_Page_CreateURILinkAnnot"

A função HPDF_Page_CreateURILinkAnnot() é usada para criar uma anotação de link para um URI (Uniform Resource Identifier) dentro de um arquivo PDF criado em Harbour. Essa anotação permite que o usuário clique em um link dentro do PDF e seja redirecionado para uma página da web, um arquivo PDF ou outro recurso da internet.

Abaixo estão os parâmetros da função HPDF_Page_CreateURILinkAnnot():
page: O objeto de página HPDF_Page em que a anotação de link deve ser criada.

x_left: A posição x esquerda do retângulo de anotação.

y_bottom: A posição y inferior do retângulo de anotação.

x_right: A posição x direita do retângulo de anotação.

y_top: A posição y superior do retângulo de anotação.

uri: O URI de destino do link. Deve ser uma string ASCII.

border_style: O estilo da borda do retângulo de anotação. Pode ser "HPDF_AnnotBorderStyle.SOLID", "HPDF_AnnotBorderStyle.DASHED" ou "HPDF_AnnotBorderStyle.BEVELED".

hilight_mode: O modo de destaque do link. Pode ser "HPDF_AnnotHighlightMode.INVERT" ou "HPDF_AnnotHighlightMode.OUTLINE".

font: O objeto de fonte HPDF_Font usado para renderizar o texto do link. Pode ser NULL para usar a fonte padrão.

font_size: O tamanho da fonte do texto do link.

color: A cor do texto do link. Deve ser especificada em formato RGB.
Exemplos:

Código: Selecionar todos

HPDF_Page_CreateURILinkAnnot(page, x_left, y_bottom, x_right, y_top, "http://www.exemplo.com", HPDF_AnnotBorderStyle.SOLID, HPDF_AnnotHighlightMode.INVERT, NULL, 12, [0, 0, 255]);

Código: Selecionar todos

border_style := HPDF_AnnotBorderStyle.DASHED;
hilight_mode := HPDF_AnnotHighlightMode.NONE;
HPDF_Page_CreateURILinkAnnot(page, x_left, y_bottom, x_right, y_top, "http://www.exemplo.com", border_style, hilight_mode, NULL, 10, [0, 128, 0]);

Código: Selecionar todos

font := HPDF_GetFont(doc, "Helvetica-Bold", NULL);
HPDF_Page_CreateURILinkAnnot(page, x_left, y_bottom, x_right, y_top, "http://www.exemplo.com", HPDF_AnnotBorderStyle.BEVELED, HPDF_AnnotHighlightMode.OUTLINE, font, 14, [255, 0, 0]);

As coordenadas podem ser por meio de uma matriz:

Código: Selecionar todos

local coords := {50, 50, 150, 75}
HPDF_Page_CreateURILinkAnnot(page, coords, "http://www.exemplo.com", HPDF_AnnotBorderStyle.SOLID, HPDF_AnnotHighlightMode.INVERT, NULL, 12, [0, 0, 255])
Avatar do usuário
carlaoonline
Usuário Nível 3
Usuário Nível 3
Mensagens: 190
Registrado em: 24 Ago 2014 22:38
Localização: Porto Alegre-RS

PDF com link para documentos

Mensagem por carlaoonline »

Aqui está um código bem reduzido que fiz a partir do fonte original da pasta criada na instalação do MiniGui
C:\MiniGUI\SAMPLES\Advanced\HaruPDF


O aplicativo cria um PDF chamado TestHaru.pdf que possui um link para abrir o comprovante_01.pdf

Código: Selecionar todos



#require "hbhpdf"



#include 'harupdf.ch'
#include "minigui.ch"



#define rLEFT   1
#define rTOP    2
#define rRIGHT  3
#define rBOTTOM 4

Memvar MyPdf, cpos
*------------------------------------------------------------------------*
Function Main( cFileToSave )
*------------------------------------------------------------------------*
   default( cFileToSave ) to 'TestHaru.pdf'
   Public MyPdf:= cFileToSave
   SET AUTOADJUST ON


DEFINE WINDOW mh ;
  AT 0,0 ;
  WIDTH  300;
  HEIGHT 200  ; 
  TITLE "Link no PDF" ;
  MAIN
  
  @ 20 , 20 ButtonEX Botao_Criar CAPTION "Criar PDF"  WIDTH 100 HEIGHT 30 ACTION Generate(MyPdf)
  @ 80 , 20 ButtonEX Botao_Ver CAPTION "Abrir PDF"  WIDTH 100 HEIGHT 30 ACTION view( Mypdf )


END WINDOW

CENTER WINDOW mh
ACTIVATE WINDOW mh


















Return Nil

*------------------------------------------------------------------------*
Function Generate( cFileToSave )
*------------------------------------------------------------------------*
   If file(cFileToSave)
      Ferase(cFileToSave)
   Endif
   if DesignHaruPDF( cFileToSave )
      MsgInfo( 'PDF File <'+cFileToSave+'> is Created!' )
   else
      MsgAlert( 'Some problems in creating the PDF!', 'Error' )
   endif

   Return nil
*------------------------------------------------------------------------*
Function View( cFileToSave )
*------------------------------------------------------------------------*
   if file(cFileToSave)
      execute file cFileToSave
   Else
      msgalert ("Press generate first!", 'Alert')
   Endif
return nil
*------------------------------------------------------------------------*
Function DesignHaruPDF( cFileToSave )
*------------------------------------------------------------------------*
   Local i, page, height, width, def_font, tw,  samp_text, font, grid := .f.
   Local page_title := 'Minigui Extended Pdf Generator Demo'
   Local font_list  := { ;
                        "Courier",                  ;
                        "Courier-Bold",             ;
                        "Courier-Oblique",          ;
                        "Courier-BoldOblique",      ;
                        "Helvetica",                ;
                        "Helvetica-Bold",           ;
                        "Helvetica-Oblique",        ;
                        "Helvetica-BoldOblique",    ;
                        "Times-Roman",              ;
                        "Times-Bold",               ;
                        "Times-Italic",             ;
                        "Times-BoldItalic",         ;
                        "Symbol",                   ;
                        "ZapfDingbats"              ;
                      }

   Local pdf := HPDF_New()
   Public cpos :={}
   if pdf == NIL
      msgalert( 'Pdf could not been created!', 'Error' )
      return nil
   endif

   If file ( cFileToSave )
      Ferase( cFileToSave )
   Endif

   /* set compression mode */

   HPDF_SetCompressionMode( pdf, HPDF_COMP_ALL )
   

   Page_Link_Annotation( pdf )
 


   HPDF_SaveToFile( pdf, cFileToSave )
   * msgbox(HPDF_GETERROR(),"Errore")
   HPDF_Free( pdf )
   release cpos
   return file( cFileToSave )



   RETURN  NIL




*------------------------------------------------------------------------*
Static Function Page_Link_Annotation( pdf )
*------------------------------------------------------------------------*
   Local index_page, Font, /*i,*/ Tp, Dst, annot, rect := array(4), page:={},;
   Uri:= "comprovante_01.PDF" //,pagex
   // Uri:= "http://www.hmgextended.com" //,pagex


    /* create default-font */
    font := HPDF_GetFont (pdf, "Helvetica", Nil)

    /* create index page */
    index_page := HPDF_AddPage (pdf)
    HPDF_Page_SetWidth (index_page, 300)
    HPDF_Page_SetHeight (index_page, 220)

 
    HPDF_Page_BeginText (index_page)
    HPDF_Page_SetFontAndSize (index_page, font, 10)
    HPDF_Page_MoveTextPos (index_page, 15, 200)
    HPDF_Page_ShowText (index_page, "Link Annotation Demo")
    HPDF_Page_EndText (index_page)


     * Create Link-Annotation object on index page.

    HPDF_Page_BeginText(index_page)
    HPDF_Page_SetFontAndSize (index_page, font, 8)
    HPDF_Page_MoveTextPos (index_page, 20, 180)
    HPDF_Page_SetTextLeading (index_page, 23)


    // URI link 
    tp = HPDF_Page_GetCurrentTextPos (index_page)

    HPDF_Page_ShowText (index_page, "URI (")
    HPDF_Page_ShowText (index_page, uri)
    HPDF_Page_ShowText (index_page, ")")

/*  FORAM DEFINIDAS LA NO INICIO DO CODIGO... 
   #define rLEFT   1
   #define rTOP    2
   #define rRIGHT  3
   #define rBOTTOM 4
*/

    rect [ rLEFT ]   := Tp[1] - 4
    rect [ rBOTTOM ] := Tp[2] - 4
    rect [ rRIGHT ]  := HPDF_Page_GetCurrentTextPos (index_page)[1]+ 4
    rect [ rTOP ]    := Tp[2] + 10

    HPDF_Page_CreateURILinkAnnot (index_page, rect, uri)

    HPDF_Page_EndText (index_page)
Return Nil

Segue os 2 PDF para ver na prática.
TestHaru.pdf
Arquivo principal gerado.
(1.06 KiB) Baixado 175 vezes
comprovante_01.pdf
Este seria o comprovante de pagto.
(833 Bytes) Baixado 185 vezes
luizmachado
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 06 Mar 2023 19:19
Localização: rio de janeiro

PDF com link para documentos

Mensagem por luizmachado »

Obrigado a todos, especialmente ao Carlao. Vou tentar por esta linha. Que tiver outras sugestoes desde ja agradeco.
Responder