private static void addFilters(Set<String> res, COSFilters filters) { List<ASAtom> atoms = filters.getFilters(); if (atoms != null) { for (ASAtom atom : atoms) { if (filtersAbbreviations.keySet().contains(atom)) { atom = filtersAbbreviations.get(atom); } res.add(atom.getValue()); } } }
public COSFilters getFilters() { return new COSFilters(getKey(ASAtom.FILTER)); }
public COSFilters(final COSObject object) { this(); setObject(object); }
@Override public void checkMetadataStream( MetadataFixerResultImpl.Builder resultBuilder, PDFAFlavour flavour) { PDFAFlavour.Specification part = flavour.getPart(); if (part != PDFAFlavour.Specification.ISO_19005_1) { COSFilters filters = ((COSStream) this.stream.getDirectBase()).getFilters(); if (filters.size() == 1 && filters.getFilters().get(0) == ASAtom.FLATE_DECODE) { return; } try { ((COSStream) this.stream.getDirectBase()).setFilters(new COSFilters( COSName.construct(ASAtom.FLATE_DECODE))); this.doc.addChangedObject(stream); resultBuilder.addFix("Metadata stream filtered with FlateDecode"); } catch (IOException e) { LOGGER.log(Level.FINE, "Problems with setting filter for stream.", e); } } this.setRequiredDictionaryValue(ASAtom.METADATA, ASAtom.TYPE, resultBuilder); this.setRequiredDictionaryValue(ASAtom.getASAtom("XML"), ASAtom.SUBTYPE, resultBuilder); }
private List<CosFilter> getFilters() { COSFilters filters = ((COSStream) this.baseObject).getFilters(); if (filters == null || filters.getFilters().isEmpty()) { return Collections.emptyList(); if (filters.getFilters().size() == 1) { if (decodeParms instanceof COSArray) { decodeParms = decodeParms.at(0).get(); ASAtom filter = filters.getFilters().get(0); COSName filterName = (COSName) COSName.fromValue(filter); result.add(createFilter(filterName, decodeParms)); } else if (filters.size() > 1) { List<ASAtom> filtersList = filters.getFilters(); int i = 0; for (ASAtom filter : filtersList) {
@Override public int removeFiltersForAllMetadataObjects() { int res = 0; List<COSObject> objects = this.document.getDocument().getObjectsByType(ASAtom.METADATA); List<COSStream> metas = new ArrayList<>(); for (COSObject obj : objects) { if (obj.getType() == COSObjType.COS_STREAM) { metas.add((COSStream) obj.getDirectBase()); } else { LOGGER.log(Level.SEVERE, "Found non-stream Metadata dictionary."); } } for (COSStream stream : metas) { if (stream.getFilters().size() > 0) { try { stream.setFilters(new COSFilters()); res++; } catch (IOException e) { LOGGER.log(Level.FINE, "Error when removing filter from stream", e); return -1; } } } isUnfiltered = res > 0; return res; }
@Override public boolean setData(final ASInputStream stream) { COSFilters filters = getFilters(); if (filters.empty()) { return setData(stream, FilterFlags.RAW_DATA); } try (InternalOutputStream fileWithData = InternalOutputStream.getInternalOutputStream()) { ASOutputStream encoder = filters.getOutputStream(fileWithData); encoder.write(stream); File encodedDataFile = fileWithData.getFile(); return setData(new InternalInputStream(encodedDataFile, true), FilterFlags.RAW_DATA); } catch (IOException e) { LOGGER.log(Level.FINE, "Can not set data", e); return false; } }
public void setFilters(final COSFilters filters) throws IOException { try (ASInputStream decoded = this.getData(COSStream.FilterFlags.DECODE); SeekableInputStream unfilteredData = SeekableInputStream.getSeekableStream(decoded)) { InternalOutputStream fileWithData = InternalOutputStream.getInternalOutputStream(); setKey(ASAtom.FILTER, filters.getObject()); ASOutputStream encoder = filters.getOutputStream(fileWithData); encoder.write(unfilteredData); File encodedDataFile = fileWithData.getFile(); fileWithData.close(); this.setData(new InternalInputStream(encodedDataFile, true), FilterFlags.RAW_DATA); } }
protected void updateToObject() { COSObject filters = getObject(); filters.clearArray(); for (ASAtom entry : this.entries) { filters.add(COSName.construct(entry)); } }
@Override public ASInputStream getData(final FilterFlags filterFlags) { try { if (filterFlags == FilterFlags.RAW_DATA || this.flags != FilterFlags.RAW_DATA) { this.stream.reset(); return this.stream; } ASInputStream result = getFilters().getInputStream( ASInputStream.createStreamFromStream(stream), this.getKey(ASAtom.DECODE_PARMS)); result.reset(); return result; } catch (IOException e) { LOGGER.log(Level.FINE, "Can't get stream data", e); return null; } }
protected void updateFromObject() { COSObject filters = getObject(); if(filters.getType().equals(COSObjType.COS_ARRAY)) { int size = filters.size(); this.entries.clear(); for (int i = 0; i < size; i++) { this.entries.add(filters.at(i).getName()); } } else if (filters.getType().equals(COSObjType.COS_NAME)) { this.entries.clear(); this.entries.add(filters.getName()); } }