Krita Source Code Documentation
Loading...
Searching...
No Matches
KisPDFImport Class Reference

#include <kis_pdf_import.h>

+ Inheritance diagram for KisPDFImport:

Public Member Functions

KisImportExportErrorCode convert (KisDocument *document, QIODevice *io, KisPropertiesConfigurationSP configuration=nullptr) override
 
 KisPDFImport (QObject *parent, const QVariantList &)
 
 ~KisPDFImport () override
 
- Public Member Functions inherited from KisImportExportFilter
virtual KisConfigWidgetcreateConfigurationWidget (QWidget *parent, const QByteArray &from="", const QByteArray &to="") const
 createConfigurationWidget creates a widget that can be used to define the settings for a given import/export filter
 
virtual KisPropertiesConfigurationSP defaultConfiguration (const QByteArray &from="", const QByteArray &to="") const
 defaultConfiguration defines the default settings for the given import export filter
 
virtual QMap< QString, KisExportCheckBase * > exportChecks ()
 generate and return the list of capabilities of this export filter. The list
 
virtual bool exportSupportsGuides () const
 exportSupportsGuides Because guides are in the document and not the image, checking for guides cannot be made an exportCheck.
 
KisPropertiesConfigurationSP lastSavedConfiguration (const QByteArray &from="", const QByteArray &to="") const
 lastSavedConfiguration return the last saved configuration for this filter
 
 Private ()
 
void setBatchMode (bool batchmode)
 
void setFilename (const QString &filename)
 
void setImportUserFeedBackInterface (KisImportUserFeedbackInterface *interface)
 
void setMimeType (const QString &mime)
 
void setRealFilename (const QString &filename)
 
void setUpdater (QPointer< KoUpdater > updater)
 
virtual bool supportsIO () const
 Override and return false for the filters that use a library that cannot handle file handles, only file names.
 
QPointer< KoUpdaterupdater ()
 
virtual QString verify (const QString &fileName) const
 Verify whether the given file is correct and readable.
 
 ~KisImportExportFilter () override
 
 ~Private ()
 

Additional Inherited Members

- Public Attributes inherited from KisImportExportFilter
bool batchmode
 
QMap< QString, KisExportCheckBase * > capabilities
 
QString filename
 
KisImportUserFeedbackInterfaceimportUserFeedBackInterface {nullptr}
 
QByteArray mime
 
QString realFilename
 
QPointer< KoUpdaterupdater
 
- Static Public Attributes inherited from KisImportExportFilter
static const QString CICPPrimariesTag = "CICPCompatiblePrimaries"
 
static const QString CICPTransferCharacteristicsTag = "CICPCompatibleTransferFunction"
 
static const QString ColorDepthIDTag = "ColorDepthID"
 
static const QString ColorModelIDTag = "ColorModelID"
 
static const QString HDRTag = "HDRSupported"
 
static const QString ImageContainsTransparencyTag = "ImageContainsTransparency"
 
static const QString sRGBTag = "sRGB"
 
- Protected Member Functions inherited from KisImportExportFilter
void addCapability (KisExportCheckBase *capability)
 
void addSupportedColorModels (QList< QPair< KoID, KoID > > supportedColorModels, const QString &name, KisExportCheckBase::Level level=KisExportCheckBase::PARTIALLY)
 
bool batchMode () const
 
QString filename () const
 
KisImportUserFeedbackInterfaceimportUserFeedBackInterface () const
 
virtual void initializeCapabilities ()
 
 KisImportExportFilter (QObject *parent=0)
 
QByteArray mimeType () const
 
QString realFilename () const
 
void setProgress (int value)
 
QString verifyZiPBasedFiles (const QString &fileName, const QStringList &filesToCheck) const
 

Detailed Description

Definition at line 14 of file kis_pdf_import.h.

Constructor & Destructor Documentation

◆ KisPDFImport()

KisPDFImport::KisPDFImport ( QObject * parent,
const QVariantList &  )

◆ ~KisPDFImport()

KisPDFImport::~KisPDFImport ( )
override

Definition at line 56 of file kis_pdf_import.cpp.

57{
58}

Member Function Documentation

◆ convert()

KisImportExportErrorCode KisPDFImport::convert ( KisDocument * document,
QIODevice * io,
KisPropertiesConfigurationSP configuration = nullptr )
overridevirtual

The filter chain calls this method to perform the actual conversion. The passed mimetypes should be a pair of those you specified in your .desktop file. You have to implement this method to make the filter work.

Returns
The error status, see the #ConversionStatus enum. KisImportExportFilter::OK means that everything is alright.

Implements KisImportExportFilter.

Definition at line 60 of file kis_pdf_import.cpp.

