mirror of
				https://github.com/JakubMelka/PDF4QT.git
				synced 2025-06-05 21:59:17 +02:00 
			
		
		
		
	Extract metadata tool
This commit is contained in:
		| @@ -45,6 +45,7 @@ SOURCES += \ | |||||||
|         pdftoolattachments.cpp \ |         pdftoolattachments.cpp \ | ||||||
|         pdftoolinfo.cpp \ |         pdftoolinfo.cpp \ | ||||||
|         pdftoolinfojavascript.cpp \ |         pdftoolinfojavascript.cpp \ | ||||||
|  |         pdftoolinfometadata.cpp \ | ||||||
|         pdftoolinfonameddestinations.cpp \ |         pdftoolinfonameddestinations.cpp \ | ||||||
|         pdftoolinfopageboxes.cpp \ |         pdftoolinfopageboxes.cpp \ | ||||||
|         pdftoolverifysignatures.cpp \ |         pdftoolverifysignatures.cpp \ | ||||||
| @@ -65,6 +66,7 @@ HEADERS += \ | |||||||
|     pdftoolattachments.h \ |     pdftoolattachments.h \ | ||||||
|     pdftoolinfo.h \ |     pdftoolinfo.h \ | ||||||
|     pdftoolinfojavascript.h \ |     pdftoolinfojavascript.h \ | ||||||
|  |     pdftoolinfometadata.h \ | ||||||
|     pdftoolinfonameddestinations.h \ |     pdftoolinfonameddestinations.h \ | ||||||
|     pdftoolinfopageboxes.h \ |     pdftoolinfopageboxes.h \ | ||||||
|     pdftoolverifysignatures.h \ |     pdftoolverifysignatures.h \ | ||||||
|   | |||||||
| @@ -21,6 +21,7 @@ | |||||||
| #include <QTextStream> | #include <QTextStream> | ||||||
| #include <QXmlStreamWriter> | #include <QXmlStreamWriter> | ||||||
| #include <QCoreApplication> | #include <QCoreApplication> | ||||||
|  | #include <QDataStream> | ||||||
|  |  | ||||||
| #include <stack> | #include <stack> | ||||||
|  |  | ||||||
| @@ -668,4 +669,13 @@ void PDFConsole::writeError(QString text, QString codecName) | |||||||
| #endif | #endif | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void PDFConsole::writeData(const QByteArray& data) | ||||||
|  | { | ||||||
|  |     if (!data.isEmpty()) | ||||||
|  |     { | ||||||
|  |         QTextStream stream(stdout); | ||||||
|  |         stream.device()->write(data); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| }   // pdftool | }   // pdftool | ||||||
|   | |||||||
| @@ -102,6 +102,9 @@ public: | |||||||
|     /// Writes error to the console |     /// Writes error to the console | ||||||
|     static void writeError(QString text, QString codecName); |     static void writeError(QString text, QString codecName); | ||||||
|  |  | ||||||
|  |     /// Writes binary data to the console | ||||||
|  |     static void writeData(const QByteArray& data); | ||||||
|  |  | ||||||
| private: | private: | ||||||
|     explicit PDFConsole() = delete; |     explicit PDFConsole() = delete; | ||||||
| }; | }; | ||||||
|   | |||||||
							
								
								
									
										82
									
								
								PdfTool/pdftoolinfometadata.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								PdfTool/pdftoolinfometadata.cpp
									
									
									
									
									
										Normal 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 | ||||||
							
								
								
									
										36
									
								
								PdfTool/pdftoolinfometadata.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								PdfTool/pdftoolinfometadata.h
									
									
									
									
									
										Normal 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 | ||||||
		Reference in New Issue
	
	Block a user