0

私のアプリケーションでは、最初にユーザーが CKEDITOR を使用して html ドキュメントを作成できるようにしています。ここで、ユーザーは html ドキュメントを作成し、画像、フォーム フィールドなどを挿入できます。生成された HTML ドキュメントは PDF に変換されます。HTMLドキュメントにプレーンテキストが含まれている場合、PDFファイルは正常に作成されますが、ユーザーが画像を挿入するとエラーが発生します。PDF ドキュメントを作成するためのコード。

public ActionResult CreateFile(FormCollection data)
    {
        var filename = data["filename"];
        var htmlContent = data["content"];
        string sFilePath = Server.MapPath(_createdPDF + filename + ".html");
        htmlContent = htmlContent.Trim();
        if (!System.IO.File.Exists(sFilePath))
        {
            using (FileStream fs = new FileStream(sFilePath, FileMode.Create))
            {
                using (StreamWriter w = new StreamWriter(fs, Encoding.UTF8))
                {
                    w.Write(htmlContent);
                }
            }
            createPDF(sFilePath);
        }

        return View();
    }

    private MemoryStream createPDF(string sFilePath)
    {
        string filename = Path.GetFileNameWithoutExtension(sFilePath);
        string name = Server.MapPath(_createdPDF + filename + ".pdf");
        MemoryStream ms = new MemoryStream();
        TextReader tr = new StringReader(sFilePath);
        Document document = new Document(PageSize.A4, 30, 30, 30, 30);
        string urldir = Request.Url.GetLeftPart(UriPartial.Path);
        urldir = urldir.Substring(0, urldir.LastIndexOf("/") + 1);
        Response.Write(urldir);
        PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(name, FileMode.Create));
        document.Open();
        string htmlText = "";
        StreamReader sr;
        sr = System.IO.File.OpenText(sFilePath);
        htmlText = sr.ReadToEnd();
        sr.Close();
        WebClient wc = new WebClient();
        Response.Write(htmlText);
        var props = new Dictionary<string, Object>();
        props["img_baseurl"] = @"C:\Documents and Settings\shubham\My Documents\visdatemplatemanger\visdatemplatemanger\";
        List<IElement> htmlarraylist = HTMLWorker.ParseToList(new StringReader(htmlText), null,props);
        for (int k = 0; k < htmlarraylist.Count; k++)
        {
            document.Add((IElement)htmlarraylist[k]);
        }
        document.Close();
        System.IO.File.Delete(sFilePath);
        UploadURL(name);
        return ms;
    }

画像が HTML ドキュメントに含まれている場合に発生するエラーは次のとおりです。

Could not find a part of the path 'C:\Program Files\Common Files\Microsoft Shared\PDFimages\rectangle-shape.png'.
4

1 に答える 1

0

iTextSharp は、HTTP ベースのドキュメントの相対イメージを解決しようとしますが、絶対パスを提供するか、検索元のベースを提供する必要があるファイルシステムから提供されるものです。

//Image search base, path will be concatenated directly so make sure it contains a trailing slash
var props = new Dictionary<string, Object>();
props["img_baseurl"] = @"c:\images\";

//Include the props from above
htmlarraylist = HTMLWorker.ParseToList(sr, null, props);
于 2013-04-17T13:48:09.057 に答える