Página 1 de 1

Acentuação PDF - Via HaruPdf

Enviado: 09 Set 2021 14:08
por Robson Davila
Estou gerando um PDF (HaruPDF), utilizando um relatório já gerado em arquivo e utilizando os comandos Haru para criar o PDF.
O que está acontecendo: o PDF é gerado, mas os caracteres com acentuação, não está conseguindo exibir de forma correta.
Estou executando no Linux com o Harbour 3.2

Acentuação PDF - Via HaruPdf

Enviado: 09 Set 2021 16:56
por Fernando queiroz
E porque nao gerar o PDF em vez de utilizar um relatorio gerado em arquivo ??????????

utilize a PDFCLASS do Quintas e saia desse problema

modo de utilizacao de PDFCLASS

Código: Selecionar todos

	oPDF := PDFClass()
	IF oPDF == NIL
		hwg_msginfo("Falha da criação do objeto PDF")
		RETURN .F.
	ENDIF
	HB_GTINFO( HB_GTI_CLIPBOARDDATA, ::cFileName)
	oPDF:cFileName 	:= ::cFileName
	oPDF:cDefaultPrinter := ::cDefaultPrinter

	oPDF:SetType( PDFCLASS_LANDSCAPE )
	
	oPDF:Begin()
	nLinha	:= 100
	nPagina := 1
	nMaxCol := oPDF:MaxCol()
	
	DO WHILE ! oQuery:Eof()
		IF 	nLinha	> 96
			oPDF:AddPage()
			
			oPDF:DrawBox( 0, 0, 9, 41, Nil, Nil, Nil )                 // box esquerdo
			oPDF:DrawImageSize( 0.5, 0.5, 8, 39, "logotipo.jpg" )             // logotipo

			oPDF:DrawBox( 0, 41, 9, 117, Nil, Nil, Nil )  // box centro
			oPDF:DrawText( 2.0, 42, RTRIM(oQuery1:Fields( "NomeUsuario" ):Value), nil, 10, "Helvetica-Bold", Nil, Nil )
			oPDF:DrawText( 3.5, 42, RTRIM(oQuery1:Fields( "n_xLgr" ):Value) + ', ' + RTRIM(oQuery1:Fields( "n_nro" ):Value), Nil, 8, "Helvetica", Nil, Nil )
			oPDF:DrawText( 5.0, 42,'BAIRRO - ' + RTRIM(oQuery1:Fields( "n_xBairro" ):Value), Nil, 8, "Helvetica", Nil, Nil )
			oPDF:DrawText( 6.4, 42, "CEP " +oQuery1:Fields( "n_CEP" ):Value + ' - ' + RTRIM(oQuery1:Fields( "n_xMun" ):Value) + ' - ' + oQuery1:Fields( "n_xUF" ):Value + " - FONE: " +oQuery1:Fields( "n_fone" ):Value, Nil, 8, "Helvetica", Nil, Nil )
			oPDF:DrawText( 8.0, 42, 'CNPJ-'+RTRIM(oQuery1:Fields( "n_CNPJ" ):Value) + '   Insc.Est.-' + RTRIM(oQuery1:Fields( "n_IE" ):Value) , Nil, 10, "Helvetica-Bold", Nil, Nil )

			oPDF:DrawBox( 0, nMaxCol, 9, 41, Nil, Nil, Nil )  // box direito
			oPDF:DrawText( 2, 120, "CONTAS A RECEBER  " , Nil, 10, "Helvetica", Nil, Nil )
			oPDF:DrawText( 4, 120, "PAGINA Nr.: " + STRZERO(nPagina,4,0), Nil, 10, "Helvetica", Nil, Nil )
			oPDF:DrawText( 6, 120, "DATA: " + DTOC(M->DAT_HOJE), Nil, 10, "Helvetica", Nil, Nil )
			oPDF:DrawText( 8, 120, "HORA: " + TIME(), Nil, 10, "Helvetica", Nil, Nil )

			oPDF:DrawBox( 9, 0, 12, nMaxCol, Nil, Nil, Nil )
			oPDF:DrawText( 11, 3, "PERIODO DE "+DTOC(::dPERINI)+" A "+DTOC(::dPERFIN), Nil, 10, "Helvetica-Bold", Nil, Nil )

			oPDF:DrawBox( 12, 0, 15, nMaxCol, Nil, Nil, Nil )  
			oPDF:DrawText( 14, 3, "CLIENTE: "+STRZERO(oQuery:Fields( "CLIENTES_ID" ):Value,11,0)+"-"+oQuery:Fields( "nraz_soc" ):Value , Nil, 10, "Helvetica-Bold", Nil, Nil )

			oPDF:DrawBox( 15, 0, 17.5, nMaxCol, Nil, Nil, Nil )
			oPDF:DrawText( 17, 01, "TITULO", Nil, 10, "Helvetica-Bold", Nil, Nil )
			oPDF:DrawText( 17, 21, "VENCIMENTO" , Nil, 10, "Helvetica-Bold", Nil, Nil )
			oPDF:DrawText( 17, 41, "DIAS" , Nil, 10, "Helvetica-Bold", Nil, Nil )
			oPDF:DrawText( 17, 52, "MORA" , Nil, 10, "Helvetica-Bold", Nil, Nil )
			oPDF:DrawText( 17, 64, "JUROS" , Nil, 10, "Helvetica-Bold", Nil, Nil )
			oPDF:DrawText( 17, 76, "VALOR TITULO", Nil, 10, "Helvetica-Bold", Nil, Nil )		
			oPDF:DrawText( 17, 99, "ACRESCIMOS", Nil, 10, "Helvetica-Bold", Nil, Nil )	
			oPDF:DrawText( 17, 124, "TOTAL RECEBER", Nil, 10, "Helvetica-Bold", Nil, Nil )

			nLinha := 19
			nPagina += 1

		ENDIF

		nMULTA:=0.00
		nJUROS:=0.00
		IF (M->DAT_HOJE-oQuery:Fields( "DATVEN" ):Value) > 0
			IF M->DAT_HOJE > oQuery:Fields( "VENPRO" ):Value
				nMULTA=oQuery:Fields( "MORA" ):Value*(M->DAT_HOJE-oQuery:Fields( "DATVEN" ):Value)
				nJUROS=(oQuery:Fields( "VALOR" ):Value*oQuery:Fields( "PER_MULTA" ):Value*(M->DAT_HOJE-oQuery:Fields( "DATVEN" ):Value))/3000
			END 
		END
		nACRESCIMOS+=nMULTA+nJUROS
		nTOTALARECEBER+=oQuery:Fields( "VALOR" ):Value+nMULTA+nJUROS			
	
		oPDF:DrawText( nLinha, 00, STRZERO(oQuery:Fields( "DOCUMENTO" ):Value,9,0) + "/" + STRZERO(oQuery:Fields( "PARCELA" ):Value,2,0), Nil, 10, "Courier-Bold", Nil, Nil )
		oPDF:DrawText( nLinha, 22, oQuery:Fields( "DATVEN" ):Value, Nil, 10, "Courier-Bold", Nil, Nil )

		IF (M->DAT_HOJE-oQuery:Fields( "DATVEN" ):Value) > 0
			oPDF:DrawText( nLinha, 41, (M->DAT_HOJE-oQuery:Fields( "DATVEN" ):Value), "9999", 10, "Courier-Bold", Nil, Nil )
		ENDIF	
			
		oPDF:DrawText( nLinha, 50, oQuery:Fields( "MORA" ):Value, "@E 999.99", 10, "Courier-Bold", Nil, Nil )
		oPDF:DrawText( nLinha, 64, oQuery:Fields( "PER_MULTA" ):Value, "@E 999.99", 10, "Courier-Bold", Nil, Nil )
		oPDF:DrawText( nLinha, 75, oQuery:Fields( "VALOR" ):Value, "@E 99,999,999.99", 10, "Courier-Bold", Nil, Nil )
		oPDF:DrawText( nLinha, 103, nMULTA+nJUROS, "@E 99,999.99", 10, "Courier-Bold", Nil, Nil )
		oPDF:DrawText( nLinha, 126, oQuery:Fields( "VALOR" ):Value+nMULTA+nJUROS, "@E 99,999,999.99", 10, "Courier-Bold", Nil, Nil )
		nLinha +=2
		nTOTGERAL+=oQuery:Fields( "VALOR" ):Value

		oQuery:MoveNext()
	ENDDO   
	IF nTOTGERAL # 0.00
		oPDF:DrawBox( nLinha, 0, nLinha+3, nMaxCol, Nil, Nil, Nil )
		oPDF:DrawText( nLinha+2, 75, transform(nTOTGERAL,"@E 99,999,999.99") , Nil, 10, "Courier-Bold", Nil, Nil )
		oPDF:DrawText( nLinha+2, 103, transform(nACRESCIMOS,"@E 99,999.99") , Nil, 10, "Courier-Bold", Nil, Nil )
		oPDF:DrawText( nLinha+2, 126, transform(nTOTALARECEBER,"@E 99,999,999.99") , Nil, 10, "Courier-Bold", Nil, Nil )
	ENDIF
	oPDF:End(  )

	oPDF:PrintPreview(  )


