Domanda

sto generando HTML da un database e quindi inviarlo a PrinceXML per la conversione in PDF. Il codice che uso per fare questo è:

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;

Tuttavia, la conversione ha esito negativo con l'errore:

  

ingresso non è corretta UTF-8, indicare la codifica! Byte: 0xA0 0x77 0x65 0x62

ho preso il codice HTML generato e caricato al validatore W3C. Convalida il codice come UTF-8 codifica XHTML 1.0 Transitional senza errori o avvisi.

Ho passato anche attraverso il file con un bel dente-pettine alla ricerca di caratteri non validi. Fin qui nulla.

Qualcuno può suggerire qualcos'altro che potrei provare?

È stato utile?

Soluzione

Bene, dopo un pomeriggio di borbottare imprecazioni e strappare ciò che resta dei miei capelli, ho capito una soluzione per il mio problema particolare.

Sembrerebbe che System.Text.UTF8Encoding non emette un UTF-8 byte identificatore per impostazione predefinita. Quindi, nel mio caso avevo bisogno di utilizzare il costruttore che prende un parametro booleano di uscita di controllo di questo.

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

Dopo questo è andato tutto bene. Spero che questo aiuta qualcuno: -)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top