Extract metadata tool

This commit is contained in:
Jakub Melka 2020-10-09 17:08:56 +02:00
parent 98f945f724
commit e735c66d5c
5 changed files with 133 additions and 0 deletions

View File

@ -45,6 +45,7 @@ SOURCES += \
pdftoolattachments.cpp \
pdftoolinfo.cpp \
pdftoolinfojavascript.cpp \
pdftoolinfometadata.cpp \
pdftoolinfonameddestinations.cpp \
pdftoolinfopageboxes.cpp \
pdftoolverifysignatures.cpp \
@ -65,6 +66,7 @@ HEADERS += \
pdftoolattachments.h \
pdftoolinfo.h \
pdftoolinfojavascript.h \
pdftoolinfometadata.h \
pdftoolinfonameddestinations.h \
pdftoolinfopageboxes.h \
pdftoolverifysignatures.h \

View File

@ -21,6 +21,7 @@
#include <QTextStream>
#include <QXmlStreamWriter>
#include <QCoreApplication>
#include <QDataStream>
#include <stack>
@ -668,4 +669,13 @@ void PDFConsole::writeError(QString text, QString codecName)
#endif
}
void PDFConsole::writeData(const QByteArray& data)
{
if (!data.isEmpty())
{
QTextStream stream(stdout);
stream.device()->write(data);
}
}
} // pdftool

View File

@ -102,6 +102,9 @@ public:
/// Writes error to the console
static void writeError(QString text, QString codecName);
/// Writes binary data to the console
static void writeData(const QByteArray& data);
private:
explicit PDFConsole() = delete;
};

View File

@ -0,0 +1,82 @@
// Copyright (C) 2020 Jakub Melka
//
// This file is part of PdfForQt.
//
// PdfForQt is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// PdfForQt is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with PDFForQt. If not, see <https://www.gnu.org/licenses/>.
#include "pdftoolinfometadata.h"
#include "pdfexception.h"
namespace pdftool
{
static PDFToolInfoMetadataApplication s_infoMetadataApplication;
QString PDFToolInfoMetadataApplication::getStandardString(StandardString standardString) const
{
switch (standardString)
{
case Command:
return "info-metadata";
case Name:
return PDFToolTranslationContext::tr("Extract document metadata");
case Description:
return PDFToolTranslationContext::tr("Extract document metadata (embedded xml stream).");
default:
Q_ASSERT(false);
break;
}
return QString();
}
int PDFToolInfoMetadataApplication::execute(const PDFToolOptions& options)
{
pdf::PDFDocument document;
QByteArray sourceData;
if (!readDocument(options, document, &sourceData))
{
return ErrorDocumentReading;
}
pdf::PDFObject metadata = document.getObject(document.getCatalog()->getMetadata());
if (metadata.isStream())
{
try
{
QByteArray rawData = document.getDecodedStream(metadata.getStream());
PDFConsole::writeData(rawData);
}
catch (pdf::PDFException e)
{
PDFConsole::writeError(e.getMessage(), options.outputCodec);
}
}
else
{
PDFConsole::writeError(PDFToolTranslationContext::tr("Metadata not found in document."), options.outputCodec);
}
return ExitSuccess;
}
PDFToolAbstractApplication::Options PDFToolInfoMetadataApplication::getOptionsFlags() const
{
return ConsoleFormat | OpenDocument;
}
} // namespace pdftool

View File

@ -0,0 +1,36 @@
// Copyright (C) 2020 Jakub Melka
//
// This file is part of PdfForQt.
//
// PdfForQt is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// PdfForQt is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with PDFForQt. If not, see <https://www.gnu.org/licenses/>.
#ifndef PDFTOOLINFOMETADATA_H
#define PDFTOOLINFOMETADATA_H
#include "pdftoolabstractapplication.h"
namespace pdftool
{
class PDFToolInfoMetadataApplication : public PDFToolAbstractApplication
{
public:
virtual QString getStandardString(StandardString standardString) const override;
virtual int execute(const PDFToolOptions& options) override;
virtual Options getOptionsFlags() const override;
};
} // namespace pdftool
#endif // PDFTOOLINFOMETADATA_H