我在这个网站上看过一些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。”
答案 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。