【问题标题】:Printing a CMYK tif image to a CMYK pdf in WPF loses color在 WPF 中将 CMYK tif 图像打印到 CMYK pdf 会失去颜色
【发布时间】:2021-08-09 17:54:21
【问题描述】:

我有一个以 CMYK 格式保存的 tiff 文件,我正在将其加载到 WPF 中的图像中。然后,我将图像添加到文档中,并使用 Adob​​e PDF 打印驱动程序将其保存为 CMYK PDF。 PDF 文档中的图像不如原始图像鲜艳。我已经为 PDF 打印机尝试了许多设置,但均无济于事。据我所知,如果我在 RGB 颜色空间中保存到 PDF 中,颜色会被完美地保留。或者,我可以使用相同的 CMYK 图像在 Adob​​e Acrobat 中创建 CMYK PDF 文件,并且质量非常好。

我的猜测是,在 WPF 中加载图像和打印图像之间的某个地方,我得到了 RGB 像素,然后将其转换回 CMYK,丢失了原始颜色信息,但我真的不知道。当加载位图图像时,我可以在调试器中看到格式为 Cmyk32,因此可能图像控件、页面或文档在通过 XPS 时以 RGB 呈现它。我说不出来。有没有人有任何想法?这是我创建的用于显示问题的代码示例。

// select printer and get printer settings
PrintDialog printDialog = new PrintDialog();

if (printDialog.ShowDialog() != true)
{
    return;
}

LocalPrintServer ps = new LocalPrintServer();

// Get the default print queue
PrintQueue pq = ps.GetPrintQueue(printDialog.PrintQueue.FullName);

// create a document
FixedDocument document = new FixedDocument();
document.DocumentPaginator.PageSize = 
    new Size(printDialog.PrintableAreaWidth, printDialog.PrintableAreaHeight);

// create a page
FixedPage page = new FixedPage
{
    Width = document.DocumentPaginator.PageSize.Width,
    Height = document.DocumentPaginator.PageSize.Height
};

BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri("testcmyk.tif", UriKind.RelativeOrAbsolute);
bi.CacheOption = BitmapCacheOption.OnLoad;
bi.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
bi.EndInit();

Image image = new Image
{
    Source = bi
};

page.Children.Add(image);

PageContent content = new PageContent
{
    Child = page
};

document.Pages.Add(content);

XpsDocumentWriter xpsdw = PrintQueue.CreateXpsDocumentWriter(pq);
xpsdw.Write(document, printDialog.PrintTicket);

我看到了一些关于在 WPF 中使用 CMYK 的其他问题,但我还没有找到这个确切的问题。我真的需要将 CMYK pdf 提交给专业的印刷公司,但是艺术品通过软件正在失去颜色。当 tiff 文件也具有透明度时,问题会变得更糟(看起来更糟)。

编辑

在尝试了各种方法来找出问题所在之后,我决定只保存 XPS 文件。在这样做的过程中,我发现了一些非常令人沮丧的事情。这是一个代码sn-p:

using (FileStream stream = new FileStream("test.xps", FileMode.Create))
{
    Package package = Package.Open(stream, FileMode.Create);
    using (XpsDocument xpsDoc = new XpsDocument(package, System.IO.Packaging.CompressionOption.NotCompressed))
    {
        XpsDocumentWriter xpsdw = XpsDocument.CreateXpsDocumentWriter(xpsDoc);
        xpsdw.Write(image);
    }
}

我在这里传递与第一个代码 sn-p 相同的图像,只是为了看看 XpsDocumentWriter 将如何处理它。当我用 7zip 打开生成的 .xps 文件时,我发现原来的 tiff 文件已经不见了,并且已经被转换为 png!如果我正确理解了打印系统,我的原始 CMYK tiff 文件永远不会进入 pdf 打印机,因为它通过 XPS 系统到达那里。有什么补救措施吗? XPS有什么办法可以保留原图吗?是否甚至在这个阶段之前就出现了问题?请帮忙!

【问题讨论】:

    标签: wpf pdf printing tiff cmyk


    【解决方案1】:

    如果您愿意,您可以考虑使用像 LEADTOOLS Imaging SDK 这样的成像工具包,它有用于处理 CMYK 颜色空间的类。 (免责声明:我是此工具包供应商的员工)

    该工具包有一个 LoadCmykPlanesSaveCmykPlanes 方法,可用于将 TIFF 图像转换为 CMYK PDF 而不会影响 CMYK 平面。

    代码如下:

    // take CMYK data from file inputCmykTiff and save it as PDF into file outputCmykPdf
    Leadtools.Codecs.RasterCodecs codecs = new RasterCodecs();
    Leadtools.RasterImage imageWithPlanes = codecs.LoadCmykPlanes(inputCmykTiff, 0, 1);
    codecs.SaveCmykPlanes(imageWithPlanes, outputCmykPdf, RasterImageFormat.RasPdfCmyk, 8, 1, CodecsSavePageMode.Overwrite);
    

    由于结果将取决于您输入的图像,我建议使用free evaluation 进行测试,看看这是否会产生良好的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-28
      • 2011-06-17
      • 2015-12-10
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-08
      相关资源
      最近更新 更多