marcioe Posted October 16, 2018 Report Share Posted October 16, 2018 Olá amigo,s boa tarde, Tenho um sistema de imobiliaria, onde preciso armazenar os documentos em PDF na base de dados, e depois recuperar. Perguntas 1) Qual o Tipo de campo mais Indicado para gravar o PDF 2) Qual comando(s) se usa para gravar 3) Como recuperar o arquivo e Salvar o PDF para ser lido pelo Acrobat(por exemplo) 4) Tem alguma forma de visualizar, tipo o que fazemos com a Foto para mostrar o PDF Agradeço aos amigos Quote Link to comment Share on other sites More sharing options...
rochinha Posted October 17, 2018 Report Share Posted October 17, 2018 Amiguinhos, marcioe Use as seguinte funções: static function SalvaPDF( _PDF_ ) RETURN str2hex( memoread( _PDF_ ) ) static function RecuperaPDF( _campo_, _PDF_ ) RETURN memowrit( _PDF_, hex2str( _campo_ ) ) Quote Link to comment Share on other sites More sharing options...
rochinha Posted October 17, 2018 Report Share Posted October 17, 2018 Exemplo de salvamento em campo .DBF: ... arquivo->campotxt := SalvaPDF( "c:\temp\arquivo.pdf" ) ... Recuperando: ... Run( RecuperaPDF( arquivo->campotxt, "c:\temp\temp87643.pdf" ) ) ... No seu caso voce poderá usar um campo Texto ou VarChar que não tenha limite tão pequeno quanto o do .DBF ou poderá usar um campo BLOB. As referidas funções não fazem nada mais do que pegar o conteúdo de um arquivo de forma binária e salvá-la como texto. Lembra de quando armazenavamos as telas de nossos aplicativos Clipper/DOS com savescreen/restscreen é a mesma técnica. Quote Link to comment Share on other sites More sharing options...
marcioe Posted October 23, 2018 Author Report Share Posted October 23, 2018 Obrigado por responder A ideia eu entendi, porem dá uma olhada na tela para ver mais ou menos o que queria e veja se será possivel Usei onde armazeno as Fotos do imovel apenas para ilustrar o que queria Mais uma vez obrigado Quote Link to comment Share on other sites More sharing options...
rochinha Posted October 23, 2018 Report Share Posted October 23, 2018 Amiguinhos, Em primeiro lugar, para você colocar um preview de PDF em um controle seria necessário usar uma PDF.OCX compatível e livre. Minha idéia seria você converter o PDF para JPEG ou BMP e apresentá-lo no controle de imagem e um clique permitiria apresentar o preview no Acrobat ou PDF Reader. Eu ainda acho que ao invés de usar Acrobat(que precisa de instalação) ou PDF Reader(pois precisa de instalação) você possa subir um preview usando o ACBrDanfe.exe Tentei anexar arquivos e imagens mas alguma coisa aconteceu que não aconteceu o anexamento. Segue a pasta onde possa ser baixado o [url=http://www.lotapps.com/download/]LPCLI[/url] que é o convertedor de arquivos. Não sei se o LPCLI.RAR ou LPCLI.ZIP faz de PDF para JPG pois um deles faz de PDF para PPTX ecob 1 Quote Link to comment Share on other sites More sharing options...
marcioe Posted October 23, 2018 Author Report Share Posted October 23, 2018 entendi a ideia rochinha 1 Quote Link to comment Share on other sites More sharing options...
ecob Posted October 24, 2018 Report Share Posted October 24, 2018 Cria um campo mediumblob, que armazena até 16mb se não me engano, e salve conforme o @rochinha já orientou. Quanto ao preview, faria como o rochinha falou, gerava um jpg da primeira página do pdf, dependendo o tamanho faria um resize pra ficar menorzinho, e salvaria no banco da mesma forma que o PDF, então seria 2 campos no BD. Quote Link to comment Share on other sites More sharing options...
Theotokos Posted October 24, 2018 Report Share Posted October 24, 2018 Amiguinhos, marcioe Use as seguinte funções: static function SalvaPDF( _PDF_ ) RETURN str2hex( memoread( _PDF_ ) ) static function RecuperaPDF( _campo_, _PDF_ ) RETURN memowrit( _PDF_, hex2str( _campo_ ) ) Olá rochinha, Bom Dia, Estas funções serve também para salvar arquivo BMP ? é que tenho uma rotina que qdo o usuário fecha o caixa, o sistema salva a dialog.. oDlg::saveToBmp( cArqTela ); ai gostaria de ao invés de salvar em arquivo bmp, salva direto no arquivo DBF... Seria possivel com esta funções ou teria alguma outra? Obgdão!!! Quote Link to comment Share on other sites More sharing options...
marcioe Posted October 24, 2018 Author Report Share Posted October 24, 2018 bom dia Seguinte, O PDF está sendo gravado de boa no banco de dados, fato que se usar a ferramenta case (tipo mysqfront, heidsql) consigo recuperar Para gravar está assim *------------------------------------------------------------------------------- * Inserir o arquivo PDF *------------------------------------------------------------------------------- STATIC FUNCTION INSERE_PDF_IMOVEL(v_Codigo_Imovel,v_Caminho,v_Apelido) *---------------------------------------------------------------------------- IF EMPTY(ALLTRIM(v_Apelido)) v_Apelido := SUBSTR('Pdf '+ alltrim(str( nRandom(9999) ,06,0)) + ' ' + time(),01,030) ENDIF IF v_Codigo_Imovel = 0 MsgStop('Escolha Um Imóvel para Colocar Fotos !',SISTEMA) RETURN .T. ENDIF IF FSize(v_Caminho) > 0 AGUARDE_PROCESSANDO( 'Aguarde, Gravando PDF...' ) BEGIN TRANSACTION cQuery_Mtabela := "INSERT INTO pdf_imovel ( " cQuery_Mtabela := cQuery_Mtabela + " CODIGO_IMOVEL " cQuery_Mtabela := cQuery_Mtabela + ",DESCRICAO " cQuery_Mtabela := cQuery_Mtabela + ",DATA_PDF " cQuery_Mtabela := cQuery_Mtabela + ",PDF " cQuery_Mtabela := cQuery_Mtabela + " ) VALUES ( " cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(T_CODI_IMOVEL,"N",06,0) + "," cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(v_Apelido,"T",35,0) + "," cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(DATE(),"D",08,0) + "," cQuery_Mtabela := cQuery_Mtabela + ANY2SQL( MemoRead( (v_Caminho) ) ) cQuery_Mtabela := cQuery_Mtabela + " )" COMITAR_DADOS_SQL(cQuery_Mtabela) END TRANSACTION HB_GCAll(.T.) odlgwait:End() T_CAMINHO_ARQUIVO_PDF := SPACE(250) T_DESCRICAO_ARQUIVO_PDF := SPACE(50) ELSE MsgStop('Arquivo PDF Não é Válido !',SISTEMA) ENDIF *---------------------------------------------------------------------------- oT_CAMINHO_ARQUIVO_PDF : Refresh() oT_DESCRICAO_ARQUIVO_PDF : Refresh() IF SELECT("browse_pdf_imovel") != 0 browse_pdf_imovel->(DbCloseArea()) ENDIF cQuery:=" SELECT * FROM pdf_imovel WHERE CODIGO_IMOVEL = "+ TRANSFORMA_SQL(v_Codigo_Imovel,'N',06,0) + ' ORDER BY ID_PDF DESC ' use sql cQuery alias "browse_pdf_imovel" new via 'MYSQL' browse_pdf_imovel->( DbGoTop()) oDB_PDF_IMOVEL : GoTop() oDB_PDF_IMOVEL : Refresh() RETURN .T. Agora para Recuperar não está dando certo *------------------------------------------------------------------------------- * *------------------------------------------------------------------------------- STATIC FUNCTION EXIBIR_PDF_IMOVEL(v_Id_Pdf_Imovel,v_Codigo_Imovel) Cursor('SQL') IF v_Id_Pdf_Imovel != 0 IF SELECT("pdf_imovel") != 0 pdf_imovel->(DbCloseArea()) ENDIF cQuery:='select * from pdf_imovel where ID_PDF = ' + TRANSFORMA_SQL(v_Id_Pdf_Imovel,"N",07,0) + ' ORDER BY ID_PDF DESC LIMIT 1 ' use sql cQuery alias "pdf_imovel" new via 'MYSQL' pdf_imovel->( DbGoTop()) IF len(ALLTRIM(pdf_imovel->PDF)) != 0 IF pdf_imovel->ID_PDF != 0 *nH := fCreate("TMP_IMG.JPG") nH := "C:\LIXO\TMP_IMG.PDF") fWrite(nH,cFile) fClose(nH) MemoWrit( nH, ANY2SQL(ALLTRIM(pdf_imovel->PDF)) ) ENDIF ENDIF IF SELECT("pdf_imovel") != 0 pdf_imovel->(DbCloseArea()) ENDIF ENDIF CursorArrow() RETURN .T. Agradeço a todos novamente Quote Link to comment Share on other sites More sharing options...
rochinha Posted October 24, 2018 Report Share Posted October 24, 2018 Amiguinhos, Theotokos Olá rochinha, Bom Dia, Estas funções serve também para salvar arquivo BMP ? Pode usar para qualquer coisa, pois você irá transformá-las em um conteúdo HEXA e salvar. marcioe cQuery_Mtabela := cQuery_Mtabela + ANY2SQL( MemoRead( (v_Caminho) ) ) Você deu um memoread direto. Veja que no exemplo que coloquei eu transformo antes. Theotokos 1 Quote Link to comment Share on other sites More sharing options...
joaosolution Posted October 24, 2018 Report Share Posted October 24, 2018 Boa tarde Sugiro a você criar uma tabela a parte para registro dos arquivos, pois com o passar do tempo os Select´s com este campo irão ficar lentos. No meu caso tinha uma tabela clientes, criei outra tabela com código do cliente e arquivo. E sempre que preciso executar uma consulta uso select ... where codcli=xxx Att João Bosco Quote Link to comment Share on other sites More sharing options...
marcioe Posted October 25, 2018 Author Report Share Posted October 25, 2018 Boa tarde Sugiro a você criar uma tabela a parte para registro dos arquivos, pois com o passar do tempo os Select´s com este campo irão ficar lentos. No meu caso tinha uma tabela clientes, criei outra tabela com código do cliente e arquivo. E sempre que preciso executar uma consulta uso select ... where codcli=xxx Att João Bosco Obrigado pela dica amigo, mas já está assim uma tabela separada para Fotos, e uma tabela separada para PDF veja o trecho INSERT INTO pdf_imovel ( Quote Link to comment Share on other sites More sharing options...
rochinha Posted October 27, 2018 Report Share Posted October 27, 2018 Amiguinhos, marcioe Implementou? funcionaram nossas dicas? como ficou? Quote Link to comment Share on other sites More sharing options...
marcioe Posted October 29, 2018 Author Report Share Posted October 29, 2018 Olá a Todos os Amigo. Tudo certo obrigado a todos..... Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.