diff options
author | Julian Lunger <jlunger@google.com> | 2017-12-27 10:18:50 -0500 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-01-09 23:41:53 +0000 |
commit | ecd063eccdb25cbb573d01fc512a3d40322761be (patch) | |
tree | c190a0305bb384efe82bc08de57fede4814017d6 /core/fpdfapi | |
parent | 81a1ac47e5d93980b59b1c34e8cf1bb22a89a936 (diff) | |
download | pdfium-ecd063eccdb25cbb573d01fc512a3d40322761be.tar.xz |
Expose marked content IDs for images and alt text.
- Adds two new public bits of API:
- StructElement_GetMCID(STRUCTELEMENT) to return the marked content
ID of the struct element.
- IMAGEOBJ_METADATA.mcid to contain the marked content ID of the
image.
- Restores ContentMark::GetMCID, which was removed with other dead
code in https://pdfium-review.googlesource.com/c/pdfium/+/19170.
- Adds a couple calls to tests, including a simple new PDF to test
the struct tree marked content ID.
Bug:pdfium:957
Change-Id: I92856e43d741df989e53a575a08258da19a39f22
Reviewed-on: https://pdfium-review.googlesource.com/20632
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Diffstat (limited to 'core/fpdfapi')
-rw-r--r-- | core/fpdfapi/page/cpdf_contentmark.cpp | 14 | ||||
-rw-r--r-- | core/fpdfapi/page/cpdf_contentmark.h | 2 |
2 files changed, 16 insertions, 0 deletions
diff --git a/core/fpdfapi/page/cpdf_contentmark.cpp b/core/fpdfapi/page/cpdf_contentmark.cpp index 1d70edeb51..c54ef55b1f 100644 --- a/core/fpdfapi/page/cpdf_contentmark.cpp +++ b/core/fpdfapi/page/cpdf_contentmark.cpp @@ -25,6 +25,11 @@ const CPDF_ContentMarkItem& CPDF_ContentMark::GetItem(size_t i) const { return m_Ref.GetObject()->GetItem(i); } +int CPDF_ContentMark::GetMarkedContentID() const { + const MarkData* pData = m_Ref.GetObject(); + return pData ? pData->GetMarkedContentID() : -1; +} + void CPDF_ContentMark::AddMark(const ByteString& name, CPDF_Dictionary* pDict, bool bDirect) { @@ -53,6 +58,15 @@ const CPDF_ContentMarkItem& CPDF_ContentMark::MarkData::GetItem( return m_Marks[index]; } +int CPDF_ContentMark::MarkData::GetMarkedContentID() const { + for (const auto& mark : m_Marks) { + const CPDF_Dictionary* pDict = mark.GetParam(); + if (pDict && pDict->KeyExist("MCID")) + return pDict->GetIntegerFor("MCID"); + } + return -1; +} + void CPDF_ContentMark::MarkData::AddMark(const ByteString& name, CPDF_Dictionary* pDict, bool bDirect) { diff --git a/core/fpdfapi/page/cpdf_contentmark.h b/core/fpdfapi/page/cpdf_contentmark.h index d9bc35a7fb..78a948697e 100644 --- a/core/fpdfapi/page/cpdf_contentmark.h +++ b/core/fpdfapi/page/cpdf_contentmark.h @@ -21,6 +21,7 @@ class CPDF_ContentMark { CPDF_ContentMark(const CPDF_ContentMark& that); ~CPDF_ContentMark(); + int GetMarkedContentID() const; size_t CountItems() const; const CPDF_ContentMarkItem& GetItem(size_t i) const; @@ -39,6 +40,7 @@ class CPDF_ContentMark { size_t CountItems() const; const CPDF_ContentMarkItem& GetItem(size_t index) const; + int GetMarkedContentID() const; void AddMark(const ByteString& name, CPDF_Dictionary* pDict, bool bDictNeedClone); |