/* * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include "core/UBPlatformUtils.h" void usage(QString progName) { qDebug() << "usage:" << progName << "pdfFile pageNumber width height outputDir [imageFormat=png]"; qDebug() << "pdfFile is the path to the pdf file"; qDebug() << "imageFormat must be one of " << QImageWriter::supportedImageFormats(); } int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); QPixmapCache::setCacheLimit(0); QStringList args = app.arguments(); qreal width, height; QString pdfFile; QString imageFormat = "png"; QString outputDir = "."; int pageNumber = 1; qDebug() << UBPlatformUtils::applicationResourcesDirectory(); if (args.count() >= 6 && args.count() <= 7) { pdfFile = args.at(1); pageNumber = args.at(2).toInt(); width = args.at(3).toDouble(); height = args.at(4).toDouble(); outputDir = args.at(5); if (args.count() == 7) { imageFormat = args.at(6); } } else { usage(args.at(0)); return 1; } QString fileName = QFileInfo(pdfFile).completeBaseName(); if (!QImageWriter::supportedImageFormats().contains(imageFormat.toAscii())) { usage(args.at(0)); return 1; } XPDFRenderer pdf(pdfFile); if (!pdf.isValid()) { qCritical() << fileName << "appears to be an invalid pdf file"; return 1; } if (pageNumber < 1 || pageNumber > pdf.pageCount()) { qCritical() << fileName << "has" << pdf.pageCount() << "pages"; return 1; } //qDebug() << "Converting" << pdfFile << "(" << pageNumber << ") into" << imageFormat; QImage image(width, height, QImage::Format_ARGB32); QPainter p(&image); p.setBackground(Qt::transparent); p.eraseRect(0, 0, width, height); qreal pdfWidth = pdf.pageSize(pageNumber).width(); qreal pdfHeight = pdf.pageSize(pageNumber).height(); qreal ratio = qMin(width / pdfWidth, height / pdfHeight); p.scale(ratio, ratio); if (width > pdfWidth) { p.translate((pdfWidth - (width / ratio)) / -2, 0); } if (height > pdfHeight) { p.translate(0, (pdfHeight - (height / ratio)) / -2); } pdf.render(&p, pageNumber); QString pageStr = QString("%1").arg(pageNumber, 5, 10, QChar('0')); QString outputPath = outputDir + "/" + fileName + pageStr + "." + imageFormat; bool ok = image.save(outputPath, imageFormat.toAscii().constData()); return ok ? 0 : 1; }