C:\Harbour\Contrib\hbhpdf ou C:\MiniGui\Harbour\Contrib\hbhpdf ou C:\MiniGui\Harbour\Contrib\hbhpdf etc...
... -setup.exe (Aqui na instalacao da MiniGui vem a pasta Contrib completa...)
e também um exemplo prontinho de duplicata que fiz em PDF com quadros, imagem e cores nas letras.
Código: Selecionar todos
// Esse e´ um exemplo completo, retire as linhas desnecessarias para ir treinando...
// Compilar assim:
// Hbmk2.exe prog.prg hbct.hbc hbhpdf.hbc (Uso o Harbour 3.2)
// https://github.com/libharu/libharu/wiki
// http://libharu.sourceforge.net/graphics.html
// https://github.com/libharu/libharu/wiki/API%3A-Graphics
// Haru Pdf is based on pixels for default resolution 72dpi. Also note the coordinates that are different from HMG HPDF.
// http://libharu.sourceforge.net/graphics.html
//
Function Imp_Fatura(cAlias)
//--------------------------------------------------------
LOCAL page, cLogo, AlturaPdf, LarguraPdf, alturaImagem, LarguraImagem, def_font, f, aaa, angle1, rad1
LOCAL Caminho:="" // <= Local alternativo para arquivos a serem usados...
LOCAL cFileToSave:=Caminho+ARQ_TEMPORARIO()+".PDF"
LOCAL Tela3:=SaveScreen()
LOCAL font_list := { ;
"Courier", ;//01
"Courier-Bold", ;//02
"Courier-Oblique", ;//03
"Courier-BoldOblique", ;//04
"Helvetica", ;//05
"Helvetica-Bold", ;//06
"Helvetica-Oblique", ;//07
"Helvetica-BoldOblique", ;//08
"Times-Roman", ;//09
"Times-Bold", ;//10
"Times-Italic", ;//11
"Times-BoldItalic", ;//12
"Symbol", ;//13
"ZapfDingbats" ;//14
}
Local encodings := { ; //
"StandardEncoding",; // 01
"MacRomanEncoding",; // 02
"WinAnsiEncoding", ; // 03 USO ESTA EM PDF, a mesma que o Quintas usa
"ISO8859-2", ; // 04
"ISO8859-3", ; // 05
"ISO8859-4", ; // 06
"ISO8859-5", ; // 07
"ISO8859-9", ; // 08
"ISO8859-10", ; // 09
"ISO8859-13", ; // 10
"ISO8859-14", ; // 11
"ISO8859-15", ; // 12
"ISO8859-16", ; // 13
"CP1250", ; // 14
"CP1251", ; // 15
"CP1252", ; // 16
"CP1254", ; // 17
"CP1257"} // , ; // 18
//"KOI8-R", ; // ; // 19
// "Symbol-Set", ; // 20
// "ZapfDingbats-Set" } // 21
pdf := HPDF_New()
IF pdf == NIL
Alert( "N"+CHR(198)+"o foi poss"+CHR(161)+"vel criar o arquivo PDF!" )
RETURN NIL
ENDIF
/* Determina o mode de compressão */
HPDF_SetCompressionMode( pdf, HPDF_COMP_ALL )
/*
// Colocar senha e permissão
//
HPDF_SetPassword( pdf, "owner", "user" )
HPDF_SetPermission( pdf, HPDF_ENABLE_READ ) // cannot print
HPDF_SetEncryptionMode( pdf, HPDF_ENCRYPT_R3, 16 )
*/
page := HPDF_AddPage( pdf )
HPDF_Page_SetHeight(page, 841)
HPDF_Page_SetWidth(page, 595)
AlturaPdf := HPDF_Page_GetHeight( page ) // 841 Sao os DEFAULT, pode mudar acima
LarguraPdf := HPDF_Page_GetWidth( page ) // 595 Sao os DEFAULT, pode mudar acima
HPDF_Page_SetLineWidth( page, 1 ) // Espessura dos traços
// Para criar quadros, criei minha propria funcao a partir da original HPDF_Page_Rectangle:
// A original tem esses parametros:
// HPDF_Page_Rectangle( page , margem_esquerda , margem_inferior , largura_esq_para_direita , comprimento_de_baixo_para_cima )
// A minha tem esses (mais faceis)
// Insere_Retangulo( page, nTop, nEsquerda, nBotton, nDireita )
Insere_retangulo( page , 20 , 10 , 820, 585) // Quadro externo maior
Insere_retangulo( page , 100 , 340 , 180, 580) // Quadro Cnpj/Emissao
Insere_retangulo( page , 140 , 340 , 140, 580) //Separador horizontal Quadro Cnpj/Emissao
Insere_retangulo( page , 100 , 470 , 180, 470) //Separador vertical Quadro Cnpj/Emissao
Insere_retangulo( page , 190 , 15 , 310, 580) // Quadro Destinatario
Insere_retangulo( page , 230 , 15 , 230, 580) //Separador horizontal Quadro Destinatario
Insere_retangulo( page , 270 , 15 , 270, 580) //Separador horizontal Quadro Destinatario
Insere_retangulo( page , 190 , 400 , 230, 400) //Separador vertical apos NOME RAZAO
Insere_retangulo( page , 190 , 470 , 230, 470) //Separador vertical apos VENCIMENTO
Insere_retangulo( page , 230 , 485 , 270, 485) //Separador vertical apos BAIRRO
Insere_retangulo( page , 270 , 470 , 310, 470) //Separador vertical apos MUNICIPIO
Insere_retangulo( page , 335 , 15 , 640, 580) // Quadro Dados do documento / DESCRICAO da fatura
Insere_retangulo( page, 350, 15, 350, 580) //Separador horizontal Quadro Dados do documento
Insere_retangulo( page, 335, 330, 640, 330) //Separador vertical Quadro Dados do documento
Insere_retangulo( page, 335, 390, 640, 390) //Separador vertical Quadro Dados do documento
Insere_retangulo( page, 335, 480, 640, 480) //Separador vertical Quadro Dados do documento
Insere_retangulo( page , 645, 390, 680, 580) // Quadro Valor Total da fatura
Insere_retangulo( page , 685, 15, 760, 580) // Quadro Informacoes adicionais
Insere_retangulo( page, 743, 15, 743, 580) //Separador horizontal Informacoes adicionais
Insere_retangulo( page , 765 , 15 , 810, 580) // Quadro Final data do recebimento
Insere_retangulo( page , 780 , 15, 780, 580) //Separador horizontal Quadro Final
Insere_retangulo( page , 780 , 110, 810, 110) //Separador vertical Quadro Final
Insere_retangulo( page , 780 , 265, 810, 265) //Separador vertical Quadro Final
Insere_retangulo( page , 780 , 490, 810, 490) //Separador vertical Quadro Final
// Obrigado a colocar APOS CONFECIONAR GRAFICOS
HPDF_Page_Stroke( page ) // Salva um PATH (caminho)
// Um PATH (caminho) é composto por segmentos de linhas retas e curvas, e caminhos definem formas e regiões.
//SELE("FATURA_REL")
//seek &cAlias->PEDIDO
//SET RELATION TO FIRMA INTO CD_CNPJ
//cLogo=ALLTRIM(CD_CNPJ->LOGOTIPO)
cLogo="logo_teste.jpg"
// Logotipo - MELHOR COM 360 X 122 PIXEL
//IF EXISTE_ARQ(CAMINHO+cLogo)
image1 = HPDF_LoadJPEGImageFromFile(pdf, CAMINHO+cLogo)
LarguraImagem := int ( HPDF_Image_GetWidth(image1) *.4)
AlturaImagem := int ( HPDF_Image_GetHeight(image1) *.4 )
ImagemX := 30
ImagemY := HPDF_Page_GetHeight(page) - 30 - AlturaImagem
HPDF_Page_DrawImage(page, image1, ImagemX, ImagemY, LarguraImagem, AlturaImagem)
//ELSE
// hb_Alert( "O arquivo "+cLogo+" lan"+CHR(135)+"ado no campo LOGOTIPO;"+;
// "no cadastro de CNPJ ("+ALLTRIM(STR(&cAlias->FIRMA))+") n"+CHR( 198)+"o foi encontrado!;"+;
// "A fatura n"+CHR( 198)+"o ter"+CHR( 160)+" logotipo",,,15 ) // Aguarda usuario ou sai automatico em 15 segundos....
//ENDIF
//----- BEGIN TEXT -----------------------------------------
HPDF_Page_BeginText( page )
// Mini cabecalhos dos quadros
def_font := HPDF_GetFont( pdf, font_list[05], "WinAnsiEncoding" )
HPDF_Page_SetFontAndSize( page, def_font, 06 ) // Se colocar a fonte em forma de vetor da erro, entao atribui a variavel def_font.
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 350) , AlturaPdf - 110 , "CNPJ")
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 485) , AlturaPdf - 110 , Acentua_No_Pdf("DATA da EMISS"+CHR(199)+"O"))
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 350) , AlturaPdf - 150 , Acentua_No_Pdf("INSCRI"+CHR(128)+CHR(199)+"O ESTADUAL"))
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 25) , AlturaPdf - 185 , Acentua_No_Pdf("DESTINAT"+CHR(181)+"RIO"))
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 25) , AlturaPdf - 200 , Acentua_No_Pdf("NOME/RAZ"+CHR(199)+"O SOCIAL"))
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 410) , AlturaPdf - 200 , "VENCIMENTO")
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 485) , AlturaPdf - 200 , "CNPJ/CPF")
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 25) , AlturaPdf - 240 , Acentua_No_Pdf("ENDERE"+CHR(128)+"O"))
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 360) , AlturaPdf - 240 , "BAIRRO")
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 505) , AlturaPdf - 240 , "CEP")
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 25) , AlturaPdf - 280 , Acentua_No_Pdf("MUNIC"+CHR(214)+"PIO-UF"))
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 485) , AlturaPdf - 280 , Acentua_No_Pdf("INSCRI"+CHR(128)+CHR(199)+"O ESTADUAL") )
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 25) , AlturaPdf - 330 , "DADOS DO DOCUMENTO")
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 25) , AlturaPdf - 345 , Acentua_No_Pdf("DESCRI"+CHR(128)+CHR(199)+"O"))
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 340) , AlturaPdf - 345 , "QUANTIDADE")
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 420) , AlturaPdf - 345 , Acentua_No_Pdf("VALOR UNIT"+CHR(181)+"RIO"))
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 520) , AlturaPdf - 345 , "VALOR TOTAL")
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 405) , AlturaPdf - 655 , Acentua_No_Pdf("VALOR TOTAL DA FATURA DE LOCA"+CHR(128)+CHR(199)+"O"))
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 25) , AlturaPdf - 680 , "INFORMACOES ADICIONAIS")
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 25) , AlturaPdf - 775 , Acentua_No_Pdf("DECLARAMOS NOSSA CONCORD"+CHR(182)+"NCIA COM A PRESENTE FATURA DE LOCA"+CHR(128)+CHR(199)+"O"))
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 25) , AlturaPdf - 790 , "DATA DO RECEBIMENTO")
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 115) , AlturaPdf - 790 , Acentua_No_Pdf("IDENTIFICA"+CHR(128)+CHR(199)+"O E ASSINATURA DO RECEBEDOR"))
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 330) , AlturaPdf - 790 , Acentua_No_Pdf("NOME LEG"+CHR(214)+"VEL"))
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 495) , AlturaPdf - 790 , Acentua_No_Pdf("FATURA DE LOCA"+CHR(128)+CHR(199)+"O Nº"))
HPDF_Page_SetFontAndSize( page, def_font, 08 ) // Nao pode colocar vetor na fonte, senao ocorre erro 'parou de funcionar'
// Dados da nota
// Esses dados seriam de um arquivo qualquer....
PEDIDO=123456
N_CNPJ="12.234.678/0001-99"
EMISSAO=DATE()
INSC_EST=""
RAZAO="Google Apple Microsoft & Tesla Group"
ENDERECO="Tesla Road"
CIDADE="Austin-TX"
BAIRRO="Tx 78725"
FONE="469-232-9270"
FIRMA=1
INFO01="Teste de PDF 01"
INFO02="Teste de PDF 02"
INFO03="Teste de PDF 03"
OBS_FINAL="Aqui vai info sobre qquer coisa..."
CEP="012456-123"
// Para mudar a cor da fonte/linha
// HPDF_Page_SetRGBFill( page , Red , Green , Blue )
HPDF_Page_SetRGBFill( page, 1.0, 0.0, 0.0 ) // <- vermelho
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 425) , AlturaPdf - 60 , Acentua_No_Pdf("Fatura de Loca"+CHR(135)+CHR(198)+"o No. ") +ALLTRIM(STR(PEDIDO)) ) // +"/"+YEAR(EMISSAO))
HPDF_Page_SetRGBFill( page, 1.0, 1.0, 0.0 ) // <- Amarelo
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 355) , AlturaPdf - 130 , N_CNPJ )
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 515) , AlturaPdf - 130 , DTOC(EMISSAO) )
HPDF_Page_SetRGBFill( page, 0.0, 1.0, 1.0 ) // <- Ciano
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 360) , AlturaPdf - 170 , IF(EMPTY(INSC_EST),"Isento",INSC_EST) )
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 500) , AlturaPdf - 170 , Acentua_No_Pdf("Via "+CHR(233)+"nica"))
// Dados do emissor da nota (nossos dados)
HPDF_Page_SetRGBFill( page, 0.0, 0.0, 1.0 ) // <- Azul
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 25) , AlturaPdf - 105 , ;
IF( FIRMA=0, "FIRMA NAO LANCADA NO PEDIDO->"+ALLTRIM(STR(PEDIDO)) , ;
IF( EMPTY(RAZAO), "RAZAO FIRMA/CNPJ->"+ALLTRIM(STR(FIRMA))+"NAO PREENCHIDA",Acentua_No_Pdf(RAZAO) ) ) )
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 25) , AlturaPdf - 120 , IF(EMPTY(ENDERECO),"ENDERECO",Acentua_No_Pdf(ENDERECO)))
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 25) , AlturaPdf - 135 , IF(EMPTY(BAIRRO),"BAIRRO",Acentua_No_Pdf(BAIRRO)+" Cep."+CEP ) )
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 25) , AlturaPdf - 150 , IF(EMPTY(CIDADE),"CIDADE-UF",Acentua_No_Pdf(CIDADE)) )
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 25) , AlturaPdf - 165 , "Fone: "+FONE )
// Dados do cliente
/*
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 25) , AlturaPdf - 220 , IF(EMPTY(RAZAO),Acentua_No_Pdf(NOME),Acentua_No_Pdf(RAZAO)) )
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 425) , AlturaPdf - 220 , IF(EMISSAO=PRORROGA,"A vista",DTOC(PRORROGA) ) )
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 485) , AlturaPdf - 220 , IF(Empty(CGC_CPF),"- - -",CGC_CPF ) )
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 25) , AlturaPdf - 260 , Acentua_No_Pdf(ENDERECO)+" "+Acentua_No_Pdf(COMPL) )
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 360) , AlturaPdf - 260 , Acentua_No_Pdf(BAIRRO) )
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 530) , AlturaPdf - 260 , IF(Empty(CEP),"- - -",CEP ) )
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 25) , AlturaPdf - 300 , Acentua_No_Pdf(CIDADE) )
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 475) , AlturaPdf - 300 , IF(Empty(INSC_RG),"- - -",INSC_RG ) )
*/
// Imprime CENTRALIZADO
// tw := HPDF_Page_TextWidth( page, page_subtitle ) //152.90 -> TAMANHO DE PIXELS QUE OCUPA O TEXTO CONFORME TEXTO E SIZE SELECIONADO
// HPDF_Page_TextOut( page, ( width - tw ) / 2, height - 43, page_subtitle )
// Dados da Discriminacao
/*
SELE("FAT_DISCRI")
OrdScope( 0 , &cAlias->PEDIDO )
OrdScope( 1 , &cAlias->PEDIDO )
SUM TOTAL TO TOT_COM
GO TOP
DO WHILE !EOF()
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 30) , AlturaPdf - (360 + LINHA*9) , Acentua_No_Pdf(DESCRICAO) )
IF QUANT<>0
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 340) , AlturaPdf - (360 + LINHA*9) , TRANSFORM(QUANT,"@E 999,999.99") )
ENDIF
IF UNIT<>0
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 420) , AlturaPdf - (360 + LINHA*9) , TRANSFORM(UNIT,"@E 9,999,999.99") )
ENDIF
IF TOTAL<>0
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 520) , AlturaPdf - (360 + LINHA*9) , TRANSFORM(TOTAL,"@E 99,999,999.99") )
ENDIF
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 520) , AlturaPdf - 673 , TRANSFORM(TOT_COM,"@E 99,999,999.99") )
SKIP
ENDDO
SELE("FATURA_REL")
*/
HPDF_Page_SetRGBFill( page, 0.0, 1.0, 0.0 ) // <- Verde
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 30) , AlturaPdf - 700 , Acentua_No_Pdf(INFO01) )
HPDF_Page_SetRGBFill( page, 0.0, 0.0, 0.0 ) // <- Preto
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 30) , AlturaPdf - 715 , Acentua_No_Pdf(INFO02) )
HPDF_Page_SetRGBFill( page, 0.3, 0.8, 0.5 ) // <- Sei la que cor....
HPDF_Page_TextOut( page, LarguraPdf- (LarguraPdf - 30) , AlturaPdf - 730 , Acentua_No_Pdf(INFO03) )
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 510) , AlturaPdf - 802 , ALLTRIM(STR(PEDIDO)) )
def_font := HPDF_GetFont( pdf, font_list[05], "WinAnsiEncoding" ) // Nao pode colocar vetor na fonte, senao ocorre erro 'parou de funcionar'
HPDF_Page_SetFontAndSize( page, def_font, 10 ) // Nao pode colocar vetor na fonte, senao ocorre erro 'parou de funcionar'
HPDF_Page_SetRGBFill( page, 0.9, 0.3, 0.7 ) // Sei la que cor...
HPDF_Page_TextOut( page, LarguraPdf- ( LarguraPdf - 25) , AlturaPdf - 755 , Acentua_No_Pdf(OBS_FINAL))
HPDF_Page_EndText( page )
//----- END TEXT -----------------------------------------
/*
// ------ Escrita vertical----------------------
HPDF_Page_BeginText( page )
angle1 := 90 // A rotation of 30 degrees.
rad1 := angle1 / 180 * 3.141592 // Calcurate the radian value.
HPDF_Page_SetTextMatrix( page, Cos( rad1 ), Sin( rad1 ), - Sin( rad1 ), Cos( rad1 ), 20, 162 )
HPDF_Page_SetFontAndSize( page, def_font, 7 ) // Nao pode colocar vetor na fonte, senao ocorre erro 'parou de funcionar'
HPDF_Page_TextOut( page, 21 , height -126 , "Hora." )
HPDF_Page_TextOut( page, 27 , height -126 , "Trab." )
HPDF_Page_SetFontAndSize( page, def_font, 10 ) // Nao pode colocar vetor na fonte, senao ocorre erro 'parou de funcionar'
HPDF_Page_TextOut( page, 25 , height -168 , "Dia" )
HPDF_Page_EndText( page )
//------- Fim da Escrita vertical---------------
*/
/*
// OUTRA FORMA DE ESCREVER O TEXTO: PAGE_SHOWTEXT (ALEM DE PAGE_TEXTOUT)
HPDF_Page_BeginText( page )
HPDF_Page_MoveTextPos( page, 60, height - 105 )
FOR i := 1 TO Len( font_list )
samp_text := "abcdefgABCDEFG12345!#$%&+-@?"
font := HPDF_GetFont( pdf, font_list[ i ], "WinAnsiEncoding" )
HPDF_Page_SetFontAndSize( page, def_font, 9 )
HPDF_Page_ShowText( page, font_list[ i ] )
HPDF_Page_MoveTextPos( page, 0, - 18 )
HPDF_Page_SetFontAndSize( page, font, 20 )
HPDF_Page_ShowText( page, samp_text )
HPDF_Page_MoveTextPos( page, 0, - 20 )
NEXT
HPDF_Page_EndText( page )
*/
IF HPDF_SaveToFile( pdf, cFileToSave ) != 0 // _PDF
? "0x" + hb_NumToHex( HPDF_GetError( pdf ), 4 ), hb_HPDF_GetErrorString( HPDF_GetError( pdf ) ), HPDF_GetErrorDetail( pdf )
ENDIF
HPDF_Free( pdf ) // _PDF
IF hb_FileExists( cFileToSave )
BB = "START sumatraPDF.EXE "+cFileToSave // BB = "START "&CAMINHO"+"READER.EXE &NET7"+".PDF"
HB_RUN( BB )
HB_Alert(cFileToSave+" Aberto em anexo!")
ELSE
HB_Alert(cFileToSave+" nao encontrado!")
ENDIF
RETURN // hb_FileExists( cFileToSave )
//=== Fim do modulo principal ==================================================*
//=============================================================================*
// Substitui caracteres da string por codigos WinAnsiEncoding para acentuar em HaruPDF
Function Acentua_No_Pdf(cTexto)
//- - - - - - - - - - - - - - -
Local aCodAntes:= {CHR(181),; // "Á" Chr(193) 01
CHR(160),; // "á" Chr(225) 02
CHR(199),; // "Ã" Chr(195) 03
CHR(128),; // "Ç" Chr(199) 04
CHR(198),; // "ã" Chr(227) 05
CHR(183),; // "À" Chr(192) 06
CHR(133),; // "à" Chr(224) 07
CHR(182),; // "Â" Chr(194) 08
CHR(131),; // "â" Chr(226) 09
CHR(142),; // "Ä" Chr(196) 10
CHR(144),; // "É" Chr(201) 11
CHR(210),; // "Ê" Chr(202) 12
CHR(136),; // "ê" Chr(234) 13
CHR(211),; // "Ë" Chr(203) 14
CHR(137),; // "ë" Chr(235) 15
CHR(214),; // "Í" Chr(205) 16
CHR(161),; // "í" Chr(237) 17
CHR(224),; // "Ó" Chr(211) 18
CHR(162),; // "ó" Chr(243) 19
CHR(229),; // "Õ" Chr(213) 20
CHR(228),; // "õ" Chr(245) 21
CHR(181),; // "ä" Chr(228) 22
CHR(226),; // "Ô" Chr(212) 23
CHR(147),; // "ô" Chr(244) 24
CHR(233),; // "Ú" Chr(218) 25
CHR(163),; // "ú" Chr(250) 26
CHR(154),; // "Ü" Chr(220) 27
CHR(129),; // "ü" Chr(252) 28
CHR(135),; // "ç" Chr(231) 29
CHR(130),; // "é" Chr(233) 30
CHR(165),; // "Ñ" Chr(209) 31
CHR(164),; // "ñ" Chr(241) 32
CHR(166),; // "ª" Chr(170) 33
CHR(167)} // "º" Chr(176) 34
Local aCodDepois:={Chr(193),; // "Á" CHR(181) 01
Chr(225),; // "á" CHR(160) 02
Chr(195),; // "Ã" CHR(199) 03
Chr(199),; // "Ç" CHR(128) 04
Chr(227),; // "ã" CHR(198) 05
Chr(192),; // "À" CHR(183) 06
Chr(224),; // "à" CHR(133) 07
Chr(194),; // "Â" CHR(182) 08
Chr(226),; // "â" CHR(131) 09
Chr(196),; // "Ä" CHR(142) 10
Chr(201),; // "É" CHR(144) 11
Chr(202),; // "Ê" CHR(210) 12
Chr(234),; // "ê" CHR(136) 13
Chr(203),; // "Ë" CHR(211) 14
Chr(235),; // "ë" CHR(137) 15
Chr(205),; // "Í" CHR(214) 16
Chr(237),; // "í" CHR(161) 17
Chr(211),; // "Ó" CHR(224) 18
Chr(243),; // "ó" CHR(162) 19
Chr(213),; // "Õ" CHR(229) 20
Chr(245),; // "õ" CHR(228) 21
Chr(228),; // "ä" CHR(181) 22
Chr(212),; // "Ô" CHR(226) 23
Chr(244),; // "ô" CHR(147) 24
Chr(218),; // "Ú" CHR(233) 25
Chr(250),; // "ú" CHR(163) 26
Chr(220),; // "Ü" CHR(154) 27
Chr(252),; // "ü" CHR(129) 28
Chr(231),; // "ç" CHR(135) 29
Chr(233),; // "é" CHR(130) 30
Chr(209),; // "Ñ" CHR(165) 31
Chr(241),; // "ñ" CHR(164) 32
Chr(170),; // "ª" CHR(166) 33
Chr(176)} // "º" CHR(167) 34
LOCAL cParte:="", cTextoAcentuado:=""
FOR F=1 TO LEN(cTexto) // Percorre letra por letra em cTexto
cParte=SUBST(cTexto,F,1) // Atribui cada letra em cParte
AA=ASCAN(aCodAntes,cParte) // Se achar cParte em aCodAntes, entao ...
IF AA>0
cParte=aCodDepois[AA] //.. substitui pela correspondente da pagina de codigo do PDF
ENDIF
cTextoAcentuado=cTextoAcentuado+cParte // Vai montando o novo texto acentuado;
NEXT
RETURN cTextoAcentuado
//=============================================================================*
//=============================================================================*
FUNCTION ARQ_TEMPORARIO() // Gera nome de arquivo temporario
//- - - - - - - - - - - -
RETURN "Y_"+ALLTRIM(RIGHT(NETNAME(),2))+ ALLTRIM( STR(INT(SECOND())) )
//=============================================================================*
//=============================================================================*
// Substitui a HPDF_Page_Rectangle() , com a vantagem de ser feito o retangulo no PDF
// de cima para baixo, ao inves do comando original que comeca de baixo para cima.
Function Insere_retangulo( cPage , nTop , nEsquerda , nBot , nDireita)
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LOCAL Altura_do_Pdf := HPDF_Page_GetHeight( cPage )
LOCAL margem_esquerda := nEsquerda
LOCAL margem_inferior := Altura_do_pdf-nBot
LOCAL larg_esq_para_direita := nDireita-nEsquerda
LOCAL comp_de_baixo_para_cima := nBot-nTop
HPDF_Page_Rectangle(cPage, margem_esquerda , margem_inferior , larg_esq_para_direita , comp_de_baixo_para_cima )
return
//=============================================================================*
//=============================================================================*
// Substitui a HPDF_Page_TextOut() , com a vantagem de ser impresso o texto no PDF
// de cima para baixo, ao inves do comando original que comeca de baixo para cima.
Function Insere_Texto( cPage , nTop , nEsquerda , nBot , nDireita, cTexto )
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LOCAL Altura_do_Pdf := HPDF_Page_GetHeight( cPage )
LOCAL margem_esquerda := nEsquerda
LOCAL margem_inferior := Altura_do_pdf-nBot
LOCAL larg_esq_para_direita := nDireita-nEsquerda
LOCAL comp_de_baixo_para_cima := nBot-nTop
HPDF_Page_TextOut(cPage, margem_esquerda , margem_inferior , larg_esq_para_direita , comp_de_baixo_para_cima ,cTexto)
return
//=============================================================================*