61{
62#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
63 Poppler::Document* pdoc = Poppler::Document::loadFromData(io->readAll());
64#else
65 std::unique_ptr<Poppler::Document> pdoc = Poppler::Document::loadFromData(io->readAll());
66#endif
67 if (!pdoc) {
68 dbgFile << "Error when reading the PDF";
70 }
71
72 pdoc->setRenderHint(Poppler::Document::Antialiasing, true);
73 pdoc->setRenderHint(Poppler::Document::TextAntialiasing, true);
74
75 while (pdoc->isLocked()) {
76 KPasswordDialog dlg(0);
77 dlg.setPrompt(i18n("A password is required to read that pdf"));
78 dlg.setWindowTitle(i18n("A password is required to read that pdf"));
79 if (dlg.exec() != QDialog::Accepted) {
80 dbgFile << "Password canceled";
82 } else
83 pdoc->unlock(dlg.password().toLocal8Bit(), dlg.password().toLocal8Bit());
84 }
85
86 KoDialog* kdb = new KoDialog(qApp->activeWindow());
87 kdb->setCaption(i18n("PDF Import Options"));
88 kdb->setModal(false);
89
90#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
91 KisPDFImportWidget* wdg = new KisPDFImportWidget(pdoc, kdb);
92#else
93 KisPDFImportWidget* wdg = new KisPDFImportWidget(pdoc.get(), kdb);
94#endif
95
96 kdb->setMainWidget(wdg);
97
98 {
99 KisCursorOverrideHijacker cursorHijacker;
100
101 if (kdb->exec() == QDialog::Rejected) {
102#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
103 delete pdoc;
104#endif
105 delete kdb;
107 }
108 }
109
110 // Create the krita image
112 int width = wdg->intWidth->value();
113 int height = wdg->intHeight->value();
114 KisImageSP image = new KisImage(document->createUndoStore(), width, height, cs, "built image");
115 image->setResolution(wdg->intResolution->value() / 72.0, wdg->intResolution->value() / 72.0);
116
117 // create a layer
118 QList<int> pages = wdg->pages();
119 for (QList<int>::const_iterator it = pages.constBegin(); it != pages.constEnd(); ++it) {
120 KisPaintLayer* layer = new KisPaintLayer(image.data(),
121 i18n("Page %1", *it + 1),
122 quint8_MAX);
123
124#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
125 Poppler::Page* page = pdoc->page(*it);
126#else
127 std::unique_ptr<Poppler::Page> page = pdoc->page(*it);
128#endif
129
130 QImage img = page->renderToImage(wdg->intResolution->value(), wdg->intResolution->value(), 0, 0, width, height);
131 layer->paintDevice()->convertFromQImage(img, 0, 0, 0);
132
133 image->addNode(layer, image->rootLayer(), 0);
134 setProgress(qreal(*it + 1) * 100 / pages.count());
135 }
136
137 document->setCurrentImage(image);
138#if (QT_VERSION < QT_VERSION_CHECK(6, 0, 0))
139 delete pdoc;
140#endif
141 delete kdb;
143}
The KisCursorOverrideHijacker class stores all override cursors in a stack, and resets them back afte...
KisGroupLayerSP rootLayer() const
void setResolution(double xres, double yres)
void convertFromQImage(const QImage &image, const KoColorProfile *profile, qint32 offsetX=0, qint32 offsetY=0)
A dialog base class with standard buttons and predefined layouts.
Definition KoDialog.h:116
void setMainWidget(QWidget *widget)
Definition KoDialog.cpp:354
virtual void setCaption(const QString &caption)
Definition KoDialog.cpp:498
#define dbgFile
Definition kis_debug.h:53
const quint8 quint8_MAX
Definition kis_global.h:24
bool addNode(KisNodeSP node, KisNodeSP parent=KisNodeSP(), KisNodeAdditionFlags flags=KisNodeAdditionFlag::None)
KisPaintDeviceSP paintDevice
static KoColorSpaceRegistry * instance()
const KoColorSpace * rgb8(const QString &profileName=QString())

References KisNodeFacade::addNode(), ImportExportCodes::Cancelled, KisPaintDevice::convertFromQImage(), KisSharedPtr< T >::data(), dbgFile, ImportExportCodes::ErrorWhileReading, KoColorSpaceRegistry::instance(), ImportExportCodes::OK, KisPDFImportWidget::pages(), KisPaintLayer::paintDevice, quint8_MAX, KoColorSpaceRegistry::rgb8(), KisImage::rootLayer(), KoDialog::setCaption(), KoDialog::setMainWidget(), KisImportExportFilter::setProgress(), and KisImage::setResolution().


The documentation for this class was generated from the following files: