poppler-page.h 3.74 KB
Newer Older
1
/*
2
 * Copyright (C) 2009-2010, Pino Toscano <pino@kde.org>
3
 * Copyright (C) 2018, Suzuki Toshiya <mpsuzuki@hiroshima-u.ac.jp>
Albert Astals Cid's avatar
Albert Astals Cid committed
4
 * Copyright (C) 2018, Albert Astals Cid <aacid@kde.org>
5
 * Copyright (C) 2018, Zsombor Hollay-Horvath <hollay.horvath@gmail.com>
Aleksey Nikolaev's avatar
Aleksey Nikolaev committed
6
 * Copyright (C) 2018, Aleksey Nikolaev <nae202@gmail.com>
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
 */

#ifndef POPPLER_PAGE_H
#define POPPLER_PAGE_H

#include "poppler-global.h"
#include "poppler-rectangle.h"

29 30
#include <memory>

31 32 33
namespace poppler
{

34 35 36 37 38
struct text_box_data;
class POPPLER_CPP_EXPORT text_box
{
    friend class page;
public:
Aleksey Nikolaev's avatar
Aleksey Nikolaev committed
39 40
    text_box(text_box&&);
    text_box& operator=(text_box&&);
41 42 43 44 45 46

    ~text_box();

    ustring   text() const;
    rectf     bbox() const;

47 48 49 50 51
    /**
      \since 0.68
    */
    int       rotation() const;

52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
    /**
       Get a bbox for the i-th glyph

       This method returns a rectf of the bounding box for
       the i-th glyph in the text_box.

       \note The text_box object owns the rectf objects,
       the caller is not needed to free them.

       \warning For too large glyph index, rectf(0,0,0,0)
       is returned. The number of the glyphs and ustring
       codepoints might be different in some complex scripts.
     */
    rectf     char_bbox(size_t i) const;
    bool      has_space_after() const;
private:
    text_box(text_box_data *data);

    std::unique_ptr<text_box_data> m_data;
};

73 74 75 76 77 78 79 80 81 82 83 84 85 86
class document;
class document_private;
class page_private;
class page_transition;

class POPPLER_CPP_EXPORT page : public poppler::noncopyable
{
public:
    enum orientation_enum {
        landscape,
        portrait,
        seascape,
        upside_down
    };
Pino Toscano's avatar
Pino Toscano committed
87 88 89 90 91
    enum search_direction_enum {
        search_from_top,
        search_next_result,
        search_previous_result
    };
92 93 94 95
    enum text_layout_enum {
        physical_layout,
        raw_order_layout
    };
96 97 98 99 100 101 102 103 104 105

    ~page();

    orientation_enum orientation() const;
    double duration() const;
    rectf page_rect(page_box_enum box = crop_box) const;
    ustring label() const;

    page_transition* transition() const;

Pino Toscano's avatar
Pino Toscano committed
106 107
    bool search(const ustring &text, rectf &r, search_direction_enum direction,
                case_sensitivity_enum case_sensitivity, rotation_enum rotation = rotate_0) const;
108
    ustring text(const rectf &rect = rectf()) const;
109
    ustring text(const rectf &rect, text_layout_enum layout_mode) const;
Pino Toscano's avatar
Pino Toscano committed
110

111 112 113 114 115 116 117 118 119 120 121
    /**
       Returns a list of text of the page

       This method returns a std::vector of text_box that contain all
       the text of the page, with roughly one text word of text
       per text_box item.

       For text written in western languages (left-to-right and
       up-to-down), the std::vector contains the text in the proper
       order.

Albert Astals Cid's avatar
Albert Astals Cid committed
122 123
       \since 0.63

124 125 126 127 128 129 130
       \note The page object owns the text_box objects as unique_ptr,
             the caller is not needed to free them.

       \warning This method is not tested with Asian scripts
    */
    std::vector<text_box> text_list() const;

131 132 133 134 135 136 137 138 139 140 141
private:
    page(document_private *doc, int index);

    page_private *d;
    friend class page_private;
    friend class document;
};

}

#endif