RETURN NIL	

Acentuação PDF - Via HaruPdf

Enviado: 09 Set 2021 17:05
por Fernando queiroz
O RELATORIO EM PDF
O RELATORIO EM PDF

Acentuação PDF - Via HaruPdf

Enviado: 09 Set 2021 18:43
por JoséQuintas
Na Harupdf também existe codepage.
Se o relatório está com codepage diferente da Harupdf, não vai mostrar certo.

Acentuação PDF - Via HaruPdf

Enviado: 13 Set 2021 10:21
por Robson Davila
Quintas, fiz dessa forma:

Def_Font := HPDF_GetFont( oPdf, "Courier", "CP1252" )
*
HPDF_Page_SetFontAndSize( oPagina, Def_Font, 24 )
HPDF_SetCurrentEncoder( oPagina, "CP1252" )

no momento da impressão da linha é assim:

C_BUF_SAIDA := "Relação de empresas Página: 001"

HPDF_Page_ShowText( oPagina, C_BUF_SAIDA )

Mas mesmo assim... não faz a impressão do caracter acentuado de forma correta.
Fica assim:

Rela‡Æo de empresas P gina : 001

O que pode estar havendo para não realizar a acentuação de forma correta?

Só um detalhe, estou utilizando no Lixux.

Acentuação PDF - Via HaruPdf

