Pergunta

Estou gerando HTML a partir de um banco de dados e o envio para Princexml para conversão para PDF. O código que eu uso para fazer isso é:

string _htmlTemplate = @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd""><html lang=""en-GB"" xml:lang=""en-GB"" xmlns=""http://www.w3.org/1999/xhtml""><head><meta http-equiv=""Content-type"" content=""text/html;charset=UTF-8"" /><title>Generated PDF Contract</title></head><body>{0}</body></html>";

string _pgeContent = string.Format(_htmlTemplate, sb.ToString());
writer.Write(sb.ToString());
Byte[] arrBytes = UTF8Encoding.Default.GetBytes(_pgeContent);
Stream s = new MemoryStream(arrBytes);

Prince princeConverter = new Prince(ConfigurationManager.AppSettings["PrinceXMLInstallLoc"].ToString());
princeConverter.SetLog(ConfigurationManager.AppSettings["PrinceXMLLogLoc"]);
princeConverter.AddStyleSheet(Server.MapPath(ConfigurationManager.AppSettings["FormsDocGenCssLocl"]));
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.BufferOutput = true;

No entanto, a conversão falha com o erro:

A entrada não é adequada UTF-8, indique a codificação! Bytes: 0XA0 0x77 0x65 0x62

Peguei o HTML gerado e o carreguei para o validador W3C. Ele valida a marcação como UTF-8 Coded XHTML 1.0 Transitional sem erros ou avisos.

Também passei pelo arquivo com uma bomba de dente fina, procurando caracteres inválidos. Até agora nada.

Alguém pode sugerir outra coisa que eu poderia tentar?

Foi útil?

Solução

Bem, depois de uma tarde de maldições murmurantes e arrancando o que resta do meu cabelo, descobri uma correção para o meu problema específico.

Parece que o System.Text.utf8Encoding não produz um byte de identificador UTF-8 por padrão. Então, no meu caso, eu precisava usar o construtor que leva um parâmetro booleano para controlar a saída disso.

UTF8Encoding u8enc = new UTF8Encoding(true);//Ensures a UTF8 identifier is emitted.

Depois disso, tudo foi bom. Espero que isso ajude alguém :-)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top