java 取色器_如何使用pdfbox(或其他开源Java库)从PDF文件中提取颜色配置文件

本文介绍如何利用Java的PDFBox库从PDF文件中提取颜色配置文件(ICC Profile)。通过遍历PDF文档的输出意图和页面资源,获取并保存ICC配置文件。
摘要由CSDN通过智能技术生成

这获得输出意图(您将获得高品质PDF文件)以及颜色空间和图像的icc配置文件:

PDDocument doc = PDDocument.load(new File("XXXXX.pdf"));

for (PDOutputIntent oi : doc.getDocumentCatalog().getOutputIntents())

{

COSStream destOutputIntent = oi.getDestOutputIntent();

String info = oi.getOutputCondition();

if (info == null || info.isEmpty())

{

info = oi.getInfo();

}

InputStream is = destOutputIntent.createInputStream();

FileOutputStream fos = new FileOutputStream(info + ".icc");

IOUtils.copy(is, fos);

fos.close();

is.close();

}

for (int p = 0; p < doc.getNumberOfPages(); ++p)

{

PDPage page = doc.getPage(p);

for (COSName name : page.getResources().getColorSpaceNames())

{

PDColorSpace cs = page.getResources().getColorSpace(name);

if (cs instanceof PDICCBased)

{

PDICCBased iccCS = (PDICCBased) cs;

InputStream is = iccCS.getPDStream().createInputStream();

FileOutputStream fos = new FileOutputStream(System.currentTimeMillis() + ".icc");

IOUtils.copy(is, fos);

fos.close();

is.close();

}

}

for (COSName name : page.getResources().getXObjectNames())

{

PDXObject x = page.getResources().getXObject(name);

if (x instanceof PDImageXObject)

{

PDImageXObject img = (PDImageXObject) x;

if (img.getColorSpace() instanceof PDICCBased)

{

InputStream is = ((PDICCBased) img.getColorSpace()).getPDStream().createInputStream();

FileOutputStream fos = new FileOutputStream(System.currentTimeMillis() + ".icc");

IOUtils.copy(is, fos);

fos.close();

is.close();

}

}

}

}

doc.close();

这不行(但如果需要,我可以添加一些):

>阴影,图案,xobject形式,外观流资源的颜色空间>在像ColorN和Separation这样的颜色空间中递归>模式中的递归,xobject形式,软掩码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值