Enviado: 13 Set 2021 17:31
por JoséQuintas
Talvez a pergunta melhor seja: como faz pra enxergar esse relatório TXT com acentuação??
Qual a codepage do "visualizador" ?

Acentuação PDF - Via HaruPdf

Enviado: 13 Set 2021 17:42
por ssflavio
Já quebrei muito a cabeça com isso!
as aplicações no modo console utilizam OEM-850 e o Windows ISO
se voce utiliza o editor notepad++ tem a facilidade de trocar a forma de mostrar o conteudo dos fontes.
o maior problema é quando o usuario utiliza a acentuação e é salvo nos bancos de dados, ai a coisa fica mais complicada porque vai estar salvo em OEM-850 e tem que mostrar como iso
fiz uma função de conversão que utilizo

Código: Selecionar todos

substr(PTXT, I, 1)
    CHAR_ASC := asc(substr(PTXT, I, 1))
    INDICE := ascan(v850, CHAR_ASC)
    if INDICE > 0
      CHAR_ASC := alltrim(str(vUTF[INDICE]))
      RET += "\uc1\u" + CHAR_ASC + "G"
    else
      RET += chr(CHAR_ASC)
    endif
next

return(RET)
***************************************************************************************************

***
*** CONVERTE OS CARACTERES ASCII EM ANSI (DOS -> WINDOWS)
***
***  +-----------+-----------+-----------+
***  |CARACTER   |ANSI       | ASCII     |
***  +-----------+-----------+-----------+
***  |CEDILHA    |þà 231 199 | çÇ 135 128|
***  |A + TIL    |Ò├ 228 195 | ãà 198 199|
***  |A + TREMA  | ─     196 |  Ä     142|
***  |A + ACENTO |ß┴ 225 193 | áÁ 160 181|
***  |A + CRASE  |Ó└ 224 192 | àÀ 133 183|
***  |O + ACENTO |¾Ë 243 211 | óÓ 162 224|
***  |O + CIRCUNF|¶È 244 212 | ôÔ 147 226|
***  |O + TIL    |§ı 245 213 | õÕ 228 229|
***  |O + TREMA  |÷  246     | öÖ 148 153|
***  |U + ACENTO |·┌ 250 218 | úÚ 163 233|
***  |E + ACENTO |Ú╔ 233 201 | éÉ 130 144|
***  |E + CIRCUNF|Û╩ 234 202 | êÊ 136 210|
***  |I + ACENTO |Ý═ 237 205 | íÍ 161 214|
***  +-----------+-----------+-----------+
***

