7#include "public/fpdf_edit.h"
14#include "constants/page_object.h"
15#include "core/fpdfapi/edit/cpdf_pagecontentgenerator.h"
16#include "core/fpdfapi/page/cpdf_colorspace.h"
17#include "core/fpdfapi/page/cpdf_docpagedata.h"
18#include "core/fpdfapi/page/cpdf_form.h"
19#include "core/fpdfapi/page/cpdf_formobject.h"
20#include "core/fpdfapi/page/cpdf_imageobject.h"
21#include "core/fpdfapi/page/cpdf_page.h"
22#include "core/fpdfapi/page/cpdf_pageimagecache.h"
23#include "core/fpdfapi/page/cpdf_pageobject.h"
24#include "core/fpdfapi/page/cpdf_pathobject.h"
25#include "core/fpdfapi/page/cpdf_shadingobject.h"
26#include "core/fpdfapi/page/cpdf_textobject.h"
27#include "core/fpdfapi/parser/cpdf_array.h"
28#include "core/fpdfapi/parser/cpdf_dictionary.h"
29#include "core/fpdfapi/parser/cpdf_document.h"
30#include "core/fpdfapi/parser/cpdf_name.h"
31#include "core/fpdfapi/parser/cpdf_number.h"
32#include "core/fpdfapi/parser/cpdf_string.h"
33#include "core/fpdfapi/render/cpdf_docrenderdata.h"
34#include "core/fpdfdoc/cpdf_annot.h"
35#include "core/fpdfdoc/cpdf_annotlist.h"
36#include "core/fxcrt/fx_extension.h"
37#include "core/fxcrt/fx_memcpy_wrappers.h"
38#include "core/fxcrt/stl_util.h"
39#include "fpdfsdk/cpdfsdk_helpers.h"
40#include "public/fpdf_formfill.h"
41#include "third_party/base/containers/span.h"
42#include "third_party/base/numerics/safe_conversions.h"
45#include "fpdfsdk/fpdfxfa/cpdfxfa_context.h"
46#include "fpdfsdk/fpdfxfa/cpdfxfa_page.h"
53 "FPDF_PAGEOBJ_TEXT/CPDF_PageObject::TEXT mismatch");
56 "FPDF_PAGEOBJ_PATH/CPDF_PageObject::PATH mismatch");
59 "FPDF_PAGEOBJ_IMAGE/CPDF_PageObject::IMAGE mismatch");
62 "FPDF_PAGEOBJ_SHADING/CPDF_PageObject::SHADING mismatch");
65 "FPDF_PAGEOBJ_FORM/CPDF_PageObject::FORM mismatch");
67bool IsPageObject(CPDF_Page* pPage) {
71 RetainPtr<
const CPDF_Dictionary> pFormDict = pPage->GetDict();
76 ToName(pFormDict->GetObjectFor(pdfium::page_object::kType)->GetDirect());
77 return pName && pName->GetString() ==
"Page";
86 CPDF_PathObject* pPathObj = pPageObj
->AsPath();
101 CPDF_FormObject* pFormObj = pPageObj
->AsForm();
108RetainPtr<CPDF_Dictionary> GetMarkParamDict(FPDF_PAGEOBJECTMARK mark) {
109 CPDF_ContentMarkItem* pMarkItem =
111 return pMarkItem ? pMarkItem
->GetParam() :
nullptr;
114RetainPtr<CPDF_Dictionary> GetOrCreateMarkParamsDict(FPDF_DOCUMENT document,
115 FPDF_PAGEOBJECTMARK mark) {
120 CPDF_ContentMarkItem* pMarkItem =
125 RetainPtr<CPDF_Dictionary> pParams = pMarkItem->GetParam();
127 pParams = pDoc->New<CPDF_Dictionary>();
134 FPDF_PAGEOBJECTMARK mark) {
135 const CPDF_ContentMarkItem* pMarkItem =
140CPDF_FormObject* CPDFFormObjectFromFPDFPageObject(FPDF_PAGEOBJECT page_object) {
142 return pPageObj ? pPageObj
->AsForm() :
nullptr;
146 FPDF_PAGEOBJECT page_object) {
147 CPDF_FormObject* pFormObject = CPDFFormObjectFromFPDFPageObject(page_object);
148 return pFormObject ? pFormObject
->form() :
nullptr;
156 std::make_unique<CPDF_DocPageData>());
157 pDoc->CreateNewDoc();
166 "D:%04d%02d%02d%02d%02d%02d", pTM->tm_year + 1900
, pTM->tm_mon + 1
,
167 pTM->tm_mday
, pTM->tm_hour
, pTM->tm_min
, pTM->tm_sec
);
172 RetainPtr<CPDF_Dictionary> pInfoDict = pDoc->GetInfo();
175 pInfoDict->SetNewFor<CPDF_String>(
"CreationDate", DateStr,
false);
176 pInfoDict->SetNewFor<CPDF_String>(
"Creator", L"PDFium");
180 return FPDFDocumentFromCPDFDocument(pDoc.release());
200 const int* page_indices,
201 unsigned long page_indices_len,
202 int dest_page_index) {
208 return doc
->MovePages({page_indices, page_indices_len}, dest_page_index);
220 RetainPtr<CPDF_Dictionary> pPageDict(pDoc->CreateNewPage(page_index));
230 if (pDoc->GetExtension()) {
231 auto pXFAPage = pdfium::MakeRetain<CPDFXFA_Page>(pDoc, page_index);
232 pXFAPage->LoadPDFPageFromDict(pPageDict);
233 return FPDFPageFromIPDFPage(pXFAPage.Leak());
237 auto pPage = pdfium::MakeRetain<CPDF_Page>(pDoc, pPageDict);
238 pPage->AddPageImageCache();
239 pPage->ParseContent();
241 return FPDFPageFromIPDFPage(pPage.Leak());
255 std::unique_ptr<CPDF_PageObject> pPageObjHolder(pPageObj);
257 if (!IsPageObject(pPage))
261 pPage->AppendPageObject(
std::move(pPageObjHolder));
262 CalcBoundingBox(pPageObj);
272 if (!IsPageObject(pPage))
276 return !!pPage->RemovePageObject(pPageObj).release();
281 if (!IsPageObject(pPage))
284 return pdfium::base::checked_cast<
int>(pPage->GetPageObjectCount());
290 if (!IsPageObject(pPage))
293 return FPDFPageObjectFromCPDFPageObject(pPage->GetPageObjectByIndex(index));
312 return pdfium::base::checked_cast<
int>(
323 if (index >= pMarks->CountItems())
326 return FPDFPageObjectMarkFromCPDFContentMarkItem(pMarks->GetItem(index));
339 const size_t index = pMarks->CountItems() - 1;
340 return FPDFPageObjectMarkFromCPDFContentMarkItem(pMarks->GetItem(index));
346 CPDF_ContentMarkItem* pMarkItem =
348 if (!pPageObj || !pMarkItem)
361 unsigned long buflen,
362 unsigned long* out_buflen) {
363 const CPDF_ContentMarkItem* pMarkItem =
365 if (!pMarkItem || !out_buflen)
368 *out_buflen = Utf16EncodeMaybeCopyAndReturnLength(
376 const CPDF_ContentMarkItem* pMarkItem =
381 RetainPtr<
const CPDF_Dictionary> pParams = pMarkItem->GetParam();
382 return pParams ?
fxcrt::CollectionSize<
int>(*pParams) : 0;
389 unsigned long buflen,
390 unsigned long* out_buflen) {
394 RetainPtr<
const CPDF_Dictionary> pParams = GetMarkParamDict(mark);
399 for (
auto& it : locker) {
401 *out_buflen = Utf16EncodeMaybeCopyAndReturnLength(
402 WideString::FromUTF8(it.first.AsStringView()), buffer, buflen);
413 FPDF_BYTESTRING key) {
414 RetainPtr<
const CPDF_Dictionary> pParams = GetMarkParamDict(mark);
429 RetainPtr<
const CPDF_Dictionary> pParams = GetMarkParamDict(mark);
434 if (!pObj || !pObj->IsNumber())
437 *out_value = pObj->GetInteger();
445 unsigned long buflen,
446 unsigned long* out_buflen) {
450 RetainPtr<
const CPDF_Dictionary> pParams = GetMarkParamDict(mark);
455 if (!pObj || !pObj->IsString())
458 *out_buflen = Utf16EncodeMaybeCopyAndReturnLength(
459 WideString
::FromUTF8(pObj->GetString().AsStringView()
), buffer, buflen);
467 unsigned long buflen,
468 unsigned long* out_buflen) {
472 RetainPtr<
const CPDF_Dictionary> pParams = GetMarkParamDict(mark);
477 if (!pObj || !pObj->IsString())
480 ByteString result = pObj->GetString();
481 const unsigned long len =
482 pdfium::base::checked_cast<
unsigned long>(result.GetLength());
484 if (buffer && len <= buflen)
485 memcpy(buffer, result
.c_str(), len);
525 FPDF_PAGEOBJECT page_object,
526 FPDF_PAGEOBJECTMARK mark,
530 if (!pPageObj || !PageObjectContainsMark(pPageObj, mark))
534 GetOrCreateMarkParamsDict(document, mark);
538 pParams->SetNewFor<CPDF_Number>(key, value);
545 FPDF_PAGEOBJECT page_object,
546 FPDF_PAGEOBJECTMARK mark,
548 FPDF_BYTESTRING value) {
550 if (!pPageObj || !PageObjectContainsMark(pPageObj, mark))
554 GetOrCreateMarkParamsDict(document, mark);
558 pParams->SetNewFor<CPDF_String>(key, value,
false);
565 FPDF_PAGEOBJECT page_object,
566 FPDF_PAGEOBJECTMARK mark,
569 unsigned long value_len) {
571 if (!pPageObj || !PageObjectContainsMark(pPageObj, mark))
575 GetOrCreateMarkParamsDict(document, mark);
579 if (!value && value_len > 0)
582 pParams->SetNewFor<CPDF_String>(
583 key, ByteString(
static_cast<
const char*>(value), value_len),
true);
590 FPDF_PAGEOBJECTMARK mark,
591 FPDF_BYTESTRING key) {
596 RetainPtr<CPDF_Dictionary> pParams = GetMarkParamDict(mark);
600 auto removed = pParams->RemoveFor(key);
610 return pPageObj ?
static_cast<
int>(pPageObj
->GetType())
616 if (!IsPageObject(pPage))
643 if (!pPageObj || !matrix)
667 if (!pPageObj || !matrix)
693 FPDF_BYTESTRING blend_mode) {
713 CPDF_AnnotList AnnotList
(pPage
);
714 for (size_t i = 0; i < AnnotList.Count(); ++i) {
720 RetainPtr<CPDF_Dictionary> pAnnotDict = pAnnot->GetMutableAnnotDict();
721 RetainPtr<CPDF_Array> pRectArray = pAnnotDict->GetMutableArrayFor(
"Rect");
725 pRectArray = pAnnotDict->SetNewFor<CPDF_Array>(
"Rect");
727 pRectArray->AppendNew<CPDF_Number>(rect
.left);
728 pRectArray->AppendNew<CPDF_Number>(rect
.bottom);
729 pRectArray->AppendNew<CPDF_Number>(rect
.right);
730 pRectArray->AppendNew<CPDF_Number>(rect
.top);
739 if (!IsPageObject(pPage))
754 if (!pPageObj || R > 255 || G > 255 || B > 255 || A > 255)
757 std::vector<
float> rgb = {R / 255.f, G / 255.f, B / 255.f};
773 if (!pPageObj || !R || !G || !B || !A)
808 FS_QUADPOINTSF* quad_points) {
810 if (!cpage_object || !quad_points)
827 const CFX_PointF bottom_left = matrix.Transform({bbox.left, bbox.bottom});
828 const CFX_PointF bottom_right = matrix.Transform({bbox.right, bbox.bottom});
829 const CFX_PointF top_right = matrix.Transform({bbox.right, bbox.top});
830 const CFX_PointF top_left = matrix.Transform({bbox.left, bbox.top});
833 quad_points->x1 = bottom_left.x;
834 quad_points->y1 = bottom_left.y;
835 quad_points->x2 = bottom_right.x;
836 quad_points->y2 = bottom_right.y;
837 quad_points->x3 = top_right.x;
838 quad_points->y3 = top_right.y;
839 quad_points->x4 = top_left.x;
840 quad_points->y4 = top_left.y;
851 if (!pPageObj || R > 255 || G > 255 || B > 255 || A > 255)
854 std::vector<
float> rgb = {R / 255.f, G / 255.f, B / 255.f};
870 if (!pPageObj || !R || !G || !B || !A) {
888 if (!pPageObj || width < 0.0f)
899 if (!pPageObj || !width)
953 if (!pPageObj || !phase)
974 return pPageObj ? pdfium::base::checked_cast<
int>(
984 if (!pPageObj || !dash_array)
988 if (dash_vector.size() > dash_count)
991 FXSYS_memcpy(dash_array, dash_vector.data(),
992 dash_vector.size() *
sizeof(
float));
998 const float* dash_array,
1001 if (dash_count > 0 && !dash_array)
1008 std::vector<
float> dashes;
1009 if (dash_count > 0) {
1010 dashes.reserve(dash_count);
1011 dashes.assign(dash_array, dash_array + dash_count);
1022 const auto* pObjectList = CPDFPageObjHolderFromFPDFFormObject(form_object);
1023 return pObjectList ? pdfium::base::checked_cast<
int>(
1024 pObjectList->GetPageObjectCount())
1030 const auto* pObjectList = CPDFPageObjHolderFromFPDFFormObject(form_object);
1034 return FPDFPageObjectFromCPDFPageObject(
1035 pObjectList->GetPageObjectByIndex(index));
constexpr CFX_FloatRect(float l, float b, float r, float t)
float GetLineDashPhase() const
void SetLineWidth(float width)
void SetLineJoin(CFX_GraphStateData::LineJoin join)
void SetLineDashPhase(float phase)
float GetLineWidth() const
CFX_GraphStateData::LineCap GetLineCap() const
CFX_GraphStateData::LineJoin GetLineJoin() const
void SetLineCap(CFX_GraphStateData::LineCap cap)
CFX_Matrix & operator=(const CFX_Matrix &other)=default
CFX_FloatRect TransformRect(const CFX_FloatRect &rect) const
CFX_Matrix(float a1, float b1, float c1, float d1, float e1, float f1)
CPDF_AnnotList(CPDF_Page *pPage)
CFX_FloatRect GetRect() const
static RetainPtr< CPDF_ColorSpace > GetStockCS(Family family)
FX_COLORREF GetStrokeColorRef() const
FX_COLORREF GetFillColorRef() const
const ByteString & GetName() const
RetainPtr< CPDF_Dictionary > GetParam()
void SetDirectDict(RetainPtr< CPDF_Dictionary > pDict)
bool RemoveMark(CPDF_ContentMarkItem *pMarkItem)
bool ContainsItem(const CPDF_ContentMarkItem *pItem) const
void AddMark(ByteString name)
virtual void DeletePage(int page_index)=0
void DeletePage(int iPage)
bool MovePages(pdfium::span< const int > page_indices, int dest_page_index)
Extension * GetExtension() const
float GetStrokeAlpha() const
float GetFillAlpha() const
void SetFillAlpha(float alpha)
void SetStrokeAlpha(float alpha)
BlendMode GetBlendType() const
void SetBlendMode(const ByteString &mode)
RetainPtr< const CPDF_Dictionary > GetSoftMask() const
void SetImageMatrix(const CFX_Matrix &matrix)
const CFX_Matrix & matrix() const
bool BackgroundAlphaNeeded() const
const CPDF_Transparency & GetTransparency() const
virtual void Transform(const CFX_Matrix &matrix)=0
const CFX_FloatRect & GetOriginalRect() const
const CPDF_ColorState & color_state() const
void SetDirty(bool value)
const CPDF_GeneralState & general_state() const
virtual Type GetType() const =0
CPDF_GeneralState & mutable_general_state()
virtual CPDF_ShadingObject * AsShading()
const CFX_FloatRect & GetRect() const
virtual CPDF_ImageObject * AsImage()
CPDF_ContentMarks * GetContentMarks()
virtual CPDF_FormObject * AsForm()
virtual CPDF_TextObject * AsText()
virtual CPDF_PathObject * AsPath()
const CFX_GraphState & graph_state() const
virtual bool IsForm() const
CFX_GraphState & mutable_graph_state()
virtual bool IsPath() const
CPDF_ColorState & mutable_color_state()
int GetPageRotation() const
void SetPathMatrix(const CFX_Matrix &matrix)
const CFX_Matrix & matrix() const
CFX_Matrix GetTextMatrix() const
void SetTextMatrix(const CFX_Matrix &matrix)
static ByteString Format(const char *pFormat,...)
const char * c_str() const
ByteString & operator=(ByteString &&that) noexcept
static WideString FromUTF8(ByteStringView str)
FPDF_BOOL IsPDFSandboxPolicyEnabled(FPDF_DWORD policy)
CPDF_ContentMarkItem * CPDFContentMarkItemFromFPDFPageObjectMark(FPDF_PAGEOBJECTMARK mark)
FS_MATRIX FSMatrixFromCFXMatrix(const CFX_Matrix &matrix)
CPDF_Page * CPDFPageFromFPDFPage(FPDF_PAGE page)
CPDF_Document * CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc)
CPDF_PageObject * CPDFPageObjectFromFPDFPageObject(FPDF_PAGEOBJECT page_object)
CFX_Matrix CFXMatrixFromFSMatrix(const FS_MATRIX &matrix)
#define FPDF_LINECAP_BUTT
FPDF_EXPORT int FPDF_CALLCONV FPDFPage_GetRotation(FPDF_PAGE page)
FPDF_EXPORT int FPDF_CALLCONV FPDFFormObj_CountObjects(FPDF_PAGEOBJECT form_object)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_SetStrokeColor(FPDF_PAGEOBJECT page_object, unsigned int R, unsigned int G, unsigned int B, unsigned int A)
FPDF_EXPORT int FPDF_CALLCONV FPDFPageObj_GetLineCap(FPDF_PAGEOBJECT page_object)
#define FPDF_PAGEOBJ_UNKNOWN
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDF_MovePages(FPDF_DOCUMENT document, const int *page_indices, unsigned long page_indices_len, int dest_page_index)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObjMark_GetParamKey(FPDF_PAGEOBJECTMARK mark, unsigned long index, void *buffer, unsigned long buflen, unsigned long *out_buflen)
FPDF_EXPORT int FPDF_CALLCONV FPDFPageObj_GetDashCount(FPDF_PAGEOBJECT page_object)
FPDF_EXPORT FPDF_PAGE FPDF_CALLCONV FPDFPage_New(FPDF_DOCUMENT document, int page_index, double width, double height)
FPDF_EXPORT void FPDF_CALLCONV FPDFPage_InsertObject(FPDF_PAGE page, FPDF_PAGEOBJECT page_object)
FPDF_EXPORT void FPDF_CALLCONV FPDFPage_SetRotation(FPDF_PAGE page, int rotate)
FPDF_EXPORT FPDF_DOCUMENT FPDF_CALLCONV FPDF_CreateNewDocument()
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_SetFillColor(FPDF_PAGEOBJECT page_object, unsigned int R, unsigned int G, unsigned int B, unsigned int A)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetDashPhase(FPDF_PAGEOBJECT page_object, float *phase)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_HasTransparency(FPDF_PAGE page)
#define FPDF_LINEJOIN_MITER
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetRotatedBounds(FPDF_PAGEOBJECT page_object, FS_QUADPOINTSF *quad_points)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetFillColor(FPDF_PAGEOBJECT page_object, unsigned int *R, unsigned int *G, unsigned int *B, unsigned int *A)
FPDF_EXPORT int FPDF_CALLCONV FPDFPageObjMark_CountParams(FPDF_PAGEOBJECTMARK mark)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_RemoveMark(FPDF_PAGEOBJECT page_object, FPDF_PAGEOBJECTMARK mark)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObjMark_SetIntParam(FPDF_DOCUMENT document, FPDF_PAGEOBJECT page_object, FPDF_PAGEOBJECTMARK mark, FPDF_BYTESTRING key, int value)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObjMark_GetParamStringValue(FPDF_PAGEOBJECTMARK mark, FPDF_BYTESTRING key, void *buffer, unsigned long buflen, unsigned long *out_buflen)
FPDF_EXPORT int FPDF_CALLCONV FPDFPageObj_CountMarks(FPDF_PAGEOBJECT page_object)
#define FPDF_LINECAP_PROJECTING_SQUARE
FPDF_EXPORT void FPDF_CALLCONV FPDFPage_TransformAnnots(FPDF_PAGE page, double a, double b, double c, double d, double e, double f)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_RemoveObject(FPDF_PAGE page, FPDF_PAGEOBJECT page_object)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObjMark_GetParamBlobValue(FPDF_PAGEOBJECTMARK mark, FPDF_BYTESTRING key, void *buffer, unsigned long buflen, unsigned long *out_buflen)
FPDF_EXPORT int FPDF_CALLCONV FPDFPageObj_GetLineJoin(FPDF_PAGEOBJECT page_object)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObjMark_RemoveParam(FPDF_PAGEOBJECT page_object, FPDF_PAGEOBJECTMARK mark, FPDF_BYTESTRING key)
FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPage_GetObject(FPDF_PAGE page, int index)
FPDF_EXPORT FPDF_OBJECT_TYPE FPDF_CALLCONV FPDFPageObjMark_GetParamValueType(FPDF_PAGEOBJECTMARK mark, FPDF_BYTESTRING key)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObjMark_GetParamIntValue(FPDF_PAGEOBJECTMARK mark, FPDF_BYTESTRING key, int *out_value)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_SetLineJoin(FPDF_PAGEOBJECT page_object, int line_join)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_SetLineCap(FPDF_PAGEOBJECT page_object, int line_cap)
FPDF_EXPORT int FPDF_CALLCONV FPDFPageObj_GetType(FPDF_PAGEOBJECT page_object)
#define FPDF_PAGEOBJ_PATH
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObjMark_SetStringParam(FPDF_DOCUMENT document, FPDF_PAGEOBJECT page_object, FPDF_PAGEOBJECTMARK mark, FPDF_BYTESTRING key, FPDF_BYTESTRING value)
#define FPDF_PAGEOBJ_TEXT
#define FPDF_PAGEOBJ_SHADING
#define FPDF_PAGEOBJ_IMAGE
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObjMark_SetBlobParam(FPDF_DOCUMENT document, FPDF_PAGEOBJECT page_object, FPDF_PAGEOBJECTMARK mark, FPDF_BYTESTRING key, void *value, unsigned long value_len)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetBounds(FPDF_PAGEOBJECT page_object, float *left, float *bottom, float *right, float *top)
FPDF_EXPORT FPDF_PAGEOBJECTMARK FPDF_CALLCONV FPDFPageObj_GetMark(FPDF_PAGEOBJECT page_object, unsigned long index)
FPDF_EXPORT void FPDF_CALLCONV FPDFPage_Delete(FPDF_DOCUMENT document, int page_index)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetStrokeWidth(FPDF_PAGEOBJECT page_object, float *width)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_SetMatrix(FPDF_PAGEOBJECT page_object, const FS_MATRIX *matrix)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_SetDashPhase(FPDF_PAGEOBJECT page_object, float phase)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_SetStrokeWidth(FPDF_PAGEOBJECT page_object, float width)
#define FPDF_LINEJOIN_BEVEL
#define FPDF_PAGEOBJ_FORM
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT page_object)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GenerateContent(FPDF_PAGE page)
FPDF_EXPORT int FPDF_CALLCONV FPDFPage_CountObjects(FPDF_PAGE page)
FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFFormObj_GetObject(FPDF_PAGEOBJECT form_object, unsigned long index)
FPDF_EXPORT FPDF_PAGEOBJECTMARK FPDF_CALLCONV FPDFPageObj_AddMark(FPDF_PAGEOBJECT page_object, FPDF_BYTESTRING name)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObjMark_GetName(FPDF_PAGEOBJECTMARK mark, void *buffer, unsigned long buflen, unsigned long *out_buflen)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetMatrix(FPDF_PAGEOBJECT page_object, FS_MATRIX *matrix)
FPDF_EXPORT void FPDF_CALLCONV FPDFPageObj_SetBlendMode(FPDF_PAGEOBJECT page_object, FPDF_BYTESTRING blend_mode)
FPDF_EXPORT void FPDF_CALLCONV FPDFPageObj_Transform(FPDF_PAGEOBJECT page_object, double a, double b, double c, double d, double e, double f)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetStrokeColor(FPDF_PAGEOBJECT page_object, unsigned int *R, unsigned int *G, unsigned int *B, unsigned int *A)
FPDF_EXPORT void FPDF_CALLCONV FPDFPageObj_Destroy(FPDF_PAGEOBJECT page_object)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_SetDashArray(FPDF_PAGEOBJECT page_object, const float *dash_array, size_t dash_count, float phase)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetDashArray(FPDF_PAGEOBJECT page_object, float *dash_array, size_t dash_count)
#define FPDF_POLICY_MACHINETIME_ACCESS
#define FPDF_OBJECT_UNKNOWN
constexpr uint8_t FXSYS_GetRValue(uint32_t bgr)
constexpr unsigned int FXSYS_GetUnsignedAlpha(float alpha)
constexpr uint8_t FXSYS_GetGValue(uint32_t bgr)
constexpr uint8_t FXSYS_GetBValue(uint32_t bgr)
time_t FXSYS_time(time_t *tloc)
struct tm * FXSYS_localtime(const time_t *tp)