7#ifndef FPDFSDK_CPDFSDK_HELPERS_H_
8#define FPDFSDK_CPDFSDK_HELPERS_H_
12#include "build/build_config.h"
13#include "core/fpdfapi/page/cpdf_page.h"
14#include "core/fpdfapi/parser/cpdf_parser.h"
15#include "core/fxcrt/compiler_specific.h"
16#include "core/fxcrt/numerics/safe_conversions.h"
17#include "core/fxcrt/retain_ptr.h"
18#include "core/fxcrt/span.h"
19#include "core/fxge/cfx_path.h"
20#include "core/fxge/dib/fx_dib.h"
21#include "public/fpdf_doc.h"
22#include "public/fpdf_ext.h"
23#include "public/fpdfview.h"
26#include "core/fxcrt/fx_stream.h"
33class CPDF_ContentMarkItem;
40class CPDF_StructElement;
44class CPDFSDK_FormFillEnvironment;
45class CPDFSDK_InteractiveForm;
49#if defined(PDF_USE_SKIA)
62 return reinterpret_cast<FPDF_ACTION>(
const_cast<
CPDF_Dictionary*>(action));
70 return reinterpret_cast<FPDF_ANNOTATION>(annot);
73 FPDF_ANNOTATION annot) {
78 return reinterpret_cast<FPDF_ATTACHMENT>(attachment);
85 return reinterpret_cast<FPDF_BITMAP>(bitmap);
88 return reinterpret_cast<CFX_DIBitmap*>(bitmap);
91#if defined(PDF_USE_SKIA)
92inline FPDF_SKIA_CANVAS FPDFSkiaCanvasFromSkCanvas(SkCanvas* canvas) {
93 return reinterpret_cast<FPDF_SKIA_CANVAS>(canvas);
95inline SkCanvas* SkCanvasFromFPDFSkiaCanvas(FPDF_SKIA_CANVAS canvas) {
96 return reinterpret_cast<SkCanvas*>(canvas);
102 return reinterpret_cast<FPDF_BOOKMARK>(
110 return reinterpret_cast<FPDF_CLIPPATH>(path);
117 return reinterpret_cast<FPDF_DEST>(
const_cast<
CPDF_Array*>(dest));
124 return reinterpret_cast<FPDF_FONT>(font);
127 return reinterpret_cast<
CPDF_Font*>(font);
132 return reinterpret_cast<FPDF_JAVASCRIPT_ACTION>(javascript);
135 FPDF_JAVASCRIPT_ACTION javascript) {
140 return reinterpret_cast<FPDF_LINK>(link);
147 return reinterpret_cast<FPDF_PAGELINK>(link);
155 return reinterpret_cast<FPDF_PAGEOBJECT>(page_object);
158 FPDF_PAGEOBJECT page_object) {
163 CPDF_ContentMarkItem* mark) {
164 return reinterpret_cast<FPDF_PAGEOBJECTMARK>(mark);
167 FPDF_PAGEOBJECTMARK mark) {
168 return reinterpret_cast<CPDF_ContentMarkItem*>(mark);
172 return reinterpret_cast<FPDF_PAGERANGE>(range);
175 return reinterpret_cast<
const CPDF_Array*>(range);
180 return reinterpret_cast<FPDF_PATHSEGMENT>(segment);
183 FPDF_PATHSEGMENT segment) {
189 return reinterpret_cast<FPDF_STRUCTTREE>(struct_tree);
192 FPDF_STRUCTTREE struct_tree) {
197 CPDF_StructElement* struct_element) {
198 return reinterpret_cast<FPDF_STRUCTELEMENT>(struct_element);
201 FPDF_STRUCTELEMENT struct_element) {
202 return reinterpret_cast<CPDF_StructElement*>(struct_element);
207 return reinterpret_cast<FPDF_STRUCTELEMENT_ATTR>(dictionary);
210 FPDF_STRUCTELEMENT_ATTR struct_element_attr) {
216 return reinterpret_cast<FPDF_STRUCTELEMENT_ATTR_VALUE>(object);
219 FPDF_STRUCTELEMENT_ATTR_VALUE struct_element_attr_value) {
220 return reinterpret_cast<
const CPDF_Object*>(struct_element_attr_value);
224 return reinterpret_cast<FPDF_TEXTPAGE>(page);
232 return reinterpret_cast<FPDF_SCHHANDLE>(handle);
235 FPDF_SCHHANDLE handle) {
240 CPDFSDK_FormFillEnvironment* handle) {
241 return reinterpret_cast<FPDF_FORMHANDLE>(handle);
243inline CPDFSDK_FormFillEnvironment*
245 return reinterpret_cast<CPDFSDK_FormFillEnvironment*>(handle);
250 return reinterpret_cast<FPDF_SIGNATURE>(dictionary);
253 FPDF_SIGNATURE signature) {
258 return reinterpret_cast<FPDF_XOBJECT>(xobject);
280 pdfium::StrictNumeric<size_t> buflen);
285RetainPtr<IFX_SeekableStream> MakeSeekableStream(
286 FPDF_FILEHANDLER* pFileHandler);
297 FS_QUADPOINTSF* quad_points);
309 pdfium::span<
char> result_span);
313 pdfium::span<
char> result_span);
321 pdfium::span<uint8_t> buffer);
329 pdfium::span<uint8_t> buffer);
fxcrt::ByteString ByteString
static bool UseSkiaRenderer()
void LoadSubst(const ByteString &face_name, bool bTrueType, uint32_t flags, int weight, int italic_angle, FX_CodePage code_page, bool bVertical)
void Translate(int32_t x, int32_t y)
constexpr CFX_Matrix(float a1, float b1, float c1, float d1, float e1, float f1)
void AppendRect(float left, float bottom, float right, float top)
void SaveState() override
bool SetClip_PathFill(const CFX_Path &path, const CFX_Matrix *pObject2Device, const CFX_FillRenderOptions &fill_options) override
bool DrawPath(const CFX_Path &path, const CFX_Matrix *pObject2Device, const CFX_GraphStateData *pGraphState, uint32_t fill_color, uint32_t stroke_color, const CFX_FillRenderOptions &fill_options) override
void RestoreState(bool bKeepSaved) override
std::vector< RetainPtr< CPDF_Object > >::const_iterator const_iterator
std::map< ByteString, RetainPtr< CPDF_Object >, std::less<> > DictMap
RenderContextClearer(CPDF_Page *pPage)
#define UNSAFE_BUFFER_USAGE
const CPDF_Array * CPDFArrayFromFPDFPageRange(FPDF_PAGERANGE range)
UNSAFE_BUFFER_USAGE WideString WideStringFromFPDFWideString(FPDF_WIDESTRING wide_string)
bool IsValidQuadPointsIndex(const CPDF_Array *array, size_t index)
FPDF_STRUCTTREE FPDFStructTreeFromCPDFStructTree(CPDF_StructTree *struct_tree)
std::vector< uint32_t > ParsePageRangeString(const ByteString &bsPageRange, uint32_t nCount)
FPDF_STRUCTELEMENT_ATTR FPDFStructElementAttrFromCPDFDictionary(const CPDF_Dictionary *dictionary)
UNSAFE_BUFFER_USAGE ByteString ByteStringFromFPDFWideString(FPDF_WIDESTRING wide_string)
FPDF_XOBJECT FPDFXObjectFromXObjectContext(XObjectContext *xobject)
FPDF_STRUCTELEMENT_ATTR_VALUE FPDFStructElementAttrValueFromCPDFObject(const CPDF_Object *object)
CPDF_StructElement * CPDFStructElementFromFPDFStructElement(FPDF_STRUCTELEMENT struct_element)
FPDF_PAGELINK FPDFPageLinkFromCPDFLinkExtract(CPDF_LinkExtract *link)
FPDF_DEST FPDFDestFromCPDFArray(const CPDF_Array *dest)
IPDF_Page * IPDFPageFromFPDFPage(FPDF_PAGE page)
const CFX_Path::Point * FXPathPointFromFPDFPathSegment(FPDF_PATHSEGMENT segment)
CPDF_TextPageFind * CPDFTextPageFindFromFPDFSchHandle(FPDF_SCHHANDLE handle)
FPDF_JAVASCRIPT_ACTION FPDFJavaScriptActionFromCPDFJavaScriptAction(CPDF_JavaScript *javascript)
FPDF_DOCUMENT FPDFDocumentFromCPDFDocument(CPDF_Document *doc)
void ProcessParseError(CPDF_Parser::Error err)
XObjectContext * XObjectContextFromFPDFXObject(FPDF_XOBJECT xobject)
RetainPtr< CPDF_Array > AddQuadPointsArrayToDictionary(CPDF_Dictionary *dict)
CPDF_Array * CPDFArrayFromFPDFDest(FPDF_DEST dest)
FPDF_SCHHANDLE FPDFSchHandleFromCPDFTextPageFind(CPDF_TextPageFind *handle)
FPDF_BITMAP FPDFBitmapFromCFXDIBitmap(CFX_DIBitmap *bitmap)
CFX_DIBitmap * CFXDIBitmapFromFPDFBitmap(FPDF_BITMAP bitmap)
FXDIB_Format FXDIBFormatFromFPDFFormat(int format)
FPDF_BOOL IsPDFSandboxPolicyEnabled(FPDF_DWORD policy)
CPDFSDK_FormFillEnvironment * CPDFSDKFormFillEnvironmentFromFPDFFormHandle(FPDF_FORMHANDLE handle)
unsigned long NulTerminateMaybeCopyAndReturnLength(const ByteString &text, pdfium::span< char > result_span)
FPDF_ANNOTATION FPDFAnnotationFromCPDFAnnotContext(CPDF_AnnotContext *annot)
FPDF_ACTION FPDFActionFromCPDFDictionary(const CPDF_Dictionary *action)
void SetPDFSandboxPolicy(FPDF_DWORD policy, FPDF_BOOL enable)
CPDF_Dictionary * CPDFDictionaryFromFPDFBookmark(FPDF_BOOKMARK bookmark)
UNSAFE_BUFFER_USAGE pdfium::span< char > SpanFromFPDFApiArgs(void *buffer, pdfium::StrictNumeric< size_t > buflen)
CPDF_ContentMarkItem * CPDFContentMarkItemFromFPDFPageObjectMark(FPDF_PAGEOBJECTMARK mark)
CPDF_Object * CPDFObjectFromFPDFAttachment(FPDF_ATTACHMENT attachment)
RetainPtr< const CPDF_Array > GetQuadPointsArrayFromDictionary(const CPDF_Dictionary *dict)
FPDF_LINK FPDFLinkFromCPDFDictionary(CPDF_Dictionary *link)
const CPDF_Dictionary * CPDFDictionaryFromFPDFSignature(FPDF_SIGNATURE signature)
CPDF_AnnotContext * CPDFAnnotContextFromFPDFAnnotation(FPDF_ANNOTATION annot)
FPDF_PAGEOBJECT FPDFPageObjectFromCPDFPageObject(CPDF_PageObject *page_object)
bool GetQuadPointsAtIndex(RetainPtr< const CPDF_Array > array, size_t quad_index, FS_QUADPOINTSF *quad_points)
FPDF_PAGEOBJECTMARK FPDFPageObjectMarkFromCPDFContentMarkItem(CPDF_ContentMarkItem *mark)
FPDF_STRUCTELEMENT FPDFStructElementFromCPDFStructElement(CPDF_StructElement *struct_element)
CPDF_TextPage * CPDFTextPageFromFPDFTextPage(FPDF_TEXTPAGE page)
void ReportUnsupportedXFA(const CPDF_Document *pDoc)
FPDF_FONT FPDFFontFromCPDFFont(CPDF_Font *font)
CPDF_Font * CPDFFontFromFPDFFont(FPDF_FONT font)
FS_RECTF FSRectFFromCFXFloatRect(const CFX_FloatRect &rect)
RetainPtr< CPDF_Array > GetMutableQuadPointsArrayFromDictionary(CPDF_Dictionary *dict)
CPDF_Dictionary * CPDFDictionaryFromFPDFLink(FPDF_LINK link)
unsigned long Utf16EncodeMaybeCopyAndReturnLength(const WideString &text, pdfium::span< char > result_span)
void CheckForUnsupportedAnnot(const CPDF_Annot *pAnnot)
void ReportUnsupportedFeatures(const CPDF_Document *pDoc)
CPDF_ClipPath * CPDFClipPathFromFPDFClipPath(FPDF_CLIPPATH path)
FS_MATRIX FSMatrixFromCFXMatrix(const CFX_Matrix &matrix)
FPDF_PATHSEGMENT FPDFPathSegmentFromFXPathPoint(const CFX_Path::Point *segment)
void SetColorFromScheme(const FPDF_COLORSCHEME *pColorScheme, CPDF_RenderOptions *pRenderOptions)
CFX_FloatRect CFXFloatRectFromFSRectF(const FS_RECTF &rect)
FPDF_PAGE FPDFPageFromIPDFPage(IPDF_Page *page)
unsigned long GetRawStreamMaybeCopyAndReturnLength(RetainPtr< const CPDF_Stream > stream, pdfium::span< uint8_t > buffer)
CPDF_JavaScript * CPDFJavaScriptActionFromFPDFJavaScriptAction(FPDF_JAVASCRIPT_ACTION javascript)
FPDF_CLIPPATH FPDFClipPathFromCPDFClipPath(CPDF_ClipPath *path)
const CPDF_Object * CPDFObjectFromFPDFStructElementAttrValue(FPDF_STRUCTELEMENT_ATTR_VALUE struct_element_attr_value)
CFX_PointF CFXPointFFromFSPointF(const FS_POINTF &point)
CPDF_Page * CPDFPageFromFPDFPage(FPDF_PAGE page)
CPDF_Document * CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc)
FPDF_BOOKMARK FPDFBookmarkFromCPDFDictionary(const CPDF_Dictionary *bookmark)
FPDF_SIGNATURE FPDFSignatureFromCPDFDictionary(const CPDF_Dictionary *dictionary)
CPDF_StructTree * CPDFStructTreeFromFPDFStructTree(FPDF_STRUCTTREE struct_tree)
unsigned long DecodeStreamMaybeCopyAndReturnLength(RetainPtr< const CPDF_Stream > stream, pdfium::span< uint8_t > buffer)
FPDF_TEXTPAGE FPDFTextPageFromCPDFTextPage(CPDF_TextPage *page)
FPDF_PAGERANGE FPDFPageRangeFromCPDFArray(const CPDF_Array *range)
const CPDF_Dictionary * CPDFDictionaryFromFPDFStructElementAttr(FPDF_STRUCTELEMENT_ATTR struct_element_attr)
void SetPDFUnsupportInfo(UNSUPPORT_INFO *unsp_info)
CPDF_PageObject * CPDFPageObjectFromFPDFPageObject(FPDF_PAGEOBJECT page_object)
CPDF_Dictionary * CPDFDictionaryFromFPDFAction(FPDF_ACTION action)
FPDF_FORMHANDLE FPDFFormHandleFromCPDFSDKFormFillEnvironment(CPDFSDK_FormFillEnvironment *handle)
CFX_Matrix CFXMatrixFromFSMatrix(const FS_MATRIX &matrix)
CPDFSDK_InteractiveForm * FormHandleToInteractiveForm(FPDF_FORMHANDLE hHandle)
CPDF_LinkExtract * CPDFLinkExtractFromFPDFPageLink(FPDF_PAGELINK link)
FPDF_ATTACHMENT FPDFAttachmentFromCPDFObject(CPDF_Object *attachment)
void CPDFSDK_RenderPageWithContext(CPDF_PageRenderContext *pContext, CPDF_Page *pPage, int start_x, int start_y, int size_x, int size_y, int rotate, int flags, const FPDF_COLORSCHEME *color_scheme, bool need_to_restore, CPDFSDK_PauseAdapter *pause)
TEST_F(FPDFParserDecodeEmbedderTest, Bug552046)
FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV FPDFBitmap_Create(int width, int height, int alpha)
CFX_PTemplate< float > CFX_PointF
TEST(FXCRYPT, CryptToBase16)
constexpr CFX_FillRenderOptions()
static constexpr CFX_FillRenderOptions WindingOptions()
constexpr CFX_TextRenderOptions(AliasingType type)
fxcrt::WideString WideString