diff options
Diffstat (limited to 'xfa_test/pdf/pdf.cc')
-rw-r--r-- | xfa_test/pdf/pdf.cc | 275 |
1 files changed, 0 insertions, 275 deletions
diff --git a/xfa_test/pdf/pdf.cc b/xfa_test/pdf/pdf.cc deleted file mode 100644 index 6a4507f4fc..0000000000 --- a/xfa_test/pdf/pdf.cc +++ /dev/null @@ -1,275 +0,0 @@ -// 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. - -#include "pdf/pdf.h" - -#if defined(OS_WIN) -#include <windows.h> -#endif - -#include "base/command_line.h" -#include "base/logging.h" -#include "pdf/instance.h" -#include "pdf/out_of_process_instance.h" -#include "ppapi/c/ppp.h" -#include "ppapi/cpp/private/pdf.h" - -bool g_sdk_initialized_via_pepper = false; - -// The Mac release builds discard CreateModule and the entire PDFModule -// definition because they are not referenced here. This causes the Pepper -// exports (PPP_GetInterface etc) to not be exported. So we force the linker -// to include this code by using __attribute__((used)). -#if __GNUC__ >= 4 -#define PDF_USED __attribute__((used)) -#else -#define PDF_USED -#endif - -#if defined(OS_WIN) -HMODULE g_hmodule; - -void HandleInvalidParameter(const wchar_t* expression, - const wchar_t* function, - const wchar_t* file, - unsigned int line, - uintptr_t reserved) { - // Do the same as Chrome's CHECK(false) which is undefined. - ::base::debug::BreakDebugger(); - return; -} - -void HandlePureVirtualCall() { - // Do the same as Chrome's CHECK(false) which is undefined. - ::base::debug::BreakDebugger(); - return; -} - - -BOOL APIENTRY DllMain(HMODULE module, DWORD reason_for_call, LPVOID reserved) { - g_hmodule = module; - if (reason_for_call == DLL_PROCESS_ATTACH) { - // On windows following handlers work only inside module. So breakpad in - // chrome.dll does not catch that. To avoid linking related code or - // duplication breakpad_win.cc::InitCrashReporter() just catch errors here - // and crash in a way interceptable by breakpad of parent module. - _set_invalid_parameter_handler(HandleInvalidParameter); - _set_purecall_handler(HandlePureVirtualCall); - } - return TRUE; -} - -#endif - -namespace pp { - -PDF_USED Module* CreateModule() { - return new chrome_pdf::PDFModule(); -} - -} // namespace pp - -namespace chrome_pdf { - -PDFModule::PDFModule() { -} - -PDFModule::~PDFModule() { - if (g_sdk_initialized_via_pepper) { - chrome_pdf::ShutdownSDK(); - g_sdk_initialized_via_pepper = false; - } -} - -bool PDFModule::Init() { - return true; -} - -pp::Instance* PDFModule::CreateInstance(PP_Instance instance) { - if (!g_sdk_initialized_via_pepper) { - void* data = NULL; -#if defined(OS_WIN) - data = g_hmodule; -#endif - if (!chrome_pdf::InitializeSDK(data)) - return NULL; - g_sdk_initialized_via_pepper = true; - } - - if (pp::PDF::IsOutOfProcess(pp::InstanceHandle(instance))) - return new OutOfProcessInstance(instance); - return new Instance(instance); -} - -} // namespace chrome_pdf - -extern "C" { - -// TODO(sanjeevr): It might make sense to provide more stateful wrappers over -// the internal PDF SDK (such as LoadDocument, LoadPage etc). Determine if we -// need to provide this. -// Wrapper exports over the PDF engine that can be used by an external module -// such as Chrome (since Chrome cannot directly pull in PDFium sources). -#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. -// |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. -// |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. -// |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. -// |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. -// |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 -// the output bound. -// Returns false if the document or the page number are not valid. -PP_EXPORT bool RenderPDFPageToDC(const void* pdf_buffer, - int buffer_size, - int page_number, - HDC dc, - int dpi_x, - int dpi_y, - int bounds_origin_x, - int bounds_origin_y, - int bounds_width, - int bounds_height, - bool fit_to_bounds, - bool stretch_to_bounds, - bool keep_aspect_ratio, - bool center_in_bounds, - bool autorotate) { - if (!g_sdk_initialized_via_pepper) { - if (!chrome_pdf::InitializeSDK(g_hmodule)) { - return false; - } - } - scoped_ptr<chrome_pdf::PDFEngineExports> engine_exports( - chrome_pdf::PDFEngineExports::Create()); - chrome_pdf::PDFEngineExports::RenderingSettings settings( - dpi_x, dpi_y, pp::Rect(bounds_origin_x, bounds_origin_y, bounds_width, - bounds_height), - fit_to_bounds, stretch_to_bounds, keep_aspect_ratio, center_in_bounds, - autorotate); - bool ret = engine_exports->RenderPDFPageToDC(pdf_buffer, buffer_size, - page_number, settings, dc); - if (!g_sdk_initialized_via_pepper) { - chrome_pdf::ShutdownSDK(); - } - return ret; -} - -#endif // OS_WIN - -// |page_count| and |max_page_width| are optional and can be NULL. -// Returns false if the document is not valid. -PDF_USED PP_EXPORT -bool GetPDFDocInfo(const void* pdf_buffer, - int buffer_size, int* page_count, - double* max_page_width) { - 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->GetPDFDocInfo( - pdf_buffer, buffer_size, page_count, max_page_width); - if (!g_sdk_initialized_via_pepper) { - chrome_pdf::ShutdownSDK(); - } - 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. -// |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. -// |bitmap_height| is the height of the output bitmap. -// |dpi| is the resolutions. -// |autorotate| specifies whether the final image should be rotated to match -// the output bound. -// Returns false if the document or the page number are not valid. -PDF_USED PP_EXPORT -bool RenderPDFPageToBitmap(const void* pdf_buffer, - int pdf_buffer_size, - int page_number, - void* bitmap_buffer, - int bitmap_width, - int bitmap_height, - int dpi, - bool autorotate) { - 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()); - chrome_pdf::PDFEngineExports::RenderingSettings settings( - dpi, dpi, pp::Rect(bitmap_width, bitmap_height), true, false, true, true, - autorotate); - bool ret = engine_exports->RenderPDFPageToBitmap( - pdf_buffer, pdf_buffer_size, page_number, settings, bitmap_buffer); - if (!g_sdk_initialized_via_pepper) { - chrome_pdf::ShutdownSDK(); - } - return ret; -} - -} // extern "C" |