function ASCII_ANSI(PTXT)
private RET, TAMTXT, CHAR_TXT, I

if valtype(PTXT) # "C"
   return(PTXT)
endif

vANSI := {231,228,225,224,243,244,245,246,250,233,234,237,199,195,196,193,192,211,212,213,218,201,202,205}
v850  := {135,198,160,133,162,147,228,148,163,130,136,161,128,199,142,181,183,224,226,229,233,144,210,214}
*Letras     ç,  ã,  á,  à,  ó,  ô,  õ,  ö,  ú,  é,  ê,  í,  Ç,  Ã,  Ä,  Á,  À,  Ó,  Ô,  Õ,  Ú,  É,  Ê,  Í

RET := ""
TAMTXT := len(PTXT)
for I = 1 to TAMTXT
    CHAR_TXT := asc(substr(PTXT, I, 1))
    INDICE := ascan(v850, CHAR_TXT)
    if INDICE > 0
       CHAR_TXT := vANSI[INDICE]
    endif
    RET += chr(CHAR_TXT)
next

return(RET)
***************************************************************************************************
um exemplo de utilização seria:

Código: Selecionar todos

@ 0,0 say ascii_ansi(ENDERE_CLI)

Acentuação PDF - Via HaruPdf

Enviado: 28 Mar 2022 18:02
por carlaoonline
Boa tarde!

Esse negócio de codepage é um infern... demora pro cara pegar os macetes...

No caso de editores também é um problema as vezes, conforme o editor que você cria o PRG fonte, se editar e gravar em outro...lá se foi toda sua acentuação...Tem que ter cuidado nas configurações.



Eu resolvi meu problema de acentuação no PDF com essa função de substituição de caracteres que criei, apenas seto a fonte a ser usada no PDF para WinAnsiEncoding --> def_font := HPDF_GetFont( pdf, font_list[05], "WinAnsiEncoding" )

e uso assim:

cTexto=NOME (Nome é o campo do DBF)

String_Q_Vai_Ao_Pdf = Acentua_No_Pdf(cTexto)

HPDF_Page_TextOut( page, 50 ,20 , String_Q_Vai_Ao_Pdf)

Código: Selecionar todos

