mirror of https://github.com/JakubMelka/PDF4QT.git
Issue #40: Finish
This commit is contained in:
parent
361ee247e5
commit
edf7642151
|
@ -186,6 +186,36 @@ void PDFDocumentSanitizer::performSanitizeFileAttachments()
|
|||
return annotation->getType() == AnnotationType::FileAttachment;
|
||||
};
|
||||
removeAnnotations(filter, tr("File attachments removed: %1."));
|
||||
|
||||
// Remove files in name tree
|
||||
PDFDocumentBuilder builder(m_storage, PDFVersion(2, 0));
|
||||
PDFObject catalogObject = builder.getObjectByReference(builder.getCatalogReference());
|
||||
const PDFDictionary* catalogDictionary = builder.getDictionaryFromObject(catalogObject);
|
||||
const bool hasNames = catalogDictionary && catalogDictionary->hasKey("Names");
|
||||
|
||||
if (hasNames)
|
||||
{
|
||||
PDFObject namesObject = builder.getObject(catalogDictionary->get("Names"));
|
||||
const PDFDictionary* namesDictionary = builder.getDictionaryFromObject(namesObject);
|
||||
if (namesDictionary->hasKey("EmbeddedFiles"))
|
||||
{
|
||||
PDFDictionary dictionaryCopy = *namesDictionary;
|
||||
dictionaryCopy.setEntry(PDFInplaceOrMemoryString("EmbeddedFiles"), PDFObject());
|
||||
namesObject = PDFObject::createDictionary(std::make_shared<PDFDictionary>(qMove(dictionaryCopy)));
|
||||
|
||||
PDFObjectFactory factory;
|
||||
factory.beginDictionary();
|
||||
factory.beginDictionaryItem("Names");
|
||||
factory << namesObject;
|
||||
factory.endDictionaryItem();
|
||||
factory.endDictionary();
|
||||
PDFObject newCatalog = factory.takeObject();
|
||||
builder.mergeTo(builder.getCatalogReference(), std::move(newCatalog));
|
||||
PDFDocument document = builder.build();
|
||||
m_storage = document.getStorage();
|
||||
Q_EMIT sanitizationProgress(tr("Embedded files were removed."));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void PDFDocumentSanitizer::performSanitizeEmbeddedSearchIndex()
|
||||
|
|
|
@ -320,6 +320,7 @@ PDFProgramController::PDFProgramController(QObject* parent) :
|
|||
m_recentFileManager(new PDFRecentFileManager(this)),
|
||||
m_optionalContentActivity(nullptr),
|
||||
m_textToSpeech(nullptr),
|
||||
m_isDocumentSetInProgress(false),
|
||||
m_futureWatcher(nullptr),
|
||||
m_CMSManager(new pdf::PDFCMSManager(this)),
|
||||
m_toolManager(nullptr),
|
||||
|
@ -1670,6 +1671,7 @@ void PDFProgramController::onDocumentModified(pdf::PDFModifiedDocument document)
|
|||
// We will create undo/redo step from old document, with flags from the new,
|
||||
// because new document is modification of old document with flags.
|
||||
|
||||
pdf::PDFBoolGuard guard(m_isDocumentSetInProgress);
|
||||
Q_ASSERT(m_pdfDocument);
|
||||
|
||||
if (m_undoRedoManager)
|
||||
|
@ -1677,6 +1679,12 @@ void PDFProgramController::onDocumentModified(pdf::PDFModifiedDocument document)
|
|||
m_undoRedoManager->createUndo(document, m_pdfDocument);
|
||||
}
|
||||
|
||||
// Retain pointer on old document, because during the update,
|
||||
// old pointer must be valid, because some widgets holds raw
|
||||
// pointer.
|
||||
pdf::PDFDocumentPointer oldDocument = std::move(m_pdfDocument);
|
||||
Q_UNUSED(oldDocument);
|
||||
|
||||
m_pdfDocument = document;
|
||||
document.setOptionalContentActivity(m_optionalContentActivity);
|
||||
setDocument(document);
|
||||
|
@ -2015,7 +2023,10 @@ void PDFProgramController::onActionCertificateManagerTriggered()
|
|||
|
||||
void PDFProgramController::onDrawSpaceChanged()
|
||||
{
|
||||
m_mainWindowInterface->updateUI(false);
|
||||
if (!m_isDocumentSetInProgress)
|
||||
{
|
||||
m_mainWindowInterface->updateUI(false);
|
||||
}
|
||||
}
|
||||
|
||||
void PDFProgramController::onPageLayoutChanged()
|
||||
|
|
|
@ -394,6 +394,7 @@ private:
|
|||
pdf::PDFOptionalContentActivity* m_optionalContentActivity;
|
||||
pdf::PDFDocumentPointer m_pdfDocument;
|
||||
PDFTextToSpeech* m_textToSpeech;
|
||||
bool m_isDocumentSetInProgress;
|
||||
|
||||
QFuture<AsyncReadingResult> m_future;
|
||||
QFutureWatcher<AsyncReadingResult>* m_futureWatcher;
|
||||
|
|
Loading…
Reference in New Issue