diff options
author | thestig <thestig@chromium.org> | 2016-05-21 21:08:05 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-05-21 21:08:05 -0700 |
commit | b8bf55f73390a9460ec13dbffcf5d22819f9aa12 (patch) | |
tree | 15d20bce541b38f44e5defe642236d7f5ba4266c | |
parent | 4cafdefd77e29c9d38ad99c266a60ce296137a35 (diff) | |
download | pdfium-b8bf55f73390a9460ec13dbffcf5d22819f9aa12.tar.xz |
Get rid of CPDF_Object::GetArray().
BUG=pdfium:234
Review-Url: https://codereview.chromium.org/2001783003
-rw-r--r-- | core/fpdfapi/fpdf_page/fpdf_page_parser.cpp | 8 | ||||
-rw-r--r-- | core/fpdfapi/fpdf_parser/cpdf_array.cpp | 6 | ||||
-rw-r--r-- | core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp | 14 | ||||
-rw-r--r-- | core/fpdfapi/fpdf_parser/cpdf_object.cpp | 4 | ||||
-rw-r--r-- | core/fpdfapi/fpdf_parser/cpdf_object_unittest.cpp | 34 | ||||
-rw-r--r-- | core/fpdfapi/fpdf_parser/include/cpdf_array.h | 1 | ||||
-rw-r--r-- | core/fpdfapi/fpdf_parser/include/cpdf_object.h | 1 | ||||
-rw-r--r-- | core/fpdfdoc/cpvt_generateap.cpp | 22 | ||||
-rw-r--r-- | core/fpdfdoc/doc_formfield.cpp | 51 | ||||
-rw-r--r-- | fpdfsdk/fpdfsave.cpp | 5 | ||||
-rw-r--r-- | fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp | 145 |
11 files changed, 121 insertions, 170 deletions
diff --git a/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp b/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp index 4a7b6ad403..b30006bf35 100644 --- a/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp +++ b/core/fpdfapi/fpdf_page/fpdf_page_parser.cpp @@ -697,7 +697,7 @@ void CPDF_StreamContentParser::Handle_SetColorSpace_Stroke() { } void CPDF_StreamContentParser::Handle_SetDash() { - CPDF_Array* pArray = GetObject(1) ? GetObject(1)->GetArray() : nullptr; + CPDF_Array* pArray = ToArray(GetObject(1)); if (!pArray) return; @@ -1305,10 +1305,10 @@ void CPDF_StreamContentParser::Handle_ShowText() { } void CPDF_StreamContentParser::Handle_ShowText_Positioning() { - CPDF_Array* pArray = GetObject(0) ? GetObject(0)->GetArray() : NULL; - if (!pArray) { + CPDF_Array* pArray = ToArray(GetObject(0)); + if (!pArray) return; - } + size_t n = pArray->GetCount(); size_t nsegs = 0; for (size_t i = 0; i < n; i++) { diff --git a/core/fpdfapi/fpdf_parser/cpdf_array.cpp b/core/fpdfapi/fpdf_parser/cpdf_array.cpp index d588f339a7..20073772b7 100644 --- a/core/fpdfapi/fpdf_parser/cpdf_array.cpp +++ b/core/fpdfapi/fpdf_parser/cpdf_array.cpp @@ -25,12 +25,6 @@ CPDF_Object::Type CPDF_Array::GetType() const { return ARRAY; } -CPDF_Array* CPDF_Array::GetArray() const { - // The method should be made non-const if we want to not be const. - // See bug #234. - return const_cast<CPDF_Array*>(this); -} - bool CPDF_Array::IsArray() const { return true; } diff --git a/core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp b/core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp index e47d4244ac..f371e673ed 100644 --- a/core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp +++ b/core/fpdfapi/fpdf_parser/cpdf_data_avail.cpp @@ -151,7 +151,7 @@ FX_BOOL CPDF_DataAvail::IsObjectsAvail( int32_t type = pObj->GetType(); switch (type) { case CPDF_Object::ARRAY: { - CPDF_Array* pArray = pObj->GetArray(); + CPDF_Array* pArray = pObj->AsArray(); for (size_t k = 0; k < pArray->GetCount(); ++k) new_obj_array.Add(pArray->GetObjectAt(k)); } break; @@ -509,13 +509,11 @@ FX_BOOL CPDF_DataAvail::CheckPage(IPDF_DataAvail::DownloadHints* pHints) { continue; } - if (pObj->IsArray()) { - CPDF_Array* pArray = pObj->GetArray(); - if (pArray) { - for (size_t j = 0; j < pArray->GetCount(); ++j) { - if (CPDF_Reference* pRef = ToReference(pArray->GetObjectAt(j))) - UnavailObjList.Add(pRef->GetRefObjNum()); - } + CPDF_Array* pArray = ToArray(pObj); + if (pArray) { + for (CPDF_Object* pArrayObj : *pArray) { + if (CPDF_Reference* pRef = ToReference(pArrayObj)) + UnavailObjList.Add(pRef->GetRefObjNum()); } } diff --git a/core/fpdfapi/fpdf_parser/cpdf_object.cpp b/core/fpdfapi/fpdf_parser/cpdf_object.cpp index 86b9449cf8..ec967d1032 100644 --- a/core/fpdfapi/fpdf_parser/cpdf_object.cpp +++ b/core/fpdfapi/fpdf_parser/cpdf_object.cpp @@ -49,10 +49,6 @@ CPDF_Dictionary* CPDF_Object::GetDict() const { return nullptr; } -CPDF_Array* CPDF_Object::GetArray() const { - return nullptr; -} - void CPDF_Object::SetString(const CFX_ByteString& str) { ASSERT(FALSE); } diff --git a/core/fpdfapi/fpdf_parser/cpdf_object_unittest.cpp b/core/fpdfapi/fpdf_parser/cpdf_object_unittest.cpp index d3dc5257a3..a77f022c40 100644 --- a/core/fpdfapi/fpdf_parser/cpdf_object_unittest.cpp +++ b/core/fpdfapi/fpdf_parser/cpdf_object_unittest.cpp @@ -183,7 +183,7 @@ class PDFObjectsTest : public testing::Test { }; TEST_F(PDFObjectsTest, GetString) { - const char* direct_obj_results[] = { + const char* const direct_obj_results[] = { "false", "true", "1245", "9.00345", "A simple test", "\t\n", "space", "", "", "", ""}; // Check for direct objects. @@ -191,15 +191,15 @@ TEST_F(PDFObjectsTest, GetString) { EXPECT_STREQ(direct_obj_results[i], m_DirectObjs[i]->GetString().c_str()); // Check indirect references. - const char* indirect_obj_results[] = {"true", "1245", "\t\n", "space", - "", "", ""}; + const char* const indirect_obj_results[] = {"true", "1245", "\t\n", "space", + "", "", ""}; for (size_t i = 0; i < m_RefObjs.size(); ++i) { EXPECT_STREQ(indirect_obj_results[i], m_RefObjs[i]->GetString().c_str()); } } TEST_F(PDFObjectsTest, GetUnicodeText) { - const wchar_t* direct_obj_results[] = { + const wchar_t* const direct_obj_results[] = { L"", L"", L"", L"", L"A simple test", L"\t\n", L"space", L"", L"", L"abcdefghijklmnopqrstuvwxyz", L""}; @@ -240,7 +240,7 @@ TEST_F(PDFObjectsTest, GetInteger) { } TEST_F(PDFObjectsTest, GetDict) { - const CPDF_Dictionary* direct_obj_results[] = { + const CPDF_Dictionary* const direct_obj_results[] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, m_DictObj, m_StreamDictObj, nullptr}; // Check for direct objects. @@ -248,23 +248,23 @@ TEST_F(PDFObjectsTest, GetDict) { EXPECT_EQ(direct_obj_results[i], m_DirectObjs[i]->GetDict()); // Check indirect references. - const CPDF_Dictionary* indirect_obj_results[] = { + const CPDF_Dictionary* const indirect_obj_results[] = { nullptr, nullptr, nullptr, nullptr, nullptr, m_DictObj, m_StreamDictObj}; for (size_t i = 0; i < m_RefObjs.size(); ++i) EXPECT_EQ(indirect_obj_results[i], m_RefObjs[i]->GetDict()); } TEST_F(PDFObjectsTest, GetArray) { - const CPDF_Array* direct_obj_results[] = { + const CPDF_Array* const direct_obj_results[] = { nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, m_ArrayObj, nullptr, nullptr, nullptr}; // Check for direct objects. for (size_t i = 0; i < m_DirectObjs.size(); ++i) - EXPECT_EQ(direct_obj_results[i], m_DirectObjs[i]->GetArray()); + EXPECT_EQ(direct_obj_results[i], m_DirectObjs[i]->AsArray()); // Check indirect references. for (const auto& it : m_RefObjs) - EXPECT_EQ(nullptr, it->GetArray()); + EXPECT_EQ(nullptr, it->AsArray()); } TEST_F(PDFObjectsTest, Clone) { @@ -305,8 +305,8 @@ TEST_F(PDFObjectsTest, SetString) { // Check for direct objects. const char* const set_values[] = {"true", "fake", "3.125f", "097", "changed", "", "NewName"}; - const char* expected[] = {"true", "false", "3.125", "97", - "changed", "", "NewName"}; + const char* const expected[] = {"true", "false", "3.125", "97", + "changed", "", "NewName"}; for (size_t i = 0; i < FX_ArraySize(set_values); ++i) { m_DirectObjs[i]->SetString(set_values[i]); EXPECT_STREQ(expected[i], m_DirectObjs[i]->GetString().c_str()); @@ -424,7 +424,7 @@ TEST(PDFArrayTest, GetRect) { TEST(PDFArrayTest, GetTypeAt) { { // Boolean array. - bool vals[] = {true, false, false, true, true}; + const bool vals[] = {true, false, false, true, true}; ScopedArray arr(new CPDF_Array); for (size_t i = 0; i < FX_ArraySize(vals); ++i) arr->InsertAt(i, new CPDF_Boolean(vals[i])); @@ -441,7 +441,7 @@ TEST(PDFArrayTest, GetTypeAt) { } { // Integer array. - int vals[] = {10, 0, -345, 2089345456, -1000000000, 567, 93658767}; + const int vals[] = {10, 0, -345, 2089345456, -1000000000, 567, 93658767}; ScopedArray arr(new CPDF_Array); for (size_t i = 0; i < FX_ArraySize(vals); ++i) arr->InsertAt(i, new CPDF_Number(vals[i])); @@ -459,10 +459,10 @@ TEST(PDFArrayTest, GetTypeAt) { } { // Float array. - float vals[] = {0.0f, 0, 10, 10.0f, 0.0345f, - 897.34f, -2.5f, -1.0f, -345.0f, -0.0f}; - const char* expected_str[] = {"0", "0", "10", "10", "0.0345", - "897.34", "-2.5", "-1", "-345", "0"}; + const float vals[] = {0.0f, 0, 10, 10.0f, 0.0345f, + 897.34f, -2.5f, -1.0f, -345.0f, -0.0f}; + const char* const expected_str[] = { + "0", "0", "10", "10", "0.0345", "897.34", "-2.5", "-1", "-345", "0"}; ScopedArray arr(new CPDF_Array); for (size_t i = 0; i < FX_ArraySize(vals); ++i) { arr->InsertAt(i, new CPDF_Number(vals[i])); diff --git a/core/fpdfapi/fpdf_parser/include/cpdf_array.h b/core/fpdfapi/fpdf_parser/include/cpdf_array.h index dfe03b9d70..0629046d9e 100644 --- a/core/fpdfapi/fpdf_parser/include/cpdf_array.h +++ b/core/fpdfapi/fpdf_parser/include/cpdf_array.h @@ -24,7 +24,6 @@ class CPDF_Array : public CPDF_Object { // CPDF_Object. Type GetType() const override; CPDF_Object* Clone(FX_BOOL bDirect = FALSE) const override; - CPDF_Array* GetArray() const override; bool IsArray() const override; CPDF_Array* AsArray() override; const CPDF_Array* AsArray() const override; diff --git a/core/fpdfapi/fpdf_parser/include/cpdf_object.h b/core/fpdfapi/fpdf_parser/include/cpdf_object.h index c0c442157f..0d2e87e9f1 100644 --- a/core/fpdfapi/fpdf_parser/include/cpdf_object.h +++ b/core/fpdfapi/fpdf_parser/include/cpdf_object.h @@ -50,7 +50,6 @@ class CPDF_Object { virtual FX_FLOAT GetNumber() const; virtual int GetInteger() const; virtual CPDF_Dictionary* GetDict() const; - virtual CPDF_Array* GetArray() const; virtual void SetString(const CFX_ByteString& str); diff --git a/core/fpdfdoc/cpvt_generateap.cpp b/core/fpdfdoc/cpvt_generateap.cpp index aa49f79c12..db2ee6c01d 100644 --- a/core/fpdfdoc/cpvt_generateap.cpp +++ b/core/fpdfdoc/cpvt_generateap.cpp @@ -344,15 +344,10 @@ FX_BOOL GenerateWidgetAP(CPDF_Document* pDoc, pDoc, pStreamDict ? pStreamDict->GetDictBy("Resources") : nullptr, pDefFont, sFontName.Right(sFontName.GetLength() - 1)); CPDF_VariableText::Provider prd(&map); - CPDF_Array* pOpts = FPDF_GetFieldAttr(pAnnotDict, "Opt") - ? FPDF_GetFieldAttr(pAnnotDict, "Opt")->GetArray() - : nullptr; - CPDF_Array* pSels = FPDF_GetFieldAttr(pAnnotDict, "I") - ? FPDF_GetFieldAttr(pAnnotDict, "I")->GetArray() - : nullptr; - int32_t nTop = FPDF_GetFieldAttr(pAnnotDict, "TI") - ? FPDF_GetFieldAttr(pAnnotDict, "TI")->GetInteger() - : 0; + CPDF_Array* pOpts = ToArray(FPDF_GetFieldAttr(pAnnotDict, "Opt")); + CPDF_Array* pSels = ToArray(FPDF_GetFieldAttr(pAnnotDict, "I")); + CPDF_Object* pTi = FPDF_GetFieldAttr(pAnnotDict, "TI"); + int32_t nTop = pTi ? pTi->GetInteger() : 0; CFX_ByteTextBuf sBody; if (pOpts) { FX_FLOAT fy = rcBody.top; @@ -415,11 +410,10 @@ FX_BOOL GenerateWidgetAP(CPDF_Document* pDoc, } } if (sBody.GetSize() > 0) { - sAppStream << "/Tx BMC\n" - << "q\n"; - sAppStream << rcBody.left << " " << rcBody.bottom << " " - << rcBody.Width() << " " << rcBody.Height() << " re\nW\nn\n"; - sAppStream << sBody.AsStringC() << "Q\nEMC\n"; + sAppStream << "/Tx BMC\nq\n" + << rcBody.left << " " << rcBody.bottom << " " + << rcBody.Width() << " " << rcBody.Height() << " re\nW\nn\n" + << sBody.AsStringC() << "Q\nEMC\n"; } } break; } diff --git a/core/fpdfdoc/doc_formfield.cpp b/core/fpdfdoc/doc_formfield.cpp index 84d9a52dac..9849fa1e35 100644 --- a/core/fpdfdoc/doc_formfield.cpp +++ b/core/fpdfdoc/doc_formfield.cpp @@ -893,56 +893,37 @@ FX_BOOL CPDF_FormField::SetCheckValue(const CFX_WideString& value, int CPDF_FormField::GetTopVisibleIndex() { CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "TI"); - if (!pObj) { - return 0; - } - return pObj->GetInteger(); + return pObj ? pObj->GetInteger() : 0; } int CPDF_FormField::CountSelectedOptions() { - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I"); - if (!pObj) { - return 0; - } - CPDF_Array* pArray = pObj->GetArray(); - if (!pArray) { - return 0; - } - return static_cast<int>(pArray->GetCount()); + CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); + return pArray ? pArray->GetCount() : 0; } int CPDF_FormField::GetSelectedOptionIndex(int index) { - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I"); - if (!pObj) { + CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); + if (!pArray) return -1; - } - CPDF_Array* pArray = pObj->GetArray(); - if (!pArray) { + + int iCount = pArray->GetCount(); + if (iCount < 0 || index >= iCount) return -1; - } - int iCount = static_cast<int>(pArray->GetCount()); - if (iCount > 0 && index < iCount) { - return pArray->GetIntegerAt(index); - } - return -1; + return pArray->GetIntegerAt(index); } + FX_BOOL CPDF_FormField::IsOptionSelected(int iOptIndex) { - CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict, "I"); - if (!pObj) { - return FALSE; - } - CPDF_Array* pArray = pObj->GetArray(); - if (!pArray) { + CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict, "I")); + if (!pArray) return FALSE; - } - size_t iCount = pArray->GetCount(); - for (size_t i = 0; i < iCount; i++) { - if (pArray->GetIntegerAt(i) == iOptIndex) { + + for (CPDF_Object* pObj : *pArray) { + if (pObj->GetInteger() == iOptIndex) return TRUE; - } } return FALSE; } + FX_BOOL CPDF_FormField::SelectOption(int iOptIndex, FX_BOOL bSelected, FX_BOOL bNotify) { diff --git a/fpdfsdk/fpdfsave.cpp b/fpdfsdk/fpdfsave.cpp index 7b08194bf4..9a006530c2 100644 --- a/fpdfsdk/fpdfsave.cpp +++ b/fpdfsdk/fpdfsave.cpp @@ -107,10 +107,7 @@ bool SaveXFADocumentData(CPDFXFA_Document* pDocument, if (!pXFA) return true; - if (!pXFA->IsArray()) - return false; - - CPDF_Array* pArray = pXFA->GetArray(); + CPDF_Array* pArray = pXFA->AsArray(); if (!pArray) return false; diff --git a/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp b/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp index 85a1f16f5d..701d999908 100644 --- a/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp +++ b/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp @@ -663,22 +663,18 @@ void CPDFXFA_Document::ExportData(CXFA_FFDoc* hDoc, m_pXFADocView->GetDoc()->SavePackage(XFA_HASHCODE_Data, &fileWrite, nullptr); } else if (fileType == FXFA_SAVEAS_XDP) { - if (m_pPDFDoc == NULL) + if (!m_pPDFDoc) return; CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); - if (pRoot == NULL) + if (!pRoot) return; CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); - if (NULL == pAcroForm) + if (!pAcroForm) return; - CPDF_Object* pXFA = pAcroForm->GetObjectBy("XFA"); - if (pXFA == NULL) - return; - if (!pXFA->IsArray()) - return; - CPDF_Array* pArray = pXFA->GetArray(); - if (NULL == pArray) + CPDF_Array* pArray = ToArray(pAcroForm->GetObjectBy("XFA")); + if (!pArray) return; + int size = pArray->GetCount(); for (int i = 1; i < size; i += 2) { CPDF_Object* pPDFObj = pArray->GetObjectAt(i); @@ -952,73 +948,70 @@ FX_BOOL CPDFXFA_Document::_ExportSubmitFile(FPDF_FILEHANDLER* pFileHandler, CFPDF_FileStream fileStream(pFileHandler); if (fileType == FXFA_SAVEAS_XML) { - const char* content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"; - fileStream.WriteBlock(content, 0, strlen(content)); + const char kContent[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n"; + fileStream.WriteBlock(kContent, 0, strlen(kContent)); m_pXFADoc->SavePackage(XFA_HASHCODE_Data, &fileStream, nullptr); - } else if (fileType == FXFA_SAVEAS_XDP) { - if (flag == 0) - flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS | - FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM; - if (m_pPDFDoc == NULL) { - fileStream.Flush(); - return FALSE; - } - CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); - if (pRoot == NULL) { - fileStream.Flush(); - return FALSE; - } - CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); - if (NULL == pAcroForm) { - fileStream.Flush(); - return FALSE; - } - CPDF_Object* pXFA = pAcroForm->GetObjectBy("XFA"); - if (pXFA == NULL) { - fileStream.Flush(); - return FALSE; - } - if (!pXFA->IsArray()) { - fileStream.Flush(); - return FALSE; - } - CPDF_Array* pArray = pXFA->GetArray(); - if (NULL == pArray) { - fileStream.Flush(); - return FALSE; - } - int size = pArray->GetCount(); - for (int i = 1; i < size; i += 2) { - CPDF_Object* pPDFObj = pArray->GetObjectAt(i); - CPDF_Object* pPrePDFObj = pArray->GetObjectAt(i - 1); - if (!pPrePDFObj->IsString()) - continue; - if (!pPDFObj->IsReference()) - continue; - CPDF_Object* pDirectObj = pPDFObj->GetDirect(); - if (!pDirectObj->IsStream()) - continue; - if (pPrePDFObj->GetString() == "config" && !(flag & FXFA_CONFIG)) - continue; - if (pPrePDFObj->GetString() == "template" && !(flag & FXFA_TEMPLATE)) - continue; - if (pPrePDFObj->GetString() == "localeSet" && !(flag & FXFA_LOCALESET)) - continue; - if (pPrePDFObj->GetString() == "datasets" && !(flag & FXFA_DATASETS)) - continue; - if (pPrePDFObj->GetString() == "xmpmeta" && !(flag & FXFA_XMPMETA)) - continue; - if (pPrePDFObj->GetString() == "xfdf" && !(flag & FXFA_XFDF)) - continue; - if (pPrePDFObj->GetString() == "form" && !(flag & FXFA_FORM)) - continue; - if (pPrePDFObj->GetString() == "form") { - m_pXFADoc->SavePackage(XFA_HASHCODE_Form, &fileStream, nullptr); - } else if (pPrePDFObj->GetString() == "datasets") { - m_pXFADoc->SavePackage(XFA_HASHCODE_Datasets, &fileStream, nullptr); - } else { - // PDF,creator. - } + return TRUE; + } + + if (fileType != FXFA_SAVEAS_XDP) + return TRUE; + + if (!flag) { + flag = FXFA_CONFIG | FXFA_TEMPLATE | FXFA_LOCALESET | FXFA_DATASETS | + FXFA_XMPMETA | FXFA_XFDF | FXFA_FORM; + } + if (!m_pPDFDoc) { + fileStream.Flush(); + return FALSE; + } + CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); + if (!pRoot) { + fileStream.Flush(); + return FALSE; + } + CPDF_Dictionary* pAcroForm = pRoot->GetDictBy("AcroForm"); + if (!pAcroForm) { + fileStream.Flush(); + return FALSE; + } + CPDF_Array* pArray = ToArray(pAcroForm->GetObjectBy("XFA")); + if (!pArray) { + fileStream.Flush(); + return FALSE; + } + + int size = pArray->GetCount(); + for (int i = 1; i < size; i += 2) { + CPDF_Object* pPDFObj = pArray->GetObjectAt(i); + CPDF_Object* pPrePDFObj = pArray->GetObjectAt(i - 1); + if (!pPrePDFObj->IsString()) + continue; + if (!pPDFObj->IsReference()) + continue; + CPDF_Object* pDirectObj = pPDFObj->GetDirect(); + if (!pDirectObj->IsStream()) + continue; + if (pPrePDFObj->GetString() == "config" && !(flag & FXFA_CONFIG)) + continue; + if (pPrePDFObj->GetString() == "template" && !(flag & FXFA_TEMPLATE)) + continue; + if (pPrePDFObj->GetString() == "localeSet" && !(flag & FXFA_LOCALESET)) + continue; + if (pPrePDFObj->GetString() == "datasets" && !(flag & FXFA_DATASETS)) + continue; + if (pPrePDFObj->GetString() == "xmpmeta" && !(flag & FXFA_XMPMETA)) + continue; + if (pPrePDFObj->GetString() == "xfdf" && !(flag & FXFA_XFDF)) + continue; + if (pPrePDFObj->GetString() == "form" && !(flag & FXFA_FORM)) + continue; + if (pPrePDFObj->GetString() == "form") { + m_pXFADoc->SavePackage(XFA_HASHCODE_Form, &fileStream, nullptr); + } else if (pPrePDFObj->GetString() == "datasets") { + m_pXFADoc->SavePackage(XFA_HASHCODE_Datasets, &fileStream, nullptr); + } else { + // PDF,creator. } } return TRUE; |