File indexing completed on 2024-04-21 05:51:46

0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 // SPDX-FileCopyrightText: 2010 Dominik Seichter <domseichter@web.de>
0003 
0004 #include "podofoplugin.h"
0005 
0006 #include <podofo/podofo.h>
0007 
0008 #include "batchrenamer.h"
0009 #include "tokenhelpdialog.h"
0010 
0011 using namespace PoDoFo;
0012 
0013 PodofoPlugin::PodofoPlugin(PluginLoader *loader)
0014     : FilePlugin(loader)
0015 {
0016     this->addSupportedToken("pdfAuthor");
0017     this->addSupportedToken("pdfCreator");
0018     this->addSupportedToken("pdfKeywords");
0019     this->addSupportedToken("pdfSubject");
0020     this->addSupportedToken("pdfTitle");
0021     this->addSupportedToken("pdfProducer");
0022     this->addSupportedToken("pdfPages");
0023     m_help.append("[pdfAuthor]" + TokenHelpDialog::getTokenSeparator() + i18n("Author of the PDF file"));
0024     m_help.append("[pdfCreator]" + TokenHelpDialog::getTokenSeparator() + i18n("Creator of the PDF file"));
0025     m_help.append("[pdfKeywords]" + TokenHelpDialog::getTokenSeparator() + i18n("Keywords of the PDF file"));
0026     m_help.append("[pdfSubject]" + TokenHelpDialog::getTokenSeparator() + i18n("Subject of the PDF file"));
0027     m_help.append("[pdfTitle]" + TokenHelpDialog::getTokenSeparator() + i18n("Title of the PDF file"));
0028     m_help.append("[pdfProducer]" + TokenHelpDialog::getTokenSeparator() + i18n("Producer of the PDF file"));
0029     m_help.append("[pdfPages]" + TokenHelpDialog::getTokenSeparator() + i18n("Number of pages in the PDF file"));
0030 
0031     m_name = i18n("PoDoFo (PDF) Plugin");
0032     m_comment = i18n("<qt>This plugin supports reading tags from "
0033                      "PDF files.</qt>");
0034 
0035     m_icon = "application-pdf";
0036 }
0037 
0038 QString PodofoPlugin::processFile(BatchRenamer *b, int index, const QString &filenameOrToken, EPluginType)
0039 {
0040     QString token(filenameOrToken.toLower());
0041     QString filename = (*b->files())[index].srcUrl().path();
0042 
0043     if (!this->supports(token)) {
0044         return QString("");
0045     }
0046 
0047     try {
0048         PdfMemDocument doc;
0049         doc.Load(filename.toUtf8().data());
0050 #if (PODOFO_VERSION_MINOR>=10 || PODOFO_VERSION_MAJOR>=1)
0051         const PdfInfo *info = doc.GetInfo();
0052 
0053         if (token == "pdfauthor") {
0054             return info->GetAuthor().has_value() ? QString::fromUtf8(info->GetAuthor()->GetString().c_str()) : QString();
0055         } else if (token == "pdfcreator") {
0056             return info->GetCreator().has_value() ? QString::fromUtf8(info->GetCreator()->GetString().c_str()) : QString();
0057         } else if (token == "pdfkeywords") {
0058             return info->GetKeywords().has_value() ? QString::fromUtf8(info->GetKeywords()->GetString().c_str()) : QString();
0059         } else if (token == "pdfsubject") {
0060             return info->GetSubject().has_value() ? QString::fromUtf8(info->GetSubject()->GetString().c_str()) : QString();
0061         } else if (token == "pdftitle") {
0062             return info->GetTitle().has_value() ? QString::fromUtf8(info->GetTitle()->GetString().c_str()) : QString();
0063         } else if (token == "pdfproducer") {
0064             return info->GetProducer().has_value() ? QString::fromUtf8(info->GetProducer()->GetString().c_str()) : QString();
0065         } else if (token == "pdfpages") {
0066             return QString::number(doc.GetPages().GetCount());
0067         }
0068 #else
0069         PdfInfo *info = doc.GetInfo();
0070 
0071         if (token == "pdfauthor") {
0072             return QString::fromUtf8(info->GetAuthor().GetStringUtf8().c_str());
0073         } else if (token == "pdfcreator") {
0074             return QString::fromUtf8(info->GetCreator().GetStringUtf8().c_str());
0075         } else if (token == "pdfkeywords") {
0076             return QString::fromUtf8(info->GetKeywords().GetStringUtf8().c_str());
0077         } else if (token == "pdfsubject") {
0078             return QString::fromUtf8(info->GetSubject().GetStringUtf8().c_str());
0079         } else if (token == "pdftitle") {
0080             return QString::fromUtf8(info->GetTitle().GetStringUtf8().c_str());
0081         } else if (token == "pdfproducer") {
0082             return QString::fromUtf8(info->GetProducer().GetStringUtf8().c_str());
0083         } else if (token == "pdfpages") {
0084             return QString::number(doc.GetPageCount());
0085         }
0086 #endif
0087     } catch (PdfError &error) {
0088         return QString::fromUtf8(error.what());
0089     }
0090 
0091     return QString("");
0092 }