1

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

4

1 回答 1

2

这里有两个不同的东西。

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

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

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。

于 2012-11-16T13:27:19.437 回答