//---------------------------------------------------
// Substitui caracteres da string por codigos WinAnsiEncoding para acentuar no PDF
Function Acentua_No_Pdf(cTexto)
//---------------------------------------------------
Local aCaracters:={"Ç",Chr(199),;
                  "ç",Chr(231),;
                  "Á",Chr(193),;
                  "á",Chr(225),;
                  "Ã",Chr(195),;
                  "ã",Chr(227),;
                  "À",Chr(192),;
                  "à",Chr(224),;
                  "Â",Chr(194),;
                  "â",Chr(226),;
                  "Ä",Chr(196),;
                  "ä",Chr(228),;
                  "É",Chr(201),;
                  "é",Chr(233),;
                  "Ê",Chr(202),;
                  "ê",Chr(234),;
                  "Ë",Chr(203),;
                  "ë",Chr(235),;
                  "Í",Chr(205),;
                  "í",Chr(237),;
                  "Ó",Chr(211),;
                  "ó",Chr(243),;
                  "Õ",Chr(213),;
                  "õ",Chr(245),;
                  "Ô",Chr(212),;
                  "ô",Chr(244),;
                  "Ú",Chr(218),;
                  "ú",Chr(250),;
                  "Ü",Chr(220),;
                  "ü",Chr(252),;
                  "Ñ",Chr(209),;
                  "ñ",Chr(241),;
                  "ª",Chr(170),;
                  "º",Chr(176)}


FOR F=1 TO LEN(aCaracters)/2 step 2
    cCaracterAtual=aCaracters[f]
    cCaracterNovo=aCAracters[f+1]
    cTexto=ATREPL(cCaracterAtual,cTexto, cCaracterNovo)
NEXT

Return cTexto

Caso os caracteres sejam diferentes, é só descobrir qual é o correto e substituir na função.

Segue um exemplo em anexo que cria um modelinha de fatura, notem que fica com os acentos normais.
A linha de comando para a compilação está no início do arquivo PRG.

Acentuação PDF - Via HaruPdf

Enviado: 28 Mar 2022 19:17
por alxsts
Olá!

Talvez consiga usar uma das funções de conversão disponíveis:
C:\hb32\Test>HBMK2 -FIND ANSI |MORE
hbtip.hbc (instalado):
ANSIToHtml()
HtmlToANSI()
hbwin.hbc (instalado):
win_ANSIToOEM()
win_ANSIToWide()
win_OEMToANSI()
win_WideToansi()
hbxpp.hbc (instalado):
ConvToANSICP()
xhb.hbc (instalado):
ANSIToWide()
WideToANSI()
Núcleo Harbour (instalado):
hb_ANSIToOEM()
hb_OEMToANSI()



C:\hb32\Test>

Acentuação PDF - Via HaruPdf

Enviado: 29 Mar 2022 08:54
por JoséQuintas
Sei lá, vocês que complicam.
No Windows só sigo o padrão do Windows.
E NÃO permito acentuação, só mesmo acentuação aonde quero.

No Harbour é PTISO, default do Windows brasileiro.
No MySQL idem.
No PDF WinAnsi, que é o default do Windows brasileiro.
No editor Programmers Notepad, o default já é o do Windows, que no Windows brasileiro é PTISO.
Em HTML aparece normalmente o que sai do MySQL.
Na GTWVG, ela faz parte do Harbour, não precisa configurar nada.

Agora em minigui talvez seja diferente, porque minigui tem seu próprio esquema de codepage.

Em webservice.... tem a ver com o webservice e não com o Harbour.
Que eu me lembre, nem os webservices de nota fiscal do Brasil respeitam codepage.

Agora... quer ficar aproveitando informação antiga junto com nova.... aí não tem codepage que resolva, e nem conversor que resolva.
Quer ler páginas de internet feitas pra outros idiomas? aí também não tem codepage que resolva.
Quer ler webservices lixo, que a maioria é, aí também não tem codepage que resolva.

Acentuação PDF - Via HaruPdf

Enviado: 29 Mar 2022 12:07
por Vlademiro
Infelizmente a libharu não suporta utf-8. E OEM também não é suportada, acho que por ser muito antiga. Caso o seu sistema use uma dessas tem que converter para winansi