diff options
-rw-r--r-- | fpdfsdk/src/fpdf_flatten.cpp | 90 | ||||
-rw-r--r-- | public/fpdf_flatten.h | 35 | ||||
-rw-r--r-- | public/fpdfview.h | 34 |
3 files changed, 70 insertions, 89 deletions
diff --git a/fpdfsdk/src/fpdf_flatten.cpp b/fpdfsdk/src/fpdf_flatten.cpp index 4fea6a973c..eeb9993efb 100644 --- a/fpdfsdk/src/fpdf_flatten.cpp +++ b/fpdfsdk/src/fpdf_flatten.cpp @@ -86,47 +86,44 @@ void ParserStream( CPDF_Dictionary * pPageDic, CPDF_Dictionary* pStream, CPDF_Re int ParserAnnots( CPDF_Document* pSourceDoc, CPDF_Dictionary * pPageDic, CPDF_RectArray * pRectArray, CPDF_ObjectArray * pObjectArray, int nUsage) { - if (!pSourceDoc || !pPageDic) return FLATTEN_FAIL; - - GetContentsRect( pSourceDoc, pPageDic, pRectArray ); - CPDF_Array* pAnnots = pPageDic->GetArray("Annots"); - if (pAnnots) - { - FX_DWORD dwSize = pAnnots->GetCount(); - - for (int i = 0; i < (int)dwSize; i++) - { - CPDF_Object* pObj = pAnnots->GetElementValue(i); - - if (!pObj)continue; - - if (pObj->GetType() == PDFOBJ_DICTIONARY) - { - CPDF_Dictionary* pAnnotDic = (CPDF_Dictionary*)pObj; - CFX_ByteString sSubtype = pAnnotDic->GetString("Subtype"); - if (sSubtype == "Popup")continue; - - int nAnnotFlag = pAnnotDic->GetInteger("F"); - - if(nAnnotFlag & ANNOTFLAG_HIDDEN) - continue; - if(nUsage == FLAT_NORMALDISPLAY) - { - if(nAnnotFlag & ANNOTFLAG_INVISIBLE) - continue; - ParserStream( pPageDic, pAnnotDic, pRectArray, pObjectArray ); - } - else - { - if(nAnnotFlag & ANNOTFLAG_PRINT) - ParserStream( pPageDic, pAnnotDic, pRectArray, pObjectArray ); - } - } - } - return FLATTEN_SUCCESS; - }else{ - return FLATTEN_NOTINGTODO; - } + if (!pSourceDoc || !pPageDic) + return FLATTEN_FAIL; + + GetContentsRect( pSourceDoc, pPageDic, pRectArray ); + CPDF_Array* pAnnots = pPageDic->GetArray("Annots"); + if (!pAnnots) + return FLATTEN_NOTHINGTODO; + + FX_DWORD dwSize = pAnnots->GetCount(); + for (int i = 0; i < (int)dwSize; i++) + { + CPDF_Object* pObj = pAnnots->GetElementValue(i); + if (!pObj || pObj->GetType() != PDFOBJ_DICTIONARY) + continue; + + CPDF_Dictionary* pAnnotDic = (CPDF_Dictionary*)pObj; + CFX_ByteString sSubtype = pAnnotDic->GetString("Subtype"); + if (sSubtype == "Popup") + continue; + + int nAnnotFlag = pAnnotDic->GetInteger("F"); + if (nAnnotFlag & ANNOTFLAG_HIDDEN) + continue; + + if(nUsage == FLAT_NORMALDISPLAY) + { + if (nAnnotFlag & ANNOTFLAG_INVISIBLE) + continue; + + ParserStream( pPageDic, pAnnotDic, pRectArray, pObjectArray ); + } + else + { + if (nAnnotFlag & ANNOTFLAG_PRINT) + ParserStream( pPageDic, pAnnotDic, pRectArray, pObjectArray ); + } + } + return FLATTEN_SUCCESS; } @@ -345,14 +342,9 @@ DLLEXPORT int STDCALL FPDFPage_Flatten( FPDF_PAGE page, int nFlag) int iRet = FLATTEN_FAIL; iRet = ParserAnnots( pDocument, pPageDict, &RectArray, &ObjectArray, nFlag); - if (iRet == FLATTEN_NOTINGTODO) - { - return FLATTEN_NOTINGTODO; - }else if (iRet == FLATTEN_FAIL) - { - return FLATTEN_FAIL; - } - + if (iRet == FLATTEN_NOTHINGTODO || iRet == FLATTEN_FAIL) + return iRet; + CPDF_Rect rcOriginalCB; CPDF_Rect rcMerger = CalculateRect( &RectArray ); CPDF_Rect rcOriginalMB = pPageDict->GetRect("MediaBox"); diff --git a/public/fpdf_flatten.h b/public/fpdf_flatten.h index 0c8322e697..f06a7cf17a 100644 --- a/public/fpdf_flatten.h +++ b/public/fpdf_flatten.h @@ -9,31 +9,30 @@ #include "fpdfview.h" +// Result codes. #define FLATTEN_FAIL 0 // Flatten operation failed. #define FLATTEN_SUCCESS 1 // Flatten operation succeed. -#define FLATTEN_NOTINGTODO 2 // There is nothing can be flatten. - -#ifdef __cplusplus -extern "C" { -#endif +#define FLATTEN_NOTHINGTODO 2 // There is nothing to be flattened. +// Flags. #define FLAT_NORMALDISPLAY 0 #define FLAT_PRINT 1 - //Function: FPDFPage_Flatten - // Flat a pdf page,annotations or form fields will become part of the page contents. - //Parameters: - - // page - Handle to the page. Returned by FPDF_LoadPage function. - // nFlag - the flag for the use of flatten result. Zero for normal display, 1 for print. - //Return value: - // The result flag of the function, See flags above ( FLATTEN_FAIL, FLATTEN_SUCCESS, FLATTEN_NOTINGTODO ). - // - // Comments: Current version all fails return zero. If necessary we will assign different value - // to indicate different fail reason. - // - DLLEXPORT int STDCALL FPDFPage_Flatten( FPDF_PAGE page, int nFlag); +#ifdef __cplusplus +extern "C" { +#endif +// Function: FPDFPage_Flatten +// Make annotations and form fields become part of the page contents itself. +// Parameters: +// page - Handle to the page, as returned by FPDF_LoadPage(). +// nFlag - Intended use of the flattened result: 0 for normal display, 1 for printing. +// Return value: +// Either FLATTEN_FAIL, FLATTEN_SUCCESS, or FLATTEN_NOTHINGTODO (see above). +// Comments: +// Currently, all failures return FLATTEN_FAIL, with no indication for the reason +// for the failure. +DLLEXPORT int STDCALL FPDFPage_Flatten(FPDF_PAGE page, int nFlag); #ifdef __cplusplus } diff --git a/public/fpdfview.h b/public/fpdfview.h index 91787dfa23..eab37394e6 100644 --- a/public/fpdfview.h +++ b/public/fpdfview.h @@ -71,8 +71,6 @@ typedef const unsigned short* FPDF_STRING; typedef const char* FPDF_STRING; #endif -#ifndef _FS_DEF_MATRIX_ -#define _FS_DEF_MATRIX_ /** @brief Matrix for transformation. */ typedef struct _FS_MATRIX_ { @@ -83,10 +81,7 @@ typedef struct _FS_MATRIX_ float e; /**< @brief Coefficient e.*/ float f; /**< @brief Coefficient f.*/ } FS_MATRIX; -#endif -#ifndef _FS_DEF_RECTF_ -#define _FS_DEF_RECTF_ /** @brief Rectangle area(float) in device or page coordination system. */ typedef struct _FS_RECTF_ { @@ -103,7 +98,6 @@ typedef struct _FS_RECTF_ }* FS_LPRECTF, FS_RECTF; /** @brief Const Pointer to ::FS_RECTF structure.*/ typedef const FS_RECTF* FS_LPCRECTF; -#endif #if defined(_WIN32) && defined(FPDFSDK_EXPORTS) // On Windows system, functions are exported in a DLL @@ -114,9 +108,6 @@ typedef const FS_RECTF* FS_LPCRECTF; #define STDCALL #endif -extern const char g_ExpireDate[]; -extern const char g_ModuleCodes[]; - // Exported Functions #ifdef __cplusplus extern "C" { @@ -130,10 +121,8 @@ extern "C" { // None. // Comments: // You have to call this function before you can call any PDF processing functions. - DLLEXPORT void STDCALL FPDF_InitLibrary(); - // Function: FPDF_DestroyLibary // Release all resources allocated by the FPDFSDK library. // Parameters: @@ -157,16 +146,18 @@ DLLEXPORT void STDCALL FPDF_DestroyLibrary(); // None. DLLEXPORT void STDCALL FPDF_SetSandBoxPolicy(FPDF_DWORD policy, FPDF_BOOL enable); -/** -* Open and load a PDF document. -* @param[in] file_path - Path to the PDF file (including extension). -* @param[in] password - A string used as the password for PDF file. -* If no password needed, empty or NULL can be used. -* @note Loaded document can be closed by FPDF_CloseDocument. -* If this function fails, you can use FPDF_GetLastError() to retrieve -* the reason why it fails. -* @retval A handle to the loaded document. If failed, NULL is returned. -*/ +// Function: FPDF_LoadDocument +// Open and load a PDF document. +// Parameters: +// file_path [in] - Path to the PDF file (including extension). +// password [in] - A string used as the password for PDF file. +// If no password needed, empty or NULL can be used. +// Return value: +// A handle to the loaded document, or NULL on failure. +// Comments: +// Loaded document can be closed by FPDF_CloseDocument(). +// If this function fails, you can use FPDF_GetLastError() to retrieve +// the reason why it failed. DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadDocument(FPDF_STRING file_path, FPDF_BYTESTRING password); @@ -323,7 +314,6 @@ DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page); // DLLEXPORT int STDCALL FPDF_GetPageSizeByIndex(FPDF_DOCUMENT document, int page_index, double* width, double* height); - // Page rendering flags. They can be combined with bit OR. #define FPDF_ANNOT 0x01 // Set if annotations are to be rendered. #define FPDF_LCD_TEXT 0x02 // Set if using text rendering optimized for LCD display. |