2014-01-21 9 views
1

DB에서 데이터를 가져 와서 자동으로 PDF를 생성하는 응용 프로그램을 만들었지 만 최근에는 CMYK 대신 RGB 색상 프로파일을 사용하여 이미지가 다르게 렌더링되었다는 것을 알게되었습니다.ABCpdf .net에서 CMYK 이미지를 제대로 렌더링하지 못합니다.

그래서 문제가 될 수있는 것을 찾기 위해 간단한 테스트 코드를 만들려고했지만 결과는 같습니다. 여기

내 예제 코드 :

컨트롤러

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 문서를 읽었지만 내 문제의 해결책을 찾지 못했지만 문제가 무엇인지 알 수 있습니까?

답변

0

좋아요, 문제가 무엇인지 알아 냈습니다.

HTML이 CMYK 색상 프로파일을 렌더링하지 않지만 RGB 만 렌더링한다는 것을 알지 못했습니다.

문제를 해결하기 위해 나는 많은 양의 색상을 잃지 않고 포토샵으로 CMYK에서 S_RGB로 모든 이미지 색상 프로파일을 변경했습니다. 다행히도.