diff options
author | Lei Zhang <thestig@chromium.org> | 2018-06-08 20:40:15 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-06-08 20:40:15 +0000 |
commit | fc615c63d34037896963f636e4b5d9e05efd41de (patch) | |
tree | 30ab4b41c8eaf07297ff1255b2d62c1cccde9377 /fpdfsdk | |
parent | 8ef4ef26481d8ed80d33b898bcff829fa7c0999c (diff) | |
download | pdfium-fc615c63d34037896963f636e4b5d9e05efd41de.tar.xz |
Add constants for PDF 1.7 spec, table 3.27.
BUG=pdfium:1049
Change-Id: Ie8bdb893d2af8d63420027a7ef95baf58cd97aa6
Reviewed-on: https://pdfium-review.googlesource.com/34691
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Diffstat (limited to 'fpdfsdk')
-rw-r--r-- | fpdfsdk/fpdf_editpage.cpp | 11 | ||||
-rw-r--r-- | fpdfsdk/fpdf_flatten.cpp | 37 | ||||
-rw-r--r-- | fpdfsdk/fpdf_ppo.cpp | 69 | ||||
-rw-r--r-- | fpdfsdk/fpdf_transformpage.cpp | 24 |
4 files changed, 88 insertions, 53 deletions
diff --git a/fpdfsdk/fpdf_editpage.cpp b/fpdfsdk/fpdf_editpage.cpp index 0a8a74577b..d8b39b4d08 100644 --- a/fpdfsdk/fpdf_editpage.cpp +++ b/fpdfsdk/fpdf_editpage.cpp @@ -11,6 +11,7 @@ #include <utility> #include <vector> +#include "constants/page_object.h" #include "core/fpdfapi/edit/cpdf_pagecontentgenerator.h" #include "core/fpdfapi/page/cpdf_form.h" #include "core/fpdfapi/page/cpdf_formobject.h" @@ -186,9 +187,10 @@ FPDF_EXPORT FPDF_PAGE FPDF_CALLCONV FPDFPage_New(FPDF_DOCUMENT document, if (!pPageDict) return nullptr; - pPageDict->SetRectFor("MediaBox", CFX_FloatRect(0, 0, width, height)); - pPageDict->SetNewFor<CPDF_Number>("Rotate", 0); - pPageDict->SetNewFor<CPDF_Dictionary>("Resources"); + pPageDict->SetRectFor(pdfium::page_object::kMediaBox, + CFX_FloatRect(0, 0, width, height)); + pPageDict->SetNewFor<CPDF_Number>(pdfium::page_object::kRotate, 0); + pPageDict->SetNewFor<CPDF_Dictionary>(pdfium::page_object::kResources); #ifdef PDF_ENABLE_XFA auto* pContext = static_cast<CPDFXFA_Context*>(pDoc->GetExtension()); @@ -492,7 +494,8 @@ FPDF_EXPORT void FPDF_CALLCONV FPDFPage_SetRotation(FPDF_PAGE page, return; rotate %= 4; - pPage->GetDict()->SetNewFor<CPDF_Number>("Rotate", rotate * 90); + pPage->GetDict()->SetNewFor<CPDF_Number>(pdfium::page_object::kRotate, + rotate * 90); } FPDF_BOOL FPDFPageObj_SetFillColor(FPDF_PAGEOBJECT page_object, diff --git a/fpdfsdk/fpdf_flatten.cpp b/fpdfsdk/fpdf_flatten.cpp index d32c1f15cf..d35cfe370d 100644 --- a/fpdfsdk/fpdf_flatten.cpp +++ b/fpdfsdk/fpdf_flatten.cpp @@ -11,6 +11,7 @@ #include <utility> #include <vector> +#include "constants/page_object.h" #include "core/fpdfapi/page/cpdf_page.h" #include "core/fpdfapi/page/cpdf_pageobject.h" #include "core/fpdfapi/parser/cpdf_array.h" @@ -56,7 +57,7 @@ void GetContentsRect(CPDF_Document* pDoc, rc.right = pPageObject->m_Right; rc.bottom = pPageObject->m_Bottom; rc.top = pPageObject->m_Top; - if (IsValidRect(rc, pDict->GetRectFor("MediaBox"))) + if (IsValidRect(rc, pDict->GetRectFor(pdfium::page_object::kMediaBox))) pRectArray->push_back(rc); } } @@ -73,7 +74,7 @@ void ParserStream(CPDF_Dictionary* pPageDic, else if (pStream->KeyExist("BBox")) rect = pStream->GetRectFor("BBox"); - if (IsValidRect(rect, pPageDic->GetRectFor("MediaBox"))) + if (IsValidRect(rect, pPageDic->GetRectFor(pdfium::page_object::kMediaBox))) pRectArray->push_back(rect); pObjectArray->push_back(pStream); @@ -183,18 +184,20 @@ void SetPageContents(const ByteString& key, CPDF_Dictionary* pPage, CPDF_Document* pDocument) { CPDF_Array* pContentsArray = nullptr; - CPDF_Stream* pContentsStream = pPage->GetStreamFor("Contents"); + CPDF_Stream* pContentsStream = + pPage->GetStreamFor(pdfium::page_object::kContents); if (!pContentsStream) { - pContentsArray = pPage->GetArrayFor("Contents"); + pContentsArray = pPage->GetArrayFor(pdfium::page_object::kContents); if (!pContentsArray) { if (!key.IsEmpty()) { pPage->SetNewFor<CPDF_Reference>( - "Contents", pDocument, NewIndirectContentsStream(key, pDocument)); + pdfium::page_object::kContents, pDocument, + NewIndirectContentsStream(key, pDocument)); } return; } } - pPage->ConvertToIndirectObjectFor("Contents", pDocument); + pPage->ConvertToIndirectObjectFor(pdfium::page_object::kContents, pDocument); if (!pContentsArray) { pContentsArray = pDocument->NewIndirect<CPDF_Array>(); auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pContentsStream); @@ -206,7 +209,7 @@ void SetPageContents(const ByteString& key, sStream.GetLength()); pContentsArray->AddNew<CPDF_Reference>(pDocument, pContentsStream->GetObjNum()); - pPage->SetNewFor<CPDF_Reference>("Contents", pDocument, + pPage->SetNewFor<CPDF_Reference>(pdfium::page_object::kContents, pDocument, pContentsArray->GetObjNum()); } if (!key.IsEmpty()) { @@ -253,9 +256,10 @@ FPDF_EXPORT int FPDF_CALLCONV FPDFPage_Flatten(FPDF_PAGE page, int nFlag) { CFX_FloatRect rcOriginalCB; CFX_FloatRect rcMerger = CalculateRect(&RectArray); - CFX_FloatRect rcOriginalMB = pPageDict->GetRectFor("MediaBox"); - if (pPageDict->KeyExist("CropBox")) - rcOriginalMB = pPageDict->GetRectFor("CropBox"); + CFX_FloatRect rcOriginalMB = + pPageDict->GetRectFor(pdfium::page_object::kMediaBox); + if (pPageDict->KeyExist(pdfium::page_object::kCropBox)) + rcOriginalMB = pPageDict->GetRectFor(pdfium::page_object::kCropBox); if (rcOriginalMB.IsEmpty()) rcOriginalMB = CFX_FloatRect(0.0f, 0.0f, 612.0f, 792.0f); @@ -270,14 +274,17 @@ FPDF_EXPORT int FPDF_CALLCONV FPDFPage_Flatten(FPDF_PAGE page, int nFlag) { rcOriginalCB = rcOriginalMB; if (!rcOriginalMB.IsEmpty()) - pPageDict->SetRectFor("MediaBox", rcOriginalMB); + pPageDict->SetRectFor(pdfium::page_object::kMediaBox, rcOriginalMB); if (!rcOriginalCB.IsEmpty()) pPageDict->SetRectFor("ArtBox", rcOriginalCB); - CPDF_Dictionary* pRes = pPageDict->GetDictFor("Resources"); - if (!pRes) - pRes = pPageDict->SetNewFor<CPDF_Dictionary>("Resources"); + CPDF_Dictionary* pRes = + pPageDict->GetDictFor(pdfium::page_object::kResources); + if (!pRes) { + pRes = + pPageDict->SetNewFor<CPDF_Dictionary>(pdfium::page_object::kResources); + } CPDF_Stream* pNewXObject = pDocument->NewIndirect<CPDF_Stream>( nullptr, 0, @@ -311,7 +318,7 @@ FPDF_EXPORT int FPDF_CALLCONV FPDFPage_Flatten(FPDF_PAGE page, int nFlag) { pNewOXbjectDic->SetNewFor<CPDF_Name>("Type", "XObject"); pNewOXbjectDic->SetNewFor<CPDF_Name>("Subtype", "Form"); pNewOXbjectDic->SetNewFor<CPDF_Number>("FormType", 1); - CFX_FloatRect rcBBox = pPageDict->GetRectFor("ArtBox"); + CFX_FloatRect rcBBox = pPageDict->GetRectFor(pdfium::page_object::kArtBox); pNewOXbjectDic->SetRectFor("BBox", rcBBox); } diff --git a/fpdfsdk/fpdf_ppo.cpp b/fpdfsdk/fpdf_ppo.cpp index b73042466b..c4bd51e603 100644 --- a/fpdfsdk/fpdf_ppo.cpp +++ b/fpdfsdk/fpdf_ppo.cpp @@ -12,6 +12,7 @@ #include <utility> #include <vector> +#include "constants/page_object.h" #include "core/fpdfapi/page/cpdf_page.h" #include "core/fpdfapi/page/cpdf_pageobject.h" #include "core/fpdfapi/parser/cpdf_array.h" @@ -138,17 +139,20 @@ const CPDF_Object* PageDictGetInheritableTag(const CPDF_Dictionary* pDict, const ByteString& bsSrcTag) { if (!pDict || bsSrcTag.IsEmpty()) return nullptr; - if (!pDict->KeyExist("Parent") || !pDict->KeyExist("Type")) + if (!pDict->KeyExist(pdfium::page_object::kParent) || + !pDict->KeyExist(pdfium::page_object::kType)) { return nullptr; + } - const CPDF_Object* pType = pDict->GetObjectFor("Type")->GetDirect(); + const CPDF_Object* pType = + pDict->GetObjectFor(pdfium::page_object::kType)->GetDirect(); if (!ToName(pType)) return nullptr; if (pType->GetString().Compare("Page")) return nullptr; - const CPDF_Dictionary* pp = - ToDictionary(pDict->GetObjectFor("Parent")->GetDirect()); + const CPDF_Dictionary* pp = ToDictionary( + pDict->GetObjectFor(pdfium::page_object::kParent)->GetDirect()); if (!pp) return nullptr; @@ -158,16 +162,17 @@ const CPDF_Object* PageDictGetInheritableTag(const CPDF_Dictionary* pDict, while (pp) { if (pp->KeyExist(bsSrcTag)) return pp->GetObjectFor(bsSrcTag); - if (!pp->KeyExist("Parent")) + if (!pp->KeyExist(pdfium::page_object::kParent)) break; - pp = ToDictionary(pp->GetObjectFor("Parent")->GetDirect()); + pp = ToDictionary( + pp->GetObjectFor(pdfium::page_object::kParent)->GetDirect()); } return nullptr; } CFX_FloatRect GetMediaBox(const CPDF_Dictionary* pPageDict) { const CPDF_Object* pMediaBox = - PageDictGetInheritableTag(pPageDict, "MediaBox"); + PageDictGetInheritableTag(pPageDict, pdfium::page_object::kMediaBox); const CPDF_Array* pArray = ToArray(pMediaBox->GetDirect()); if (!pArray) return CFX_FloatRect(); @@ -175,8 +180,8 @@ CFX_FloatRect GetMediaBox(const CPDF_Dictionary* pPageDict) { } CFX_FloatRect GetCropBox(const CPDF_Dictionary* pPageDict) { - if (pPageDict->KeyExist("CropBox")) - return pPageDict->GetRectFor("CropBox"); + if (pPageDict->KeyExist(pdfium::page_object::kCropBox)) + return pPageDict->GetRectFor(pdfium::page_object::kCropBox); return GetMediaBox(pPageDict); } @@ -188,7 +193,9 @@ CFX_FloatRect GetTrimBox(const CPDF_Dictionary* pPageDict) { const CPDF_Object* GetPageOrganizerPageContent( const CPDF_Dictionary* pPageDict) { - return pPageDict ? pPageDict->GetDirectObjectFor("Contents") : nullptr; + return pPageDict + ? pPageDict->GetDirectObjectFor(pdfium::page_object::kContents) + : nullptr; } bool CopyInheritable(CPDF_Dictionary* pDestPageDict, @@ -473,8 +480,10 @@ bool CPDF_PageExporter::ExportPage(const std::vector<uint32_t>& pageNums, // Clone the page dictionary for (const auto& it : *pSrcPageDict) { const ByteString& cbSrcKeyStr = it.first; - if (cbSrcKeyStr == "Type" || cbSrcKeyStr == "Parent") + if (cbSrcKeyStr == pdfium::page_object::kType || + cbSrcKeyStr == pdfium::page_object::kParent) { continue; + } CPDF_Object* pObj = it.second.get(); pDestPageDict->SetFor(cbSrcKeyStr, pObj->Clone()); @@ -484,30 +493,35 @@ bool CPDF_PageExporter::ExportPage(const std::vector<uint32_t>& pageNums, // Even though some entries are required by the PDF spec, there exist // PDFs that omit them. Set some defaults in this case. // 1 MediaBox - required - if (!CopyInheritable(pDestPageDict, pSrcPageDict, "MediaBox")) { + if (!CopyInheritable(pDestPageDict, pSrcPageDict, + pdfium::page_object::kMediaBox)) { // Search for "CropBox" in the source page dictionary. // If it does not exist, use the default letter size. - const CPDF_Object* pInheritable = - PageDictGetInheritableTag(pSrcPageDict, "CropBox"); + const CPDF_Object* pInheritable = PageDictGetInheritableTag( + pSrcPageDict, pdfium::page_object::kCropBox); if (pInheritable) { - pDestPageDict->SetFor("MediaBox", pInheritable->Clone()); + pDestPageDict->SetFor(pdfium::page_object::kMediaBox, + pInheritable->Clone()); } else { // Make the default size letter size (8.5"x11") static const CFX_FloatRect kDefaultLetterRect(0, 0, 612, 792); - pDestPageDict->SetRectFor("MediaBox", kDefaultLetterRect); + pDestPageDict->SetRectFor(pdfium::page_object::kMediaBox, + kDefaultLetterRect); } } // 2 Resources - required - if (!CopyInheritable(pDestPageDict, pSrcPageDict, "Resources")) { + if (!CopyInheritable(pDestPageDict, pSrcPageDict, + pdfium::page_object::kResources)) { // Use a default empty resources if it does not exist. - pDestPageDict->SetNewFor<CPDF_Dictionary>("Resources"); + pDestPageDict->SetNewFor<CPDF_Dictionary>( + pdfium::page_object::kResources); } // 3 CropBox - optional - CopyInheritable(pDestPageDict, pSrcPageDict, "CropBox"); + CopyInheritable(pDestPageDict, pSrcPageDict, pdfium::page_object::kCropBox); // 4 Rotate - optional - CopyInheritable(pDestPageDict, pSrcPageDict, "Rotate"); + CopyInheritable(pDestPageDict, pSrcPageDict, pdfium::page_object::kRotate); // Update the reference uint32_t dwOldPageObj = pSrcPageDict->GetObjNum(); @@ -607,7 +621,7 @@ bool CPDF_NPageToOneExporter::ExportNPagesToOne( if (!pDestPageDict) return false; - pDestPageDict->SetRectFor("MediaBox", destPageRect); + pDestPageDict->SetRectFor(pdfium::page_object::kMediaBox, destPageRect); ByteString bsContent; size_t innerPageMax = std::min(outerPage + numPagesPerSheet, pageNums.size()); @@ -722,9 +736,12 @@ void CPDF_NPageToOneExporter::FinishPage( const XObjectNameNumberMap& xObjNameNumberMap) { ASSERT(pDestPageDict); - CPDF_Dictionary* pRes = pDestPageDict->GetDictFor("Resources"); - if (!pRes) - pRes = pDestPageDict->SetNewFor<CPDF_Dictionary>("Resources"); + CPDF_Dictionary* pRes = + pDestPageDict->GetDictFor(pdfium::page_object::kResources); + if (!pRes) { + pRes = pDestPageDict->SetNewFor<CPDF_Dictionary>( + pdfium::page_object::kResources); + } CPDF_Dictionary* pPageXObject = pRes->GetDictFor("XObject"); if (!pPageXObject) @@ -737,8 +754,8 @@ void CPDF_NPageToOneExporter::FinishPage( CPDF_Stream* pStream = dest()->NewIndirect<CPDF_Stream>(nullptr, 0, std::move(pDict)); pStream->SetData(bsContent.raw_str(), bsContent.GetLength()); - pDestPageDict->SetNewFor<CPDF_Reference>("Contents", dest(), - pStream->GetObjNum()); + pDestPageDict->SetNewFor<CPDF_Reference>(pdfium::page_object::kContents, + dest(), pStream->GetObjNum()); } } // namespace diff --git a/fpdfsdk/fpdf_transformpage.cpp b/fpdfsdk/fpdf_transformpage.cpp index 210c6b6fde..af6ac792fb 100644 --- a/fpdfsdk/fpdf_transformpage.cpp +++ b/fpdfsdk/fpdf_transformpage.cpp @@ -10,6 +10,7 @@ #include <sstream> #include <vector> +#include "constants/page_object.h" #include "core/fpdfapi/page/cpdf_clippath.h" #include "core/fpdfapi/page/cpdf_page.h" #include "core/fpdfapi/page/cpdf_pageobject.h" @@ -51,7 +52,9 @@ bool GetBoundingBox(CPDF_Page* page, } CPDF_Object* GetPageContent(CPDF_Dictionary* pPageDict) { - return pPageDict ? pPageDict->GetDirectObjectFor("Contents") : nullptr; + return pPageDict + ? pPageDict->GetDirectObjectFor(pdfium::page_object::kContents) + : nullptr; } } // namespace @@ -65,7 +68,8 @@ FPDF_EXPORT void FPDF_CALLCONV FPDFPage_SetMediaBox(FPDF_PAGE page, if (!pPage) return; - SetBoundingBox(pPage, "MediaBox", CFX_FloatRect(left, bottom, right, top)); + SetBoundingBox(pPage, pdfium::page_object::kMediaBox, + CFX_FloatRect(left, bottom, right, top)); } FPDF_EXPORT void FPDF_CALLCONV FPDFPage_SetCropBox(FPDF_PAGE page, @@ -77,7 +81,8 @@ FPDF_EXPORT void FPDF_CALLCONV FPDFPage_SetCropBox(FPDF_PAGE page, if (!pPage) return; - SetBoundingBox(pPage, "CropBox", CFX_FloatRect(left, bottom, right, top)); + SetBoundingBox(pPage, pdfium::page_object::kCropBox, + CFX_FloatRect(left, bottom, right, top)); } FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GetMediaBox(FPDF_PAGE page, @@ -86,7 +91,8 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GetMediaBox(FPDF_PAGE page, float* right, float* top) { CPDF_Page* pPage = CPDFPageFromFPDFPage(page); - return pPage && GetBoundingBox(pPage, "MediaBox", left, bottom, right, top); + return pPage && GetBoundingBox(pPage, pdfium::page_object::kMediaBox, left, + bottom, right, top); } FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GetCropBox(FPDF_PAGE page, @@ -95,7 +101,8 @@ FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GetCropBox(FPDF_PAGE page, float* right, float* top) { CPDF_Page* pPage = CPDFPageFromFPDFPage(page); - return pPage && GetBoundingBox(pPage, "CropBox", left, bottom, right, top); + return pPage && GetBoundingBox(pPage, pdfium::page_object::kCropBox, left, + bottom, right, top); } FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV @@ -151,12 +158,13 @@ FPDFPage_TransFormWithClip(FPDF_PAGE page, pContentArray->AddNew<CPDF_Reference>(pDoc, pStream->GetObjNum()); pContentArray->AddNew<CPDF_Reference>(pDoc, pContentObj->GetObjNum()); pContentArray->AddNew<CPDF_Reference>(pDoc, pEndStream->GetObjNum()); - pPageDict->SetNewFor<CPDF_Reference>("Contents", pDoc, + pPageDict->SetNewFor<CPDF_Reference>(pdfium::page_object::kContents, pDoc, pContentArray->GetObjNum()); } // Need to transform the patterns as well. - CPDF_Dictionary* pRes = pPageDict->GetDictFor("Resources"); + CPDF_Dictionary* pRes = + pPageDict->GetDictFor(pdfium::page_object::kResources); if (pRes) { CPDF_Dictionary* pPattenDict = pRes->GetDictFor("Pattern"); if (pPattenDict) { @@ -302,7 +310,7 @@ FPDF_EXPORT void FPDF_CALLCONV FPDFPage_InsertClipPath(FPDF_PAGE page, CPDF_Array* pContentArray = pDoc->NewIndirect<CPDF_Array>(); pContentArray->AddNew<CPDF_Reference>(pDoc, pStream->GetObjNum()); pContentArray->AddNew<CPDF_Reference>(pDoc, pContentObj->GetObjNum()); - pPageDict->SetNewFor<CPDF_Reference>("Contents", pDoc, + pPageDict->SetNewFor<CPDF_Reference>(pdfium::page_object::kContents, pDoc, pContentArray->GetObjNum()); } } |