gpt4 book ai didi

java - 如何处理 iText "Unexpected color space/CS0"类型的异常

转载 作者:搜寻专家 更新时间:2023-11-01 02:48:48 24 4
gpt4 key购买 nike

我有一些由未知来源生成的文件,可以在 PDF 浏览器 (Reader/Foxit) 中正常打开,但 iText 无法处理它们。对于特定文件,我得到:

Exception in thread "main" java.lang.IllegalArgumentException: Unexpected colorspace /CS0
at com.itextpdf.text.pdf.parser.InlineImageUtils.getComponentsPerPixel(InlineImageUtils.java:238)
at com.itextpdf.text.pdf.parser.InlineImageUtils.computeBytesPerRow(InlineImageUtils.java:251)
at com.itextpdf.text.pdf.parser.InlineImageUtils.parseUnfilteredSamples(InlineImageUtils.java:280)
at com.itextpdf.text.pdf.parser.InlineImageUtils.parseInlineImageSamples(InlineImageUtils.java:320)
at com.itextpdf.text.pdf.parser.InlineImageUtils.parseInlineImage(InlineImageUtils.java:153)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.processContent(PdfContentStreamProcessor.java:370)
at com.itextpdf.text.pdf.parser.PdfReaderContentParser.processContent(PdfReaderContentParser.java:79)

有时/CS0 颜色空间会更改为/CS1 到/CS9(或类似的东西)。

它是 iText 错误(我使用的是 java 1.7、iText 5.4.1)还是我的 pdf 文件刚刚损坏?即使 pdf 文件损坏了,我有什么办法可以修复它们吗? (Adobe Reader 似乎以某种方式做到了这一点,但不幸的是打开文件并再次保存它不起作用)。

最佳答案

我不熟悉 PDF 规范,所以我不知道我使用的 PDF 是否有效。然而,我确实设法通过更改文件 com.itextpdf.text.pdf.parser.InlineIamgeUtils 方法 getComponentsPerPixel(...) 中的 iText 来解决问题:

private static int getComponentsPerPixel(PdfName colorSpaceName, PdfDictionary colorSpaceDic){
if (colorSpaceName == null)
return 1;
if (colorSpaceName.equals(PdfName.DEVICEGRAY))
return 1;
if (colorSpaceName.equals(PdfName.DEVICERGB))
return 3;
if (colorSpaceName.equals(PdfName.DEVICECMYK))
return 4;

if (colorSpaceDic != null){
PdfArray colorSpace = colorSpaceDic.getAsArray(colorSpaceName);
if (colorSpace != null){
if (PdfName.INDEXED.equals(colorSpace.getAsName(0))){
return 1;
}
}
}

throw new IllegalArgumentException("Unexpected color space " + colorSpaceName);
}

private static int getComponentsPerPixel(PdfName colorSpaceName, PdfDictionary colorSpaceDic){
if (colorSpaceName == null)
return 1;
if (colorSpaceName.equals(PdfName.DEVICEGRAY))
return 1;
if (colorSpaceName.equals(PdfName.DEVICERGB))
return 3;
if (colorSpaceName.equals(PdfName.DEVICECMYK))
return 4;

if (colorSpaceDic != null){
PdfArray colorSpace = colorSpaceDic.getAsArray(colorSpaceName);
if (colorSpace != null){
if (PdfName.INDEXED.equals(colorSpace.getAsName(0))){
return 1;
}
} /* Begin mod # */ else {
PdfName tempName = colorSpaceDic.getAsName(colorSpaceName);
if(tempName != null) return(getComponentsPerPixel(tempName, colorSpaceDic));
} /* End mod */
}

throw new IllegalArgumentException("Unexpected color space " + colorSpaceName);
}

关于java - 如何处理 iText "Unexpected color space/CS0"类型的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16069004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com