Question

Je générer une page HTML à partir d'une base de données, puis de l'envoyer à PrinceXML pour la conversion au format PDF. Le code que j'utilise pour ce faire est:

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;

Toutefois, la conversion échoue avec l'erreur:

  

L'entrée est pas correcte UTF-8, indique le codage! Octets: 0xA0 0x77 0x65 0x62

J'ai pris le code HTML généré et téléchargé sur le validateur du W3C. Il valide le balisage de transition comme UTF-8 XHTML 1.0 codé sans erreurs ou d'avertissements.

Je suis aussi passé par le fichier avec une fine peigne à dents à la recherche de caractères non valides. Rien jusqu'à présent.

Quelqu'un peut-il suggérer quelque chose d'autre que je pourrais essayer?

Était-ce utile?

La solution

Eh bien, après un après-midi de malédictions murmurant et arracher ce qui reste de mes cheveux, je me suis un correctif pour mon problème particulier.

Il semblerait que System.Text.UTF8Encoding ne délivre pas un octet d'identification UTF-8 par défaut. Donc, dans mon cas je besoin d'utiliser le constructeur qui prend un paramètre booléen pour contrôler la sortie de cela.

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

Après cela, il était bon. Espérons que cela aide quelqu'un: -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top