Página 1 de 2
Imagem nos emails com resource
Enviado: 01 Jan 2016 15:37
por JoséQuintas
Comecei a usar o recém descoberto método de resource, existente no Harbour pra qualquer sistema operacional
Código: Selecionar todos
FUNCTION JPEGBancoItau()
#pragma __binarystreaminclude "image\banco341.jpg" | RETURN %s
FUNCTION JPEGBancoBradesco()
#pragma __binarystreaminclude "image\banco237.jpg" | RETURN %s
FUNCTION JPEGNatal()
#pragma __binarystreaminclude "image\natal.jpg" | RETURN %s
FUNCTION JPEGAnoNovo()
#pragma __binarystreaminclude "image\anonovo.jpg" | RETURN %s
Os dois primeiros, uso pra colocar imagem nos PDFs
Os dois últimos, vou passar a usar nos emails. É que final de ano troco o logotipo pelas imagens de festas.
Não vou mais precisar de arquivo em disco, nos clientes, para esses casos.
Ah sim... nos emails... a tip_Encode() que codifica imagem, converte conteúdo e não arquivo, então está do jeito que ela precisa.
Imagem nos emails com resource
Enviado: 01 Jan 2016 16:33
por asimoes
Olá Quintas,
Fiquei interessado neste recurso, você poderia postar um exemplo com pdf?
Imagem nos emails com resource
Enviado: 02 Jan 2016 20:08
por asimoes
Olá Quintas,
Você faz assim para usar a imagem em pdf?
Código: Selecionar todos
hb_MemoWrit( "teste.bin", JPegAsa() )
oPDF := PDFClass():New()
oPDF:cImagem := "teste.bin"
FUNCTION JPegAsa()
#pragma __binarystreaminclude "img\asaprev1.jpg" | RETURN %s
Imagem nos emails com resource
Enviado: 04 Jan 2016 16:36
por asimoes
Consegui com JPEG E PNG
Com as funções:
Código: Selecionar todos
oPDF:cImagem := JPegAsa()
//oImage := HPDF_LoadPngImageFromMem( ::oPdf, cJPEGFile, nWidth )
oImage := HPDF_LoadJpegImageFromMem( ::oPdf, cJPEGFile, nWidth )
#pragma -km+
FUNCTION JPegAsa()
#pragma __binarystreaminclude "img\asaprev1.jpg" | RETURN %s
Imagem:
Imagem nos emails com resource
Enviado: 04 Jan 2016 17:32
por JoséQuintas
Não, acho que não conseguiu.
Na linha acima, carrega a imagem para a variável ::cImagem da classe
Código: Selecionar todos
oImage := HPDF_LoadJpegImageFromMem( ::oPdf, cJPEGFile, nWidth )
Nessa linha usa outra variável.
Falta ver a linha aonde usa o desenho, talvez tenha deixado igual antes.
O que já tentei aqui e não deu certo:
Código: Selecionar todos
TestJpg := MemoRead( "test.jpg" )
oImage := HPDF_LoadJPEGImageFromMem( ::oPDF, TestJpg, Len( TestJpg ) )
HPDF_Page_DrawImage( ::oPage, oImage, nLeft, nBottom, nWidth, nHeight )
pra usar no lugar deste:
Código: Selecionar todos
oImage := HPDF_LoadJPEGImageFromFile( ::oPdf, cJPEGFile )
HPDF_Page_DrawImage( ::oPage, oImage, nLeft, nBottom, nWidth, nHeight )
São 2 etapas: carregar a imagem para o PDF, e depois desenhar a imagem.
Como arquivo ok.
Esse de memória ainda não consegui.
Imagem nos emails com resource
Enviado: 04 Jan 2016 17:38
por asimoes
Eu fiz esse outro método só para imagens resource
Código: Selecionar todos
METHOD DrawImageB( bJPEGFile, nRow, nCol, nWidth, nHeight ) CLASS PDFClass
LOCAL oImage
IF ::nType == PDF_TXT
RETURN Nil
ENDIF
nRow := ::RowToPDFRow( nRow )
nCol := ::ColToPDFCol( nCol )
oImage := HPDF_LoadJPEGImageFromMem( ::oPdf, bJPEGFile, nWidth )
//oImage := HPDF_LoadPngImageFromMem( ::oPdf, bJPEGFile, nWidth )
//oImage := HPDF_LoadRawImageFromMem(::oPdf, bJPEGFile ) // testar
HPDF_Page_DrawImage( ::oPage, oImage, nCol, nRow, nWidth, nHeight )
RETURN NIL
Imagem nos emails com resource
Enviado: 04 Jan 2016 17:42
por asimoes
Código: Selecionar todos
oPDF := PDFClass():New()
oPDF:nType := 2 //1-Paisagem, 2-Retrato
oPDF:cFileName := "TESTE.PDF"
oPDF:cHeader01 := "TESTE"
oPDF:cFields01 := "Matrícula Sócio/Dependente Dt.Entrada Dt.Saída "
oPDF:nFontSize := 11
oPDF:nMargin := 18
oPDF:bImagem := JPegAsa()
oPDF:Begin()
No método PageHeader:
IF !Empty(::bImagem)
::DrawImageB( ::bImagem, 4, 0, 60, 30)
ENDIF
Imagem nos emails com resource
Enviado: 04 Jan 2016 18:17
por JoséQuintas
Caracas....
Tava com dois problemas de uma vez.
1. O JPEG que peguei pra teste não funcionava
2. O Harbour não recompila o fonte de resource, se apenas trocar o arquivo de imagem, por isso não adiantou trocar imagem
Apaguei tudo pra forçar recompilar e deu certo.
Versão resumida:
Código: Selecionar todos
cJPEGFile := JPEGNatal()
oImage := HPDF_LoadJPEGImageFromMem( ::oPDF, cJPEGFile, Len( cJPEGFile ) )
HPDF_Page_DrawImage( ::oPage, oImage, nLeft, nBottom, nWidth, nHeight )
FUNCTION JPEGNatal()
#pragma __binarystreaminclude "image\natal.jpg" | RETURN %s
Pra quem não entendeu:
Vai bastar o EXE. As imagens ficam embutidas no EXE.
Valeu ASimões.
Eu Ia quebrar a cabeça por muito tempo, porque o problema não era o fonte.
Imagem nos emails com resource
Enviado: 04 Jan 2016 20:23
por JoséQuintas
ASimões.
Verifique se acha interessante:
Código: Selecionar todos
METHOD DrawImageSize( nRow, nCol, nHeight, nWidth, cJPEGFile ) CLASS PDFClass
::DrawImageBox( nRow, nCol, nRow + nHeight, nCol + nWidth, cJPEGFile )
RETURN NIL
DrawImageBox -> desenha passando coordenadas igual box: linha inicial, coluna inicial, linha final, coluna final
DrawImageSize -> desenha passando tamanho em linhas/colunas: linha inicial, coluna inicial, altura, largura
Na dúvida, deixei os dois modos, é só essa rotina a mais, bem pequena.
Padronizei tudo com o outro modo, mas mantive esse.
Imagem nos emails com resource
Enviado: 05 Jan 2016 11:20
por asimoes
Quintas,
Fiz um teste com:
Código: Selecionar todos
#pragma -km+
FUNCTION JPegAsa()
#pragma __binarystreaminclude "img\asaprev1.jpg" | RETURN %s
Criei uma lib e funciona também.
Imagem nos emails com resource
Enviado: 05 Jan 2016 12:15
por JoséQuintas
não entendi o que quis dizer, foi sobre usar em LIB?
porque o #pragma -km+ ?
Pelo que vi no harbour isso é pra ativar macro substituição.
Compatibility flags: -k[options]
Options: c clear all flags (strict Clipper mode)
h[-] Harbour mode (default)
o[-] allow operator optimizations
i[-] enable support for HB_INLINE (default)
r[-] runtime settings enabled
s[-] allow indexed assignment on all types
x[-] extended Xbase++ mode (default)
u[-] strings in user encoding
d[-] accept macros with declared symbols
m[+] turn off macrotext substitution
j[+] turn off jump optimization in pcode
? this info
Imagem nos emails com resource
Enviado: 05 Jan 2016 12:47
por asimoes
Sim eu fiz um teste colocando a função em uma lib e funcionou.
libresource.hbp
Código: Selecionar todos
#---------------------------
# Nome da Lib
# ---------------------------
-olibresource
# ---------------------------
# Prg(s) e Rc(s)
# ---------------------------
libresource.prg
libresource.hbc
hbmk.hbmk
Código: Selecionar todos
libresource.hbc
-head=full
-n
-warn=no
-inc
-hblib
-workdir=.\objmingw\
libresource.prg
Código: Selecionar todos
#pragma -km+
FUNCTION PNGAsa()
#pragma __binarystreaminclude "img\abertura.png" | RETURN %s
#pragma -km+
FUNCTION JPegAsa()
#pragma __binarystreaminclude "img\asaprev1.jpg" | RETURN %s
Imagem nos emails com resource
Enviado: 05 Jan 2016 12:51
por asimoes
Quintas,
porque o #pragma -km+ ?
Eu peguei de um comentário do próprio Viktor, pode ser desnecessário.
Imagem nos emails com resource
Enviado: 05 Jan 2016 14:24
por asimoes
Quintas,
Acrescentando mais tempero na sopa (rs) um exemplo com wave (usando SND_MEMORY) na função PlayWave()
Obs.: A função MessageWave() pode estar embutida em uma lib.
Código: Selecionar todos
PlayWave(MessageWave(), .f.)
FUNCTION MessageWave()
#pragma __binarystreaminclude "message.wav" | RETURN %s
#pragma begindump
#include <windows.h>
#include <commctrl.h>
#include <mmsystem.h>
#include "hbapi.h"
HB_FUNC( PLAYWAVE )
{
int Style = SND_ASYNC;
HMODULE hmod = NULL;
if( hb_parl( 2 ) )
{
Style = Style | SND_RESOURCE;
hmod = GetModuleHandle( NULL );
}
else
Style = Style | SND_MEMORY;
if( hb_parl( 3 ) )
Style = Style | SND_SYNC;
if( hb_parl( 4 ) )
Style = Style | SND_NOSTOP;
if( hb_parl( 5 ) )
Style = Style | SND_LOOP;
if( hb_parl( 6 ) )
Style = Style | SND_NODEFAULT;
hb_retl( PlaySound( hb_parc( 1 ), hmod, Style ) );
}
#pragma enddump
Imagem nos emails com resource
Enviado: 17 Jan 2016 13:56
por fladimir
Desculpe ser talvez um pouco "chato", mas o título correto do tópico não seria "Imagem nos PDFs com resources"?