| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef PDF_PDFIUM_PDFIUM_API_WRAPPERS_H_ |
| #define PDF_PDFIUM_PDFIUM_API_WRAPPERS_H_ |
| |
| #include <stdint.h> |
| |
| #include <optional> |
| #include <string> |
| #include <vector> |
| |
| #include "base/containers/span.h" |
| #include "build/build_config.h" |
| #include "pdf/pdf_rect.h" |
| #include "pdf/pdfium/pdfium_engine_exports.h" |
| #include "third_party/pdfium/public/cpp/fpdf_scopers.h" |
| #include "third_party/pdfium/public/fpdf_edit.h" |
| #include "third_party/pdfium/public/fpdfview.h" |
| |
| #if BUILDFLAG(IS_WIN) |
| #include <windows.h> |
| #endif |
| |
| // This file contains wrapper functions that let callers use modern C++ |
| // constructs to interact with PDFium. This is easier than accessing PDFium C |
| // APIs directly. |
| |
| namespace chrome_pdf { |
| |
| // Converts between the two rect types. The returned rect is really the same |
| // instance as the input rect. |
| const FS_RECTF& FsRectFFromPdfRect(const PdfRect& rect); |
| FS_RECTF& FsRectFFromPdfRect(PdfRect& rect); |
| |
| // Same as LoadPdfDataWithPassword(), but without a password. |
| ScopedFPDFDocument LoadPdfData(base::span<const uint8_t> pdf_data); |
| |
| // Wrapper around FPDF_LoadMemDocument64(). `password` can be empty, but it |
| // cannot be a string_view, since it needs to be null-terminated. |
| ScopedFPDFDocument LoadPdfDataWithPassword(base::span<const uint8_t> pdf_data, |
| const std::string& password); |
| |
| // Wrapper around FPDFAnnot_GetRect(). Returns the bounds for `annot`, or |
| // std::nullopt on failure. |
| std::optional<PdfRect> GetAnnotRect(FPDF_ANNOTATION annot); |
| |
| // Wrapper around FPDF_GetPageBoundingBox(). Returns the bounds for `page`, or |
| // std::nullopt on failure. |
| std::optional<PdfRect> GetPageBoundingBox(FPDF_PAGE page); |
| |
| // Wrapper around FPDFPageObj_GetBounds(). Returns the bounds for `page_object`, |
| // or std::nullopt on failure. |
| std::optional<PdfRect> GetPageObjectBounds(FPDF_PAGEOBJECT page_object); |
| |
| // Wrapper around FPDFPageObjMark_GetName(). |
| // Returns the name of `mark`, or an empty string on failure. |
| std::u16string GetPageObjectMarkName(FPDF_PAGEOBJECTMARK mark); |
| |
| // Wrapper around FPDFPageObjMark_GetParamIntValue(). |
| // Returns the value of the parameter with `key` in `mark`, or std::nullopt on |
| // failure. |
| std::optional<int> GetPageObjectMarkIntParam(FPDF_PAGEOBJECTMARK mark, |
| const std::string& key); |
| |
| // Wrapper around FPDFPageObjMark_GetParamFloatValue(). |
| // Returns the value of the parameter with `key` in `mark`, or std::nullopt on |
| // failure. |
| std::optional<float> GetPageObjectMarkFloatParam(FPDF_PAGEOBJECTMARK mark, |
| const std::string& key); |
| |
| // Wrapper around FPDFPageObjMark_GetParamStringValue(). |
| // Returns the value of the parameter with `key` in `mark`, or std::nullopt on |
| // failure. |
| std::optional<std::u16string> GetPageObjectMarkStringParam( |
| FPDF_PAGEOBJECTMARK mark, |
| const std::string& key); |
| |
| // Wrapper around FPDFPageObjMark_GetParamBlobValue(). |
| // Returns the value of the parameter with `key` in `mark`, or std::nullopt on |
| // failure. |
| std::optional<std::vector<unsigned char>> GetPageObjectMarkBlobParam( |
| FPDF_PAGEOBJECTMARK mark, |
| const std::string& key); |
| |
| // Wrapper around FPDFText_GetCharBox(). Returns the bounds for text at `index` |
| // in `text_page`, or std::nullopt on failure. |
| std::optional<PdfRect> GetTextCharBox(FPDF_TEXTPAGE text_page, int index); |
| |
| // Wrapper around FPDF_RenderPageBitmap(). |
| // Renders `page` using `settings` into `bitmap_buffer`. Returns whether |
| // rendering succeeded or not. |
| bool RenderPageToBitmap(FPDF_PAGE page, |
| const PDFiumEngineExports::RenderingSettings& settings, |
| void* bitmap_buffer); |
| |
| #if BUILDFLAG(IS_WIN) |
| // Wrapper around FPDF_RenderPageBitmap(). |
| // Similar to RenderPageToBitmap(), but renders into `dc` instead. |
| bool RenderPageToDC(FPDF_PAGE page, |
| const PDFiumEngineExports::RenderingSettings& settings, |
| HDC dc); |
| #endif |
| |
| // Retrieves the language of the PDF document using FPDFCatalog_GetLanguage(). |
| // Returns an empty std::string if the language is not specified. |
| std::string GetDocumentLanguage(FPDF_DOCUMENT document); |
| |
| } // namespace chrome_pdf |
| |
| #endif // PDF_PDFIUM_PDFIUM_API_WRAPPERS_H_ |