summaryrefslogtreecommitdiff
path: root/xfa_test/pdf/pdfium/pdfium_page.h
diff options
context:
space:
mode:
Diffstat (limited to 'xfa_test/pdf/pdfium/pdfium_page.h')
-rw-r--r--xfa_test/pdf/pdfium/pdfium_page.h136
1 files changed, 136 insertions, 0 deletions
diff --git a/xfa_test/pdf/pdfium/pdfium_page.h b/xfa_test/pdf/pdfium/pdfium_page.h
new file mode 100644
index 0000000000..22ea142988
--- /dev/null
+++ b/xfa_test/pdf/pdfium/pdfium_page.h
@@ -0,0 +1,136 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PDF_PDFIUM_PDFIUM_PAGE_H_
+#define PDF_PDFIUM_PDFIUM_PAGE_H_
+
+#include <string>
+#include <vector>
+
+#include "base/strings/string16.h"
+#include "ppapi/cpp/rect.h"
+#include "third_party/pdfium/fpdfsdk/include/fpdfdoc.h"
+#include "third_party/pdfium/fpdfsdk/include/fpdfformfill.h"
+#include "third_party/pdfium/fpdfsdk/include/fpdftext.h"
+
+namespace base {
+class Value;
+}
+
+namespace chrome_pdf {
+
+class PDFiumEngine;
+
+// Wrapper around a page from the document.
+class PDFiumPage {
+ public:
+ PDFiumPage(PDFiumEngine* engine,
+ int i,
+ const pp::Rect& r,
+ bool available);
+ ~PDFiumPage();
+ // Unloads the PDFium data for this page from memory.
+ void Unload();
+ // Gets the FPDF_PAGE for this page, loading and parsing it if necessary.
+ FPDF_PAGE GetPage();
+ //Get the FPDF_PAGE for printing.
+ FPDF_PAGE GetPrintPage();
+ //Close the printing page.
+ void ClosePrintPage();
+
+ // Returns FPDF_TEXTPAGE for the page, loading and parsing it if necessary.
+ FPDF_TEXTPAGE GetTextPage();
+
+ // Returns a DictionaryValue version of the page.
+ base::Value* GetAccessibleContentAsValue(int rotation);
+
+ enum Area {
+ NONSELECTABLE_AREA,
+ TEXT_AREA,
+ WEBLINK_AREA, // Area is a hyperlink.
+ DOCLINK_AREA, // Area is a link to a different part of the same document.
+ };
+
+ struct LinkTarget {
+ // We are using std::string here which have a copy contructor.
+ // That prevents us from using union here.
+ std::string url; // Valid for WEBLINK_AREA only.
+ int page; // Valid for DOCLINK_AREA only.
+ };
+
+ // Given a point in the document that's in this page, returns its character
+ // index if it's near a character, and also the type of text.
+ // Target is optional. It will be filled in for WEBLINK_AREA or
+ // DOCLINK_AREA only.
+ Area GetCharIndex(const pp::Point& point, int rotation, int* char_index,
+ LinkTarget* target);
+
+ // Gets the character at the given index.
+ base::char16 GetCharAtIndex(int index);
+
+ // Gets the number of characters in the page.
+ int GetCharCount();
+
+ // Converts from page coordinates to screen coordinates.
+ pp::Rect PageToScreen(const pp::Point& offset,
+ double zoom,
+ double left,
+ double top,
+ double right,
+ double bottom,
+ int rotation);
+
+ int index() const { return index_; }
+ pp::Rect rect() const { return rect_; }
+ void set_rect(const pp::Rect& r) { rect_ = r; }
+ bool available() const { return available_; }
+ void set_available(bool available) { available_ = available; }
+ void set_calculated_links(bool calculated_links) {
+ calculated_links_ = calculated_links;
+ }
+
+ private:
+ // Returns a link index if the given character index is over a link, or -1
+ // otherwise.
+ int GetLink(int char_index, LinkTarget* target);
+ // Returns the link indices if the given rect intersects a link rect, or an
+ // empty vector otherwise.
+ std::vector<int> GetLinks(pp::Rect text_area,
+ std::vector<LinkTarget>* targets);
+ // Calculate the locations of any links on the page.
+ void CalculateLinks();
+ // Returns link type and target associated with a link. Returns
+ // NONSELECTABLE_AREA if link detection failed.
+ Area GetLinkTarget(FPDF_LINK link, LinkTarget* target);
+ // Returns target associated with a destination.
+ Area GetDestinationTarget(FPDF_DEST destination, LinkTarget* target);
+ // Returns the text in the supplied box as a Value Node
+ base::Value* GetTextBoxAsValue(double page_height, double left, double top,
+ double right, double bottom, int rotation);
+ // Helper functions for JSON generation
+ base::Value* CreateTextNode(std::string text);
+ base::Value* CreateURLNode(std::string text, std::string url);
+
+ struct Link {
+ Link();
+ ~Link();
+
+ std::string url;
+ // Bounding rectangles of characters.
+ std::vector<pp::Rect> rects;
+ };
+
+ PDFiumEngine* engine_;
+ FPDF_PAGE page_;
+ FPDF_TEXTPAGE text_page_;
+ int index_;
+ pp::Rect rect_;
+ bool calculated_links_;
+ std::vector<Link> links_;
+ bool available_;
+};
+
+} // namespace chrome_pdf
+
+#endif // PDF_PDFIUM_PDFIUM_PAGE_H_