@Override public void setNeedToBeUpdated(boolean needToBeUpdated) { if (needToBeUpdated) { this.doc.addChangedObject(info); } else { this.doc.removeChangedObject(info); } }
@Override public void setNeedToBeUpdated(boolean needToBeUpdated) { if (isStreamCreated) { if (needToBeUpdated) { this.doc.addObject(this.stream); } else { this.doc.removeAddedObject(this.stream); } } else { if (needToBeUpdated) { this.doc.addChangedObject(this.stream); } else { this.doc.removeChangedObject(this.stream); } } }
private void setRequiredDictionaryValue(ASAtom value, ASAtom key, MetadataFixerResultImpl.Builder resultBuilder) { if (!value.equals(this.stream.getNameKey(key))) { this.stream.setNameKey(key, value); this.doc.addChangedObject(stream); resultBuilder.addFix(value.getValue() + " value of " + key.getValue() + " key is set to metadata dictionary"); } }
/** * {@inheritDoc} Implemented by GreenField library. */ @Override public MetadataFixerResult saveDocumentIncremental(final MetadataFixerResultImpl.RepairStatus status, OutputStream output) { MetadataFixerResultImpl.Builder builder = new MetadataFixerResultImpl.Builder(); try { PDMetadata meta = this.document.getCatalog().getMetadata(); boolean isMetaPresent = meta != null && this.isNeedToBeUpdated(); boolean isMetaAdd = meta == null && this.metadata != null; if (isMetaPresent || isMetaAdd) { this.metadata.updateMetadataStream(); if (isMetaAdd) { this.document.getDocument().addChangedObject( this.document.getCatalog().getObject()); } this.document.saveTo(output); output.close(); builder.status(getStatus(status)); } else { builder.status(status); } } catch (Exception e) { LOGGER.log(Level.FINE, e.getMessage(), e); builder.status(FIX_ERROR).addFix("Problems with document save. " + e.getMessage()); } return builder.build(); }
@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); }