public static void main_2(String[] args) throws IOException, DocumentException { PdfReader reader = new PdfReader(iconFile.getAbsolutePath()); for (int i = 0; i < reader.getXrefSize(); i++) { PdfObject pdfobj = reader.getPdfObject(i); if (pdfobj == null || !pdfobj.isStream()) { continue; } PdfStream stream = (PdfStream) pdfobj; PdfObject pdfsubtype = stream.get(PdfName.SUBTYPE); if (pdfsubtype != null && pdfsubtype.toString().equals(PdfName.IMAGE.toString())) { System.out.println(stream); byte[] imgData = PdfReader.getStreamBytesRaw((PRStream) stream); System.out.println(Hex.encodeHex(imgData)); } } }
/** * Gets the object that is shown in a row. * * @param rowIndex the row number containing the object * @return a PDF object */ protected String getObjectDescriptionByRow(int rowIndex) { PdfObject object = objects.getObjectByIndex(rowIndex); if (object instanceof PdfNull) return "Indirect object"; return object.toString(); }
/** * Business logic that checks if a certain object is in conformance with PDF/X. * * @param key the type of PDF ISO conformance that has to be checked * @param obj1 the object that is checked for conformance */ public void checkPdfIsoConformance(int key, Object obj1) { if (writer == null || !writer.isPdfX()) return; int conf = writer.getPDFXConformance(); switch (key) { case PdfIsoKeys.PDFISOKEY_COLOR: switch (conf) { case PdfWriter.PDFX1A2001: if (obj1 instanceof ExtendedColor) { ExtendedColor ec = (ExtendedColor) obj1; switch (ec.getType()) { case ExtendedColor.TYPE_CMYK: case ExtendedColor.TYPE_GRAY: return; case ExtendedColor.TYPE_RGB: throw new PdfXConformanceException( MessageLocalization.getComposedMessage("colorspace.rgb.is.not.allowed")); case ExtendedColor.TYPE_SEPARATION: SpotColor sc = (SpotColor) ec; checkPdfIsoConformance( PdfIsoKeys.PDFISOKEY_COLOR, sc.getPdfSpotColor().getAlternativeCS()); break; case ExtendedColor.TYPE_SHADING: ShadingColor xc = (ShadingColor) ec; checkPdfIsoConformance( PdfIsoKeys.PDFISOKEY_COLOR, xc.getPdfShadingPattern().getShading().getColorSpace()); break; case ExtendedColor.TYPE_PATTERN: PatternColor pc = (PatternColor) ec; checkPdfIsoConformance( PdfIsoKeys.PDFISOKEY_COLOR, pc.getPainter().getDefaultColor()); break; } } else if (obj1 instanceof BaseColor) throw new PdfXConformanceException( MessageLocalization.getComposedMessage("colorspace.rgb.is.not.allowed")); break; } break; case PdfIsoKeys.PDFISOKEY_CMYK: break; case PdfIsoKeys.PDFISOKEY_RGB: if (conf == PdfWriter.PDFX1A2001) throw new PdfXConformanceException( MessageLocalization.getComposedMessage("colorspace.rgb.is.not.allowed")); break; case PdfIsoKeys.PDFISOKEY_FONT: if (!((BaseFont) obj1).isEmbedded()) throw new PdfXConformanceException( MessageLocalization.getComposedMessage( "all.the.fonts.must.be.embedded.this.one.isn.t.1", ((BaseFont) obj1).getPostscriptFontName())); break; case PdfIsoKeys.PDFISOKEY_IMAGE: PdfImage image = (PdfImage) obj1; if (image.get(PdfName.SMASK) != null) throw new PdfXConformanceException( MessageLocalization.getComposedMessage("the.smask.key.is.not.allowed.in.images")); switch (conf) { case PdfWriter.PDFX1A2001: PdfObject cs = image.get(PdfName.COLORSPACE); if (cs == null) return; if (cs.isName()) { if (PdfName.DEVICERGB.equals(cs)) throw new PdfXConformanceException( MessageLocalization.getComposedMessage("colorspace.rgb.is.not.allowed")); } else if (cs.isArray()) { if (PdfName.CALRGB.equals(((PdfArray) cs).getPdfObject(0))) throw new PdfXConformanceException( MessageLocalization.getComposedMessage("colorspace.calrgb.is.not.allowed")); } break; } break; case PdfIsoKeys.PDFISOKEY_GSTATE: PdfDictionary gs = (PdfDictionary) obj1; // The example PdfXPdfA threw a NullPointerException because gs was null if (gs == null) break; PdfObject obj = gs.get(PdfName.BM); if (obj != null && !PdfGState.BM_NORMAL.equals(obj) && !PdfGState.BM_COMPATIBLE.equals(obj)) throw new PdfXConformanceException( MessageLocalization.getComposedMessage("blend.mode.1.not.allowed", obj.toString())); obj = gs.get(PdfName.CA); double v = 0.0; if (obj != null && (v = ((PdfNumber) obj).doubleValue()) != 1.0) throw new PdfXConformanceException( MessageLocalization.getComposedMessage( "transparency.is.not.allowed.ca.eq.1", String.valueOf(v))); obj = gs.get(PdfName.ca); v = 0.0; if (obj != null && (v = ((PdfNumber) obj).doubleValue()) != 1.0) throw new PdfXConformanceException( MessageLocalization.getComposedMessage( "transparency.is.not.allowed.ca.eq.1", String.valueOf(v))); break; case PdfIsoKeys.PDFISOKEY_LAYER: throw new PdfXConformanceException( MessageLocalization.getComposedMessage("layers.are.not.allowed")); } }