Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / pdf / pdf.cc
index a4997a5..6a4507f 100644 (file)
@@ -114,25 +114,26 @@ extern "C" {
 #if defined(OS_WIN)
 // |pdf_buffer| is the buffer that contains the entire PDF document to be
 //     rendered.
-// |buffer_size| is the size of pdf_buffer in bytes.
+// |buffer_size| is the size of |pdf_buffer| in bytes.
 // |page_number| is the 0-based index of the page to be rendered.
 // |dc| is the device context to render into.
-// |dpi_x| and |dpi_y| are the x and y resolutions respectively. If either value
-//     is -1, the dpi from the DC will be used.
+// |dpi_x| and |dpi_y| are the x and y resolutions respectively. If either
+//     value is -1, the dpi from the DC will be used.
 // |bounds_origin_x|, |bounds_origin_y|, |bounds_width| and |bounds_height|
-//     specify a bounds rectangle within the DC in which to render the PDF page.
+//     specify a bounds rectangle within the DC in which to render the PDF
+//     page.
 // |fit_to_bounds| specifies whether the output should be shrunk to fit the
 //     supplied bounds if the page size is larger than the bounds in any
-//     dimension. If this is false, parts of the PDF page that lie outside the
-//     bounds will be clipped.
+//     dimension. If this is false, parts of the PDF page that lie outside
+//     the bounds will be clipped.
 // |stretch_to_bounds| specifies whether the output should be stretched to fit
 //     the supplied bounds if the page size is smaller than the bounds in any
 //     dimension.
 // If both |fit_to_bounds| and |stretch_to_bounds| are true, then
 //     |fit_to_bounds| is honored first.
-// |keep_aspect_ratio| If any scaling is to be done is true, this flag specifies
-//     whether the original aspect ratio of the page should be preserved while
-//     scaling.
+// |keep_aspect_ratio| If any scaling is to be done is true, this flag
+//     specifies whether the original aspect ratio of the page should be
+//     preserved while scaling.
 // |center_in_bounds| specifies whether the final image (after any scaling is
 //     done) should be centered within the given bounds.
 // |autorotate| specifies whether the final image should be rotated to match
@@ -199,10 +200,40 @@ bool GetPDFDocInfo(const void* pdf_buffer,
   return ret;
 }
 
+// Gets the dimensions of a specific page in a document.
+// |pdf_buffer| is the buffer that contains the entire PDF document to be
+//     rendered.
+// |pdf_buffer_size| is the size of |pdf_buffer| in bytes.
+// |page_number| is the page number that the function will get the dimensions
+//     of.
+// |width| is the output for the width of the page in points.
+// |height| is the output for the height of the page in points.
+// Returns false if the document or the page number are not valid.
+PDF_USED PP_EXPORT
+bool GetPDFPageSizeByIndex(const void* pdf_buffer,
+                           int pdf_buffer_size, int page_number,
+                           double* width, double* height) {
+  if (!g_sdk_initialized_via_pepper) {
+    void* data = NULL;
+#if defined(OS_WIN)
+    data = g_hmodule;
+#endif
+    if (!chrome_pdf::InitializeSDK(data))
+      return false;
+  }
+  scoped_ptr<chrome_pdf::PDFEngineExports> engine_exports(
+      chrome_pdf::PDFEngineExports::Create());
+  bool ret = engine_exports->GetPDFPageSizeByIndex(
+      pdf_buffer, pdf_buffer_size, page_number, width, height);
+  if (!g_sdk_initialized_via_pepper)
+    chrome_pdf::ShutdownSDK();
+  return ret;
+}
+
 // Renders PDF page into 4-byte per pixel BGRA color bitmap.
 // |pdf_buffer| is the buffer that contains the entire PDF document to be
 //     rendered.
-// |pdf_buffer_size| is the size of pdf_buffer in bytes.
+// |pdf_buffer_size| is the size of |pdf_buffer| in bytes.
 // |page_number| is the 0-based index of the page to be rendered.
 // |bitmap_buffer| is the output buffer for bitmap.
 // |bitmap_width| is the width of the output bitmap.