HaruPDF - Como imprimir com acentuação?

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

HaruPDF - Como imprimir com acentuação?

Mensagem por clodoaldomonteiro »

Olá.

Estou implementando o haruPDF nos meus PDFs e percebi que as letras acentuadas não saem no PDF, usando CoedePage ANSI.
Como Setar para ANSI ou outra CodePage?

Uso o xHarbour 123 com BCC 7.3.

Desde já agradeço a ajuda.

Meus fontes:

Código: Selecionar todos

Function Main()
...
...
         nCol     := 06
         sOrient  := 'R'

         nLBrasao := 07
         nCBrasao := 13

         nLeft    := 32
         nRight   := 820
         nHeight  := 09

         nFonte   := 08
         nLpi     := 06
         nMAXLI   := 53

         nLAss    := 170
         nCAss1   := 22
         nCAss2   := 190
         nPosBras := 3

         oPdf := HPDF_New()
         IF oPdf == NIL
            MsgAtencao( "Erro ao criar o documento PDF" )
            Break
         ENDIF

         HPDF_SetCompressionMode( oPdf, HPDF_COMP_ALL )

         pgheight := nil
         pgwidth  := nil

         pg_ := 0
         cl  := 500

         rel_cab(1)

... 
...
Return

STATIC Procedure REL_CAB(qt)                           // cabecalho do relatorio
   Local Fonte, Img

   If qt > 0                                                      // se parametro maior que 0
      cl := cl + qt                                                  // soma no contador de linhas
   EndIf

   If cl > nmaxli .or. qt = 0                                        // quebra de pagina

      //REL_RDP( oPage )                                        // imprime rodape' do relatorio

      sCnpj       =''
      sTituloFundo='Fundo:'

      sGestor1 =''
      sGestor2 =''
      sGestor3 =''
      nGestor3 =0
      nGestor4 =0

      sSec1    = ''
      sSec2    = ''
      nSec3    = 0
      nSec4    = 0

      sAlm1   = ''
      sAlm2   = ''
      nAlm3   = 0
      nAlm4   = 0
      
      pg_++

      //PegaAssinatura( sFundo )

      oPage    := HPDF_AddPage(opdf)                 // HPDF_PAGE_PORTRAIT
      HPDF_Page_SetSize(oPage, HPDF_PAGE_SIZE_A4, HPDF_PAGE_LANDSCAPE)
      pgHeight := HPDF_Page_GetHeight(opage) - 40
      pgWidth  := HPDF_Page_GetWidth(opage)

      //HPdfAtSay( "Relatório de Teste", 1, 1, "Helvetica", 12, {0, 0, 255})
      //HPdfAtSay( "Página " + LTrim(Str(pg_)), 1, 50, "Helvetica", 10, {100, 100, 100})

      hPdfAtSay( HB_OemToAnsi(cl_GetNomeUf( M->par_UF, .t. ))            , 01, 2 + MMVBrasao1 + nPosBras, 'Times-Roman', 8 )
      hPdfAtSay( "Página: " + Transform(pg_, "999") + '/   ' , 01, 104, 'Times-Roman', 8 ) //   

      hPdfAtSay( HB_OemToAnsi( nEmp ), 02, 2 + MMVBrasao1 + nPosBras, 'Times-Roman', 8 )
      hPdfAtSay( "LEI Nº 4.320/64"   , 02, 104, 'Times-Roman', 9 )

      hPdfAtSay( "C.N.P.J.: " + Transform(sCNPJ, "@R 99.999.999/9999-99"), 03, 2 + MMVBrasao1 + nPosBras, 'Times-Roman', 8 )
      hPdfAtSay( ALLTrim(HB_OemToAnsi(M->PAR_RESOL)), 03, 104, 'Times-Roman', 8 )

      //If mCab = 1
         hPdfAtSay( "PAGAMENTOS ORÇAMENTÁRIOS REALIZADOS ", 04, 2 + MMVBrasao1 + nPosBras, 'Times-Roman', 8 )

      //ElseIf mCab = 2
      //   PdfAtSay( "PAGAMENTOS DE RESTOS A PAGAR REALIZADOS ", 05, nCol + MMVBrasao1 + nPosBras, "R" )
      //
      //Endif

      hPdfAtSay( "ANEXO IX", 04, 104, 'Times-Roman', 8 )

      hPdfAtSay( HB_OemToAnsi(sTITULOFundo), 05, 2 + MMVBrasao1 + nPosBras, 'Times-Roman', 8 )
      hPdfAtSay( "Competência: " + AllTrim(HB_OemToAnsi(nmes(Val(mMesRel)))) + ' / ' + par_aa, 5, 104, 'Times-Roman', 8 )


      ofont := HPDF_GetFont(oPdf, "Courier", NIL)
      HPDF_Page_SetFontAndSize(oPage, ofont, 8)

      cl := qt + 09; pg_++
    EndIf
   Return

