ABCpdf中的渲染选项未正确保存

时间:2012-09-13 00:08:59

标签: pdf abcpdf cmyk

我在这个网站上看过一些ABCpdf问题,但还没有看到这个问题。我正在开发一个需要PDF输出的项目,其中包含一些相当具体的选项。 ABCpdf似乎能够通过他们的API提供这个,但文档令人困惑和/或不完整。

using (var xpsStream = (MemoryStream)xps.Write(doc))
{
    xpsStream.Position = 0;
    pdfDoc.Clear();

    pdfDoc.Read(xpsStream, new XReadOptions
    {
        FileExtension = "xps"
    });

    pdfDoc.Rendering.DotsPerInch = 72;
    pdfDoc.Rendering.ColorSpace = XRendering.ColorSpaceType.Cmyk;
    pdfDoc.Rendering.IccCmyk = "device";

    pdfDoc.Save(stream);
}

这将呈现未遇到设置渲染属性的PDF。文档确实说明为了保存渲染属性,必须通过XRendering类中的Save()方法保存它们。所以我必须做类似的事情:

    pdfDoc.Rendering.DotsPerInch = 72;
    pdfDoc.Rendering.ColorSpace = XRendering.ColorSpaceType.Cmyk;
    pdfDoc.Rendering.IccCmyk = "device";
    pdfDoc.Rendering.Save("blah", stream);   // they want a "name" argument

其文档中的name参数被描述为“用于确定所需图像类型的虚拟文件名。”后来他们说“可以使用的文件扩展名是.TIF,.TIFF,.JPG,.GIF,.PNG,.BMP,.JP2,.EMF,.PS和.EPS。

然后在后一版本的代码运行之后,我确实得到了输出,但它不是PDF,它是TIF,JPG或我从该列表中选择的任何内容。如果我说'mom.pdf'它会抛出一个错误。这很糟糕,因为这是他们在XRendering中描述Save()方法的方式是“使用此方法来呈现PDF。

1 个答案:

答案 0 :(得分:1)

这里有两件不同的事情。

1)Doc.Save方法以PDF,XPS或其他类似文档格式保存文档。

2)Doc.Rendering.Save将当前页面的当前部分呈现为TIFF或JPEG等图像格式。

Doc.Rendering属性用于控制渲染。不保存文档。

有关保存文档的控制权,您需要Doc.SaveOptions。

你不能混淆和匹配两者。

因此...

在您的代码中,我认为您要尝试的是导入XPS文档并将其转换为CMYK。

执行此操作的方法是在使用Doc.Save保存文档之前更改文档的颜色空间。

要更改PDF的色彩空间,您需要使用RecolorOperation类。这样您就可以将文档的颜色空间更改为RGB,CMYK,灰度,ICC / ICM或者您想要的任何颜色空间。

如果我错了,那么大概你想要TIFF,JPEG,JPEG 2000,PSD或类似的CMYK输出。为此,您需要使用doc.Rendering选项来控制颜色空间和位深度(每个组件8或16位),然后调用doc.Rendering.Save。