3 #include <poppler/cpp/poppler-document.h>
4 #include <poppler/cpp/poppler-image.h>
5 #include <poppler/cpp/poppler-page.h>
6 #include <poppler/cpp/poppler-page-renderer.h>
8 #define MIN(a, b) ((a) < (b) ? (a) : (b))
16 poppler::document
*doc
;
19 static poppler::rotation_enum
rotation(int times
)
22 return poppler::rotate_90
;
24 return poppler::rotate_180
;
26 return poppler::rotate_270
;
27 return poppler::rotate_0
;
30 int doc_draw(struct doc
*doc
, int p
, int zoom
, int rotate
,
31 fbval_t
*bitmap
, int *rows
, int *cols
)
33 poppler::page
*page
= doc
->doc
->create_page(p
- 1);
34 poppler::page_renderer pr
;
38 pr
.set_render_hint(poppler::page_renderer::antialiasing
, true);
39 pr
.set_render_hint(poppler::page_renderer::text_antialiasing
, true);
40 poppler::image img
= pr
.render_page(page
, 72 * zoom
/ 10, 72 * zoom
/ 10,
41 -1, -1, -1, -1, rotation((rotate
+ 89) / 90));
42 h
= MIN(*rows
, img
.height());
43 w
= MIN(*cols
, img
.width());
44 dat
= (unsigned char *) img
.data();
45 for (y
= 0; y
< h
; y
++) {
46 int xs
= y
* *cols
+ (*cols
- w
) / 2;
47 for (x
= 0; x
< w
; x
++) {
48 unsigned char *s
= dat
+ img
.bytes_per_row() * y
+ x
* 4;
49 bitmap
[xs
+ x
] = FB_VAL(s
[2], s
[1], s
[0]);
58 int doc_pages(struct doc
*doc
)
60 return doc
->doc
->pages();
63 struct doc
*doc_open(char *path
)
65 struct doc
*doc
= (struct doc
*) malloc(sizeof(*doc
));
66 doc
->doc
= poppler::document::load_from_file(path
);
74 void doc_close(struct doc
*doc
)