2

申し訳ありませんが、私の英語はあまり上手ではありません。あなたが私を助けてくれることを願っています。xslt トランスからこの文字列があります。

"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<html>\r\n  <head />\r\n  <body style=\"font-family: Verdana, sans-serif;\">\r\n  ĚŠČŘŽŘÝŽÝÁÁÍÉŮ ěščřžýáíéůú\r\n       </body>\r\n</html>"

そして、このhtml文字列をpdfに変換しようとすると:

private static byte[] CreatePdfUsingXslt(string htmlText)
    {
        var msOutput = new MemoryStream();
        var reader = new StringReader(htmlText);

        var document = new Document(PageSize.A4, 30, 30, 30, 30);
        var pdfWriter = PdfWriter.GetInstance(document, msOutput);
        var worker = new HTMLWorker(document);

        document.Open();
        worker.StartDocument();
        worker.Parse(reader);
        worker.EndDocument();
        worker.Close();
        document.Close();

        return msOutput.GetBuffer();
    }

protected void SavePDF(byte[] storeData, string fileName)
    {
        Response.Clear();
        Response.ClearContent();
        Response.ClearHeaders();

        Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
        Response.ContentType = "application/pdf";
        Response.Charset = Encoding.UTF8.ToString();
        Response.ContentEncoding = Encoding.UTF8;
        Response.Buffer = true;

        Response.BinaryWrite(storeData);
        Response.Flush();
        Response.End();
    }

私はこのようなものを得ています:ŠŽÝŽÝÁÁÍÉ šžýáíéúそしてそれは間違っています... 私の結果には次のような文字がありませんĚ,Č,Ř,Ů,...これらはチェコ語の文字です.


私はこのように XMLParser を使用しようとします:

private static byte[] CreatePdfUsingXslt(string htmlText, string serverPath)
    {
        var msInput = new MemoryStream(Encoding.UTF8.GetBytes(htmlText));
        var msOutput = new MemoryStream();

        msInput.Position = 0;
        msOutput.Position = 0;

        var doc = new Document(PageSize.A4, 30, 30, 30, 30);
        PdfWriter pdfWriter = PdfWriter.GetInstance(doc, msOutput);

        var htmlPipelineContext = new HtmlPipelineContext();
        var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(true);

        var cssPath = String.Format("{0}XsltTemplates\\print.css", serverPath);

        cssResolver.AddCssFile(cssPath,true);

        var pipeline = new CssResolverPipeline(cssResolver,
                                               new HtmlPipeline(htmlPipelineContext, new PdfWriterPipeline(doc, pdfWriter)));
        var xmlWorker = new XMLWorker(pipeline, true);
        var xmlParser = new XMLParser(true, xmlWorker);

        xmlParser.Parse(new StreamReader(msInput, Encoding.UTF8));
        xmlParser.Flush();

        doc.Close();
        return msOutput.ToArray();
    }

ただし、関数xmlParser.Parse(new StreamReader(msInput, Encoding.UTF8));は NullReferenceException をスローします。

これは私にとってより重要です。どうすれば修正できますか?

4

0 に答える 0