class PdfProvider : public QDeclarativeImageProvider
 {
 public:
     PdfProvider()
         : QDeclarativeImageProvider(QDeclarativeImageProvider::Image)
     {
     }

     QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize)
     {
         int pagesep = id.lastIndexOf(":");
         QString filename = id.left(pagesep);//not -1 (index vs. first n)
         /* open document */
         int pagenum = id.mid(pagesep+1).toInt();
         fz_context *context = fz_new_context(NULL, NULL, FZ_STORE_UNLIMITED);
         fz_document *document = fz_open_document(context, filename.toLocal8Bit().data());

         /* load page*/
         fz_page *page = fz_load_page(document, pagenum - 1);

         /* render page to pixmap */
         fz_matrix transform = fz_scale(1.0f, 1.0f);
         transform = fz_concat(transform, fz_rotate(0.0f));
         fz_rect rect = fz_bound_page(document, page);
         rect = fz_transform_rect(transform, rect); // fz_rect use float
         fz_bbox bbox = fz_round_rect(rect); //fz_bbox use int
         fz_pixmap *pixmap = fz_new_pixmap_with_bbox(context, fz_device_rgb, bbox);
         fz_clear_pixmap_with_value(context, pixmap, 0xff); // 0xff = 255
         fz_device *device = fz_new_draw_device(context, pixmap);
         fz_run_page(document, page, device, transform, NULL);
         fz_free_device(device);

         /* render as QImage */
         unsigned char *samples = fz_pixmap_samples(context, pixmap);
         int width = fz_pixmap_width(context, pixmap);
         int height = fz_pixmap_height(context, pixmap);
         //rgba2bgra(samples, width * height * 4);
         QImage image= (new QImage(samples, width, height, QImage::Format_ARGB32))->rgbSwapped();
//         fz_drop_pixmap(context, pixmap);

         /* clean up */
//         fz_free_page(document, page);
//         fz_close_document(document);
//         fz_free_context(context);


         if (size)
             *size = image.size();

         return image;
     }
 };

####################
     viewer->engine()->addImageProvider(QLatin1String("pdfprov"), new PdfProvider());
####################
