Mostrar PDF sem opção de salvar/etc

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

Mostrar PDF sem opção de salvar/etc

Mensagem por JoséQuintas »

Úso o formato PDF pra muita coisa, incluindo os relatórios normais do sistema.
Até aí... tudo normal.

Mas não reparei em uma coisa:
Tem lá a opção de salvar como...
Nisto o usuário pode navegar por todas as pastas, e até mesmo salvar o PDF encima de um DBF.

Existe alguma opção de bloquear isto?

Motivo: ao liberar acesso pra fora da empresa, tudo pode acontecer.
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
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Mostrar PDF sem opção de salvar/etc

Mensagem por Jairo Maia »

Olá José,

Com o PDFCreator você pode desabilitar essas opções antes de enviar, mas se alguém estiver mal intencionado isso nem adianta. Na internet tem vários programas que quebram essa proteção.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mostrar PDF sem opção de salvar/etc

Mensagem por JoséQuintas »

A intenção é apenas aonde está rodando o sistema.
O sistema abre o PDF na máquina aonde está o sistema e os arquivos.
É nesta hora que precisaria proteção.

O preview do relatório:

Código: Selecionar todos

run ( "start arquivo.pdf" )
Com o arquivo aberto, no computador aonde está o aplicativo, toda máquina fica disponível.
Ao liberar aplicativo remoto no servidor, todo servidor fica disponível.

Só porque a visualização tem a opção de salvar...
É até esquisito salvar o que está salvo, mas fizeram isso no visualizador...
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
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mostrar PDF sem opção de salvar/etc

Mensagem por rochinha »

Amiguinho,

O problema esta no comando RUN() pois ao executá-lo você abre o aplicativo padrão para manipulação destes arquivos.

O que você deseja?

Ao clicar no PDF já imprimir ou visualizar.

Você pode usar automação OLE a agir diretamente sobre o PDF.OCX do Acrobat e enxertar dentro de uma popup o controle, permitindo o preview, mas não as opções de salvar.

Ilustrando com código:

Código: Selecionar todos

   LOCAL oIE
   Default lPrint := .f.
   Default cEndereco := "c:\temp\arquivo.pdf"
   oIE:=TOleAuto():New( "InternetExplorer.Application" )
   oIE:Visible   := .T.
   oIE:ToolBar   := .F.
   oIE:StatusBar := .F.
   oIE:Top       := 055
   oIE:Left      := 001
   oIE:Height    := 600
   oIE:Width     := 800
   oIE:MenuBar   := .F.
   oIE:Navigate( cEndereco )
   if lPrint
      oIE:ExecWB(6,0,0,0) // Imprimir
   endif
No evento ExecWB(), no primeiro paramêtro, o 6 significa que quero imprimir. Desta forma voce usa o S.O. burlando a interface do PDF reader padrão.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Mostrar PDF sem opção de salvar/etc

Mensagem por JoséQuintas »

Testei e só precisei alterar esta parte:

Código: Selecionar todos

oIE := win_OleCreateObject( "InternetExplorer.Application" )
É interessante, mas deu praticamente no mesmo.
Na janela final, ao colocar o mouse sobre o relatório abrem opções de salvar/imprimir, e também a opção de mostrar todo o menu, até mesmo a opção de enviar por email (opções do Reader e não do explorer).

A opção "salvar como", apesar de inocente é perigosa, porque o usuário poderia salvar como "clientes.dbf" e destruir o cadastro.
A opção "enviar por email" também é evitada em alguns lugares, porque o funcionário pode levar a lista de tudo.

Uma coisa é usar isso na máquina local, e outra coisa é no servidor por aplicativo remoto.
Tem que lembrar que sempre podem existir filhos e colegas dos filhos de quem usa, que podem querer "testar" suas habilidades em invadir/bagunçar qualquer coisa.

Eu nunca tinha pensado por este lado antes.

Nota: em aplicativo remoto, o aplicativo vai estar usando os recursos do servidor, incluindo abrir o PDF no próprio servidor, e também a pasta de DBFs vai estar liberada, já que o aplicativo precisa disso, mesmo que o PDF seja salvo/aberto em outra pasta.
Anexos
PDF.png
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
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mostrar PDF sem opção de salvar/etc

Mensagem por rochinha »

Amiguinho,

Então vai mais uma dica, esta é um hack.

Ao invés de chamar o arquivo diretamente chame-o indiretamente criando uma proteção.

O javascript permite acesso a recursos que podem ser úteis na apresentação de conteúdos pelos motores de internet.

Um deles é o desabilitar botões e teclas.

O código que desabilita é:

Código: Selecionar todos

<script language=Javascript> 
function botaodireito() 
{ if(event.button==2) { alert( " Botão direito desabilitado! ")}} 
document.onmousedown= botaodireito 
</script> 
Então voce deverá chamar o InternetExplorer.Application mas passando para ele o parâmetro:

Código: Selecionar todos

cEndereco := "imprimir.htm"
...
oIE:Navigate( cEndereco )
O pulo do gato estaria em chamar o .PDF de dentro do .HTM:

Código: Selecionar todos

<script type="text/javascript" language="javascript">
var App = new ActiveXObject( "AcroPDF.PDF.1" );
App.LoadFile('C:\\temp\\TMPe9832hu.pdf');
</script>
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mostrar PDF sem opção de salvar/etc

Mensagem por rochinha »

Amiguinho,

Faça um teste com este aplicativo.

Executar:

pdf3 arquivo.pdf "JPA - Systems"

Codigo usado:

Código: Selecionar todos

// FiveWin ActiveX support demo - Using Adobe Acrobat Reader
// Alteracao: 13/11/2014
// Jose Carlos da Rocha

#include "FiveWin.ch"

function Main( cPDFFile, cTitle )

   LOCAL oPDFWnd
   LOCAL oPDF
   LOCAL sActivex := ""

   DEFAULT cTitle := "JPA - Report Systems"

   do case

      case IsActivex( "AcroPDF.PDF.1" ); sActivex := "AcroPDF.PDF.1"
      case IsActivex( "PDF.PdfCtrl.1" ); sActivex := "PDF.PdfCtrl.1"
      case IsActivex( "PDF.PdfCtrl.2" ); sActivex := "PDF.PdfCtrl.2"
      case IsActivex( "PDF.PdfCtrl.3" ); sActivex := "PDF.PdfCtrl.3"
      case IsActivex( "PDF.PdfCtrl.4" ); sActivex := "PDF.PdfCtrl.4"
      case IsActivex( "PDF.PdfCtrl.5" ); sActivex := "PDF.PdfCtrl.5"

   endcase

   if empty( sActivex )
      MsgStop( "Acrobat Reader nao instalado." )
   else

      cPDFFile := iif(!cPDFFile=NIL,cPDFFile,cGetFile( "PDF Files (*.pdf)|*.pdf|", "Selecione um arquivo",1) )

      DEFINE WINDOW oPDFWnd TITLE cTitle 
             oPDF := TActiveX():New( oPDFWnd, sActivex )
             oPDF:Do( "LoadFile", cPDFFile )
             oPDF:Do( "SetCurrentPage", 1 )
             oPDF:Do( "SetShowScrollbars", .f. )
             oPDF:Do( "SetShowToolbar", .f. )
             oPDFWnd:oClient := oPDF // To fill the entire window surface
      ACTIVATE WINDOW oPDFWnd MAXIMIZED

      SysRefresh()

   endif

return nil
Para efeito de documentação deixo os links para uso futuro:

API Reference PDF
AcroPDF Manual.pdf
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder