1

DB からデータを取得して PDF を自動生成するアプリケーションを作成しましたが、最近、CMYK の代わりに RGB カラー プロファイルを使用して、画像が異なってレンダリングされることに顧客が気付きました。

そこで、何が問題なのかを見つけるために簡単なテスト コードを作成しようとしましたが、結果は同じでした。

ここに私のコード例:

コントローラ

namespace PdfTest.Controllers
{
    public class HomeController : Controller
    {
        private string _license;

        public HomeController()
        {
            _license = ConfigurationManager.AppSettings["abcPDFLicense"];
            XSettings.InstallLicense(_license);
        }

        public PartialViewResult Index()
        {
            using (Doc doc = new Doc())
            {
                doc.HtmlOptions.Engine = EngineType.Gecko;
                doc.HtmlOptions.AddLinks = true;

                string html = RenderRazorViewToString("Index", "");
                int pageId = doc.AddImageHtml(html, true, 2500, true);

                while (doc.Chainable(pageId))
                {
                    doc.Page = doc.AddPage();
                    pageId = doc.AddImageToChain(pageId);
                }

                for (int i = 1; i <= doc.PageCount; i++)
                {
                    doc.PageNumber = i;
                    doc.Flatten();
                }

                string pdfDirectory = Server.MapPath("~/PDF_Diesel");
                DirectoryInfo directoryInfo = new DirectoryInfo(pdfDirectory);

                if (!directoryInfo.Exists)
                    directoryInfo.Create();

                string fileName = "test.pdf";

                doc.Rendering.ColorSpace = XRendering.ColorSpaceType.Cmyk;

                doc.Save(string.Format(@"{0}\{1}", directoryInfo.FullName, fileName));
                doc.Clear();
            }

            return PartialView();
        }

        public string RenderRazorViewToString(string viewName, object model)
        {
            ViewData.Model = model;

            using (var sw = new StringWriter())
            {
                var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
                var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);

                viewResult.View.Render(viewContext, sw);
                viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);

                return sw.GetStringBuilder().ToString();
            }
        }
    }
}

見る

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <img src="file://@Server.MapPath("~/Images/_banner2.jpg")" />
    <img src="~/Images/_banner2.jpg" />
</body>
</html>

このコードは、読み込まれた画像とその画像のみを含むサンプル pdf を含むビューを返しますが、CMYK ではなく RGB で画像をレンダリングし続けます。

ABCpdf ドキュメントを読みましたが、問題の解決策が見つかりませんでした。何が問題なのか知っている人はいますか?

4

1 に答える 1

0

わかりました、私は問題が何であるかを理解しました。

HTML が CMYK カラー プロファイルをレンダリングせず、RGB のみをレンダリングすることを知りませんでした。

この問題を解決するために、ありがたいことに色の品質をあまり失うことなく、Photoshop ですべての画像のカラー プロファイルを CMYK から S_RGB に変更しました。

于 2014-01-29T16:12:06.917 に答える