20#include "kis_pdf_import.h"
23#include <poppler-qt.h>
28#include <tqradiobutton.h>
31#include <tdeapplication.h>
33#include <kdialogbase.h>
34#include <kgenericfactory.h>
38#include <tdeio/netaccess.h>
41#include <KoFilterChain.h>
45#include <kis_colorspace.h>
46#include <kis_colorspace_factory_registry.h>
47#include <kis_group_layer.h>
49#include <kis_meta_registry.h>
50#include <kis_paint_layer.h>
53#include "kis_pdf_import_widget.h"
55typedef KGenericFactory<KisPDFImport, KoFilter> PDFImportFactory;
56K_EXPORT_COMPONENT_FACTORY(libchalkpdfimport, PDFImportFactory(
"kofficefilters"))
58KisPDFImport::KisPDFImport(KoFilter *, const
char *, const TQStringList&) : KoFilter()
62KisPDFImport::~KisPDFImport()
66KisPDFImport::ConversionStatus KisPDFImport::convert(
const TQCString& ,
const TQCString& )
68 TQString filename = m_chain -> inputFile();
69 kdDebug(41008) <<
"Importing using PDFImport!" << filename << endl;
71 if (filename.isEmpty())
72 return KoFilter::FileNotFound;
76 url.setPath(filename);
78 if (!TDEIO::NetAccess::exists(url,
false, tqApp -> mainWidget())) {
79 return KoFilter::FileNotFound;
84 if (TDEIO::NetAccess::download(url, tmpFile, tqApp -> mainWidget())) {
85 url.setPath( tmpFile );
88 Poppler::Document* pdoc = Poppler::Document::load( TQFile::encodeName(url.path() ) );
93 kdDebug(41008) <<
"Error when reading the PDF" << endl;
94 return KoFilter::StorageCreationError;
98 while( pdoc->isLocked() )
101 int result = KPasswordDialog::getPassword(password, i18n(
"A password is required to read that pdf"));
102 if (result == KPasswordDialog::Accepted)
104 pdoc->unlock(password.utf8());
106 kdDebug(41008) <<
"Password canceled" << endl;
107 return KoFilter::StorageCreationError;
111 KDialogBase* kdb =
new KDialogBase(0,
"",
false, i18n(
"PDF Import Options"), KDialogBase::Ok | KDialogBase::Cancel);
113 KisPDFImportWidget* wdg =
new KisPDFImportWidget(pdoc, kdb);
114 kdb->setMainWidget(wdg);
115 kapp->restoreOverrideCursor();
116 if(kdb->exec() == TQDialog::Rejected)
120 return KoFilter::StorageCreationError;
124 KisDoc * doc =
dynamic_cast<KisDoc*
>(m_chain -> outputDocument());
129 return KoFilter::CreationError;
132 doc -> prepareForImport();
134 KisColorSpace* cs = KisMetaRegistry::instance()->csRegistry()->getColorSpace(KisID(
"RGBA"),
"");
135 int width = wdg->intWidth->value();
136 int height = wdg->intHeight->value();
137 KisImageSP img =
new KisImage(doc->undoAdapter(), width, height, cs,
"built image");
138 img->blockSignals(
true);
141 TQValueList<int> pages = wdg->pages();
142 for(TQValueList<int>::const_iterator it = pages.begin(); it != pages.end(); ++it)
144 KisPaintLayer* layer =
new KisPaintLayer(img, TQString(i18n(
"Page %1")).arg( TQString::number(*it) + 1), TQ_UINT8_MAX);
145 layer->paintDevice()->convertFromTQImage( pdoc->getPage( *it )->renderToImage(wdg->intHorizontal->value(), wdg->intVertical->value() ),
"");
146 img->addLayer(layer, img->rootLayer(), 0);
149 img->blockSignals(
false);
150 doc -> setCurrentImage( img);
152 TDEIO::NetAccess::removeTempFile(tmpFile);