Java 用iText 5编辑时出错:“1”;不支持颜色深度1;对同样包含图像的pdf应用密文时出现异常

Java 用iText 5编辑时出错:“1”;不支持颜色深度1;对同样包含图像的pdf应用密文时出现异常,java,itext,Java,Itext,使用版本:itextpdf-5.5.9和iText-extra-5.5.9 Exception trace: java.lang.RuntimeException: com.itextpdf.text.exceptions.UnsupportedPdfException: The color depth 1 is not supported. at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRenderListener.renderImage(PdfC

使用版本:itextpdf-5.5.9和iText-extra-5.5.9

Exception trace:
java.lang.RuntimeException: com.itextpdf.text.exceptions.UnsupportedPdfException: The color depth 1 is not supported.
at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRenderListener.renderImage(PdfCleanUpRenderListener.java:85)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor$ImageXObjectDoHandler.handleXObject(PdfContentStreamProcessor.java:967)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.displayXObject(PdfContentStreamProcessor.java:314)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.access$5000(PdfContentStreamProcessor.java:60)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor$Do.invoke(PdfContentStreamProcessor.java:913)
at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpContentOperator.invoke(PdfCleanUpContentOperator.java:75)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.invokeOperator(PdfContentStreamProcessor.java:248)
at com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.processContent(PdfContentStreamProcessor.java:354)
at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpProcessor.cleanUpPage(PdfCleanUpProcessor.java:78)
at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpProcessor.cleanUp(PdfCleanUpProcessor.java:53)
at com.capsilon.katalyst.packager.util.StampingUtil.drawRedaction(StampingUtil.java:371)
at com.capsilon.katalyst.packager.util.PageUtil.getPages(PageUtil.java:278)
at com.capsilon.katalyst.packager.util.PageUtil.getPages(PageUtil.java:132)
at com.capsilon.katalyst.packager.delivery.DeliveryPackager.fetchPages(DeliveryPackager.java:482)
at com.capsilon.katalyst.packager.delivery.DeliveryPackager.doPDFPackaging(DeliveryPackager.java:188)
at com.capsilon.katalyst.packager.delivery.handler.EmailDeliveryRequestProcessor.doProcessing(EmailDeliveryRequestProcessor.java:42)
at com.capsilon.katalyst.packager.delivery.StandardPackagingTask.doDeliveryPackagingRequestProcessing(StandardPackagingTask.java:100)
at com.capsilon.katalyst.packager.delivery.DeliveryPackagerRequestListener.processMessage(DeliveryPackagerRequestListener.java:80)
at com.capsilon.commons.jms.MessageListener.run(MessageListener.java:157)
Caused by: com.itextpdf.text.exceptions.UnsupportedPdfException: The color depth 1 is not supported.
at com.itextpdf.text.pdf.parser.PdfImageObject.decodeImageBytes(PdfImageObject.java:315)
at com.itextpdf.text.pdf.parser.PdfImageObject.<init>(PdfImageObject.java:200)
at com.itextpdf.text.pdf.parser.PdfImageObject.<init>(PdfImageObject.java:169)
at com.itextpdf.text.pdf.parser.ImageRenderInfo.prepareImageObject(ImageRenderInfo.java:124)
at com.itextpdf.text.pdf.parser.ImageRenderInfo.getImage(ImageRenderInfo.java:114)
at com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRenderListener.renderImage(PdfCleanUpRenderListener.java:63)
异常跟踪:
java.lang.RuntimeException:com.itextpdf.text.exceptions.UnsupportedPdfException:不支持颜色深度1。
在com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRenderListener.renderImage(PdfCleanUpRenderListener.java:85)
在com.itextpdf.text.pdf.parser.PdfContentStreamProcessor$ImageXObjectDoHandler.handleXObject(PdfContentStreamProcessor.java:967)
位于com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.displayXObject(PdfContentStreamProcessor.java:314)
com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.access$5000(PdfContentStreamProcessor.java:60)
位于com.itextpdf.text.pdf.parser.PdfContentStreamProcessor$Do.invoke(PdfContentStreamProcessor.java:913)
位于com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpContentOperator.invoke(PdfCleanUpContentOperator.java:75)
位于com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.invokeOperator(PdfContentStreamProcessor.java:248)
位于com.itextpdf.text.pdf.parser.PdfContentStreamProcessor.processContent(PdfContentStreamProcessor.java:354)
位于com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpProcessor.cleanUpPage(PdfCleanUpProcessor.java:78)
位于com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpProcessor.cleanUp(PdfCleanUpProcessor.java:53)
在com.capsilon.katalyst.packager.util.StampingUtil.drawRedaction(StampingUtil.java:371)上
在com.capsilon.katalyst.packager.util.PageUtil.getPages(PageUtil.java:278)
在com.capsilon.katalyst.packager.util.PageUtil.getPages(PageUtil.java:132)
位于com.capsilon.katalyst.packager.delivery.DeliveryPackager.fetchPages(DeliveryPackager.java:482)
在com.capsilon.katalyst.packager.delivery.DeliveryPackager.dopdfpacking(DeliveryPackager.java:188)上
位于com.capsilon.katalyst.packager.delivery.handler.EmailDeliveryRequestProcessor.doProcessing(EmailDeliveryRequestProcessor.java:42)
在com.capsilon.katalyst.packager.delivery.StandardPackagingTask.doDeliveryPackagingRequestProcessing(StandardPackagingTask.java:100)上
位于com.capsilon.katalyst.packager.delivery.deliveryPackageRequestListener.processMessage(deliveryPackageRequestListener.java:80)
位于com.capsilon.commons.jms.MessageListener.run(MessageListener.java:157)
原因:com.itextpdf.text.exceptions.UnsupportedPdfException:不支持颜色深度1。
位于com.itextpdf.text.pdf.parser.PdfImageObject.decodeImageBytes(PdfImageObject.java:315)
位于com.itextpdf.text.pdf.parser.PdfImageObject.(PdfImageObject.java:200)
位于com.itextpdf.text.pdf.parser.PdfImageObject.(PdfImageObject.java:169)
位于com.itextpdf.text.pdf.parser.ImageRenderInfo.prepareImageObject(ImageRenderInfo.java:124)
位于com.itextpdf.text.pdf.parser.ImageRenderInfo.getImage(ImageRenderInfo.java:114)
在com.itextpdf.text.pdf.pdfcleanup.PdfCleanUpRenderListener.renderImage(PdfCleanUpRenderListener.java:63)
“我使用itext xtra进行编辑的代码请在下面查找” 我正在尝试使用“PdfCleanUpProcessor”在PDF上创建编校

List cleanUpLocations=new ArrayList();
尝试
{
用于(注释:注释列表)
{

HashMap rotateCoordinates=RotateCoordinaction(PDF阅读器、注释、,(方向iText 5.5.11中增加了解决此问题的方法:iText仍然不明确支持此处遇到的图像类型,但是
PdfCleanUp
现在有了更好的方法来处理不明确支持的图像,而不是抛出异常,它现在要么完全删除图像,要么保持图像不变,具体取决于它们是否与编校区域相交

此修复程序已在2017-02-16 13:43:12提交BD9D610FB2D77DE0EE98DE97D3A2911F22B29中添加,注释为“立即清理通过忽略或完全删除不支持的图像来处理不支持的图像。如果遇到不支持的图像,将不再引发异常。”

当然,这不是真正的修复。真正的修复需要iText对PDF中允许的所有图像格式实现至少某种程度的支持,但这在仅处于维护模式的产品中是不可能的


(在iText 7中,我最终希望得到一个真正的修复。不过,这可能需要付费客户请求修复,并给予该修复一些优先级…)

向我们展示您的代码并分享您的pdf@AmedeeVanGasse,你能帮助我如何与你共享pdf吗?只需将其放在Dropbox或任何你喜欢的文件共享服务上,并确保该文件可公开访问。简单地说:要对嵌入的位图图像应用编校,iText需要了解相应的位图图像格式至少有一个,并且知道如何操作它。只有一组有限的图像格式iText对此有足够的理解。似乎您的PDF包含一个位图,该位图位于需要应用密文的位置,而iText对此理解不够:“颜色深度1不受支持。”有更好的方法来解决这个问题,而不是像这样的例外情况……嗨,你有没有找到解决这个问题的办法?
                List<PdfCleanUpLocation> cleanUpLocations = new ArrayList<PdfCleanUpLocation>();
                try
                {
                    for (Annotation annotation : annotationList)
                    {

                            HashMap<String, String> rotateCoordinates = rotateCoordinatesRedaction(pdfReader, annotation, (orientation <= 360) ? (360 - orientation): (orientation -360), actualPageRotation);
                            rectangle = getRectangle(rotateCoordinates);
                            cleanUpLocations.add(new PdfCleanUpLocation(page, rectangle, BaseColor.BLACK));
                        }

                    PdfCleanUpProcessor cleaner = new PdfCleanUpProcessor(cleanUpLocations, pdfStamper);
                    cleaner.cleanUp();