cpp/.gitignore | 1 cpp/poppler-global.h | 2 + cpp/poppler-page.cpp | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ cpp/poppler-page.h | 9 ++++++ cpp/poppler-rectangle.h | 18 ++++++++++++ 5 files changed, 97 insertions(+)
New commits: commit 7838b182143086192ac8dcf571da0ce1743619e2 Author: Pino Toscano <p...@kde.org> Date: Tue Feb 23 00:04:09 2010 +0100 [cpp] add the directory of the generated html apidox to the ignore list diff --git a/cpp/.gitignore b/cpp/.gitignore index 0556b92..5f43221 100644 --- a/cpp/.gitignore +++ b/cpp/.gitignore @@ -5,3 +5,4 @@ Makefile Makefile.in poppler-version.h +APIDOCS-html commit 71a38a23a9db5cac872c666283b7abcb1462210c Author: Pino Toscano <p...@kde.org> Date: Mon Feb 22 23:43:34 2010 +0100 [cpp] add page::text() to get the text inside a page region diff --git a/cpp/poppler-page.cpp b/cpp/poppler-page.cpp index c6a596d..5a0c29c 100644 --- a/cpp/poppler-page.cpp +++ b/cpp/poppler-page.cpp @@ -25,6 +25,8 @@ #include "TextOutputDev.h" +#include <memory> + using namespace poppler; page_private::page_private(document_private *_doc, int _index) @@ -170,3 +172,17 @@ bool page::search(const ustring &text, rectf &r, search_direction_enum direction return found; } + +ustring page::text(const rectf &r) const +{ + std::auto_ptr<GooString> s; + TextOutputDev td(0, gFalse, gFalse, gFalse); + d->doc->doc->displayPage(&td, d->index + 1, 72, 72, 0, false, true, false); + if (r.is_empty()) { + const PDFRectangle *rect = d->page->getCropBox(); + s.reset(td.getText(rect->x1, rect->y1, rect->x2, rect->y2)); + } else { + s.reset(td.getText(r.left(), r.top(), r.right(), r.bottom())); + } + return ustring::from_utf_8(s->getCString()); +} diff --git a/cpp/poppler-page.h b/cpp/poppler-page.h index 256f96e..308afd3 100644 --- a/cpp/poppler-page.h +++ b/cpp/poppler-page.h @@ -56,6 +56,7 @@ public: bool search(const ustring &text, rectf &r, search_direction_enum direction, case_sensitivity_enum case_sensitivity, rotation_enum rotation = rotate_0) const; + ustring text(const rectf &rect = rectf()) const; private: page(document_private *doc, int index); commit 4c75360233bc67f097551980a46ecce976927220 Author: Pino Toscano <p...@kde.org> Date: Mon Feb 22 23:05:53 2010 +0100 [cpp] add page::search() diff --git a/cpp/poppler-page.cpp b/cpp/poppler-page.cpp index c8ce706..c6a596d 100644 --- a/cpp/poppler-page.cpp +++ b/cpp/poppler-page.cpp @@ -23,6 +23,8 @@ #include "poppler-page-private.h" #include "poppler-private.h" +#include "TextOutputDev.h" + using namespace poppler; page_private::page_private(document_private *_doc, int _index) @@ -119,3 +121,52 @@ page_transition* page::transition() const } return d->transition; } + +bool page::search(const ustring &text, rectf &r, search_direction_enum direction, + case_sensitivity_enum case_sensitivity, rotation_enum rotation) const +{ + const size_t len = text.length(); + std::vector<Unicode> u(len); + for (size_t i = 0; i < len; ++i) { + u[i] = text[i]; + } + + const GBool sCase = case_sensitivity == case_sensitive ? gTrue : gFalse; + const int rotation_value = (int)rotation * 90; + + bool found = false; + double rect_left = r.left(); + double rect_top = r.top(); + double rect_right = r.right(); + double rect_bottom = r.bottom(); + + TextOutputDev td(NULL, gTrue, gFalse, gFalse); + d->doc->doc->displayPage(&td, d->index + 1, 72, 72, rotation_value, false, true, false); + TextPage *text_page = td.takeText(); + + switch (direction) { + case search_from_top: + found = text_page->findText(&u[0], len, + gTrue, gTrue, gFalse, gFalse, sCase, gFalse, + &rect_left, &rect_top, &rect_right, &rect_bottom); + break; + case search_next_result: + found = text_page->findText(&u[0], len, + gFalse, gTrue, gTrue, gFalse, sCase, gFalse, + &rect_left, &rect_top, &rect_right, &rect_bottom); + break; + case search_previous_result: + found = text_page->findText(&u[0], len, + gFalse, gTrue, gTrue, gFalse, sCase, gTrue, + &rect_left, &rect_top, &rect_right, &rect_bottom); + break; + } + + text_page->decRefCnt(); + r.set_left(rect_left); + r.set_top(rect_top); + r.set_right(rect_right); + r.set_bottom(rect_bottom); + + return found; +} diff --git a/cpp/poppler-page.h b/cpp/poppler-page.h index 65cea52..256f96e 100644 --- a/cpp/poppler-page.h +++ b/cpp/poppler-page.h @@ -39,6 +39,11 @@ public: seascape, upside_down }; + enum search_direction_enum { + search_from_top, + search_next_result, + search_previous_result + }; ~page(); @@ -49,6 +54,9 @@ public: page_transition* transition() const; + bool search(const ustring &text, rectf &r, search_direction_enum direction, + case_sensitivity_enum case_sensitivity, rotation_enum rotation = rotate_0) const; + private: page(document_private *doc, int index); commit 8932c53a084083eb42d109dd17bac3ad41ce65b5 Author: Pino Toscano <p...@kde.org> Date: Mon Feb 22 22:39:36 2010 +0100 [cpp] add getters and setters for left/top/right/bottom diff --git a/cpp/poppler-rectangle.h b/cpp/poppler-rectangle.h index 18674b2..dabacc9 100644 --- a/cpp/poppler-rectangle.h +++ b/cpp/poppler-rectangle.h @@ -51,6 +51,24 @@ public: T height() const { return y2 - y1; } + T left() const + { return x1; } + T top() const + { return y1; } + T right() const + { return x2; } + T bottom() const + { return y2; } + + void set_left(T value) + { x1 = value; } + void set_top(T value) + { y1 = value; } + void set_right(T value) + { x2 = value; } + void set_bottom(T value) + { y2 = value; } + private: T x1, y1, x2, y2; }; commit 8e1ea57f558fa3a1702a17d79b5aaffc486c6a56 Author: Pino Toscano <p...@kde.org> Date: Mon Feb 22 22:19:51 2010 +0100 [cpp] add a global enum for case sensitivity diff --git a/cpp/poppler-global.h b/cpp/poppler-global.h index 1eb1fa3..b19378c 100644 --- a/cpp/poppler-global.h +++ b/cpp/poppler-global.h @@ -67,6 +67,8 @@ enum permission_enum { perm_print, perm_change, perm_copy, perm_add_notes, perm_fill_forms, perm_accessibility, perm_assemble, perm_print_high_resolution }; +enum case_sensitivity_enum { case_sensitive, case_insensitive }; + typedef std::vector<char> byte_array; class POPPLER_CPP_EXPORT ustring : public std::basic_string<unsigned short> _______________________________________________ poppler mailing list poppler@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/poppler