FUNCTION HPdfAtSay( cTexto, nLinha, nCol, cFonteName, nTamanho, cOrient, nCorRGB)
   Local nEspaco := INT( (pgHeight / 11) / nLPI)
   LOCAL nX, nY := pgHeight - ((nLinha - 1) * nEspaco)
   LOCAL oFont

   cFonteName  := If(cFonteName = Nil, 'Courier', cFonteName)
   oFont       := HPDF_GetFont(oPage, cFonteName, NIL)

   nTamanho := If(nTamanho = Nil, nFonte, nTamanho)
   
   If nTamanho = 6
      nX := INT(nCol * 3.6) //+ 50

   ElseIf nTamanho = 7
      nX := INT(nCol * 4.2) //+ 50

   ElseIf nTamanho = 8
      nX := INT(nCol * 4.8) //+ 50

   ElseIf nTamanho = 9
      nX := INT(nCol * 5.4) //+ 50

   ElseIf nTamanho = 10
      nX := INT(nCol * 6) //+ 50

   ElseIf nTamanho = 11
      nX := INT(nCol * 6.6) //+ 50

   ElseIf nTamanho = 12
      nX := INT(nCol * 7.2) //+ 50

   Else
      nX := INT(nCol * 6) //+ 50

   Endif

   // Orientação do texto (opcional)
   // cOrient pode ser: "L2R", "R2L", "U2D", "D2U", "ROT90", "ROT270"
   DO CASE
   CASE cOrient == "R2L"     // Direita para esquerda
      a := -1 ; b := 0 ; c := 0 ; d := 1
      nX += 0   // Pode ajustar margem se quiser
   CASE cOrient == "U2D"     // De cima para baixo
      a := 0 ; b := -1 ; c := 1 ; d := 0
   CASE cOrient == "D2U"     // De baixo para cima
      a := 0 ; b := 1 ; c := -1 ; d := 0
   CASE cOrient == "ROT90"   // Roda 90° (escreve de baixo para cima)
      a := 0 ; b := 1 ; c := -1 ; d := 0
   CASE cOrient == "ROT270"  // Roda 270° (cima para baixo)
      a := 0 ; b := -1 ; c := 1 ; d := 0
   OTHERWISE                 // "L2R" ou padrão
      a := 1 ; b := 0 ; c := 0 ; d := 1
   ENDCASE

   IF nCorRGB != NIL
      HPDF_Page_SetRGBFill(oPage, (nCorRGB[1]/255), (nCorRGB[2]/255), (nCorRGB[3]/255))
   ENDIF

   ofonte := HPDF_GetFont(oPdf, cFonte, NIL)
   HPDF_Page_BeginText( opage )
   HPDF_Page_SetFontAndSize( opage, oFonte, nTamanho )

   If cOrient = Nil
      HPDF_Page_TextOut( opage, nX, nY, cTexto)
   Else
      HPDF_Page_SetTextMatrix(oPage, a, b, c, d, nX, nY)
      HPDF_Page_ShowText(oPage, HB_OemToAnsi(cTexto))
   Endif
   
   HPDF_Page_EndText( opage )

   RETURN NIL

At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
developer
Usuário Nível 3
Usuário Nível 3
Mensagens: 149
Registrado em: 09 Nov 2024 23:45
Localização: Londrina/PR

HaruPDF - Como imprimir com acentuação?

Mensagem por developer »

Você está usando HaruPDF então dá uma olhada nisso: Encoding

Também aqui na documentação.

Você usa ANSI no código Harbour? Então vai precisar configurar HaruPDF para usar o mesmo.

Se não me engano o padrão é StandardEncoding mas sugiro você tentar com WinAnsiEncoding

Até é uma questão interessante... que "codepage" é usado no padrão da libHarbu, no caso: StandardEncoding? Alguém sabe?
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

HaruPDF - Como imprimir com acentuação?

Mensagem por JoséQuintas »

Código: Selecionar todos

   VAR    cCodePage         INIT "WinAnsiEncoding"
...
      ::oPdf := HPDF_New()
      HPDF_SetCompressionMode( ::oPDF, HPDF_COMP_ALL )
      HPDF_SetCurrentEncoder( ::oPDF, ::cCodePage )
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
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

HaruPDF - Como imprimir com acentuação?

Mensagem por clodoaldomonteiro »

Consegui, com a dica do Quintas e uns testes coloquei WinAnsiEncoding no lugar do NIL.

Ficou assim:

Código: Selecionar todos

...
...
   ofonte := HPDF_GetFont(oPdf, cFonteName, "WinAnsiEncoding")
   HPDF_Page_BeginText( opage )
      HPDF_Page_SetFontAndSize( opage, oFonte, nTamanho )

      //If cOrient = Nil
      //   HPDF_Page_TextOut( opage, nX, nY, cTexto)
      //Else
         HPDF_Page_SetTextMatrix(oPage, a, b, c, d, nX, nY)
         HPDF_Page_ShowText(oPage, cTexto )
      //Endif
   
   HPDF_Page_EndText( opage )
...
...
Fico grato pela ajuda de todos.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Responder