Eu tenho um aplicativo herdado apenas começando a se comportar mal, por qualquer motivo, não tenho certeza. Ele gera um monte de HTML que é transformado em relatórios PDF pelo ActivePDF.
O processo funciona assim:
- Puxe um modelo HTML de um banco de dados com tokens para ser substituído (por exemplo, "~ CompanyName ~", "~ CustomerName ~" etc.)
- Substitua os tokens por dados reais
- Organize o HTML com uma função simples de expressão regular que formata os valores dos atributos da tag HTML (garante aspas, etc, pois o mecanismo de renderização do ActivePDF odeia qualquer coisa, exceto aspas simples, em torno dos valores dos atributos)
- Envie o HTML para um serviço da web que cria o PDF.
Em algum lugar dessa bagunça, os espaços intermináveis do (
s) modelo ( s) HTML são codificados como ISO-8859-1, para que apareçam incorretamente como um caractere "Â" ao exibir o documento em um navegador (FireFox). O ActivePDF vomita nesses caracteres não UTF8.
Minha pergunta: como não sei de onde o problema decorre e não tenho tempo para investigá-lo, existe uma maneira fácil de recodificar ou encontrar e substituir os caracteres ruins? Eu tentei enviá-lo através desta pequena função que eu juntei, mas isso transforma tudo em devorador de livros não muda nada.
Private Shared Function ConvertToUTF8(ByVal html As String) As String
Dim isoEncoding As Encoding = Encoding.GetEncoding("iso-8859-1")
Dim source As Byte() = isoEncoding.GetBytes(html)
Return Encoding.UTF8.GetString(Encoding.Convert(isoEncoding, Encoding.UTF8, source))
End Function
Alguma ideia?
EDITAR:
Por enquanto, estou resolvendo isso, embora dificilmente pareça uma boa solução:
Private Shared Function ReplaceNonASCIIChars(ByVal html As String) As String
Return Regex.Replace(html, "[^\u0000-\u007F]", " ")
End Function