summaryrefslogtreecommitdiff
path: root/fpdfsdk
diff options
context:
space:
mode:
authorJane Liu <janeliulwq@google.com>2017-07-05 15:04:33 -0400
committerChromium commit bot <commit-bot@chromium.org>2017-07-06 13:09:26 +0000
commitb137e75343cada31ddcf905fc581a3a86a63b5d5 (patch)
tree69c8a46658e61739da60852b522b5dbfcc3b9cac /fpdfsdk
parentddf2418ba8e5d925909d7955ac22b33f37ccce44 (diff)
downloadpdfium-b137e75343cada31ddcf905fc581a3a86a63b5d5.tar.xz
Added APIs for setting annotation flag values
1. Added APIs for getting/setting/unsetting annotation flag values in annotation dictionaries. * Added an embedder test testing all the new functions. Bug=pdfium:737 Change-Id: Ib6bbcf05d6e93c43ec4dcd7120db71bc244afdbf Reviewed-on: https://pdfium-review.googlesource.com/7154 Reviewed-by: dsinclair <dsinclair@chromium.org> Commit-Queue: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'fpdfsdk')
-rw-r--r--fpdfsdk/fpdfannot.cpp26
-rw-r--r--fpdfsdk/fpdfannot_embeddertest.cpp50
-rw-r--r--fpdfsdk/fpdfview_c_api_test.c2
3 files changed, 78 insertions, 0 deletions
diff --git a/fpdfsdk/fpdfannot.cpp b/fpdfsdk/fpdfannot.cpp
index 4d75e6e236..d7ab8abac1 100644
--- a/fpdfsdk/fpdfannot.cpp
+++ b/fpdfsdk/fpdfannot.cpp
@@ -705,3 +705,29 @@ DLLEXPORT unsigned long STDCALL FPDFAnnot_GetText(FPDF_ANNOTATION annot,
return len;
}
+
+DLLEXPORT int STDCALL FPDFAnnot_GetFlags(FPDF_ANNOTATION annot) {
+ if (!annot)
+ return FPDF_ANNOT_FLAG_NONE;
+
+ CPDF_Dictionary* pAnnotDict =
+ CPDFAnnotContextFromFPDFAnnotation(annot)->GetAnnotDict();
+ if (!pAnnotDict)
+ return FPDF_ANNOT_FLAG_NONE;
+
+ return pAnnotDict->GetIntegerFor("F");
+}
+
+DLLEXPORT FPDF_BOOL STDCALL FPDFAnnot_SetFlags(FPDF_ANNOTATION annot,
+ int flags) {
+ if (!annot)
+ return false;
+
+ CPDF_Dictionary* pAnnotDict =
+ CPDFAnnotContextFromFPDFAnnotation(annot)->GetAnnotDict();
+ if (!pAnnotDict)
+ return false;
+
+ pAnnotDict->SetNewFor<CPDF_Number>("F", flags);
+ return true;
+}
diff --git a/fpdfsdk/fpdfannot_embeddertest.cpp b/fpdfsdk/fpdfannot_embeddertest.cpp
index 6c56c06396..beaedf91af 100644
--- a/fpdfsdk/fpdfannot_embeddertest.cpp
+++ b/fpdfsdk/fpdfannot_embeddertest.cpp
@@ -555,3 +555,53 @@ TEST_F(FPDFAnnotEmbeddertest, AddAndModifyPath) {
FPDFPage_CloseAnnot(annot);
CloseSaved();
}
+
+TEST_F(FPDFAnnotEmbeddertest, ModifyAnnotationFlags) {
+ // Open a file with an annotation and load its first page.
+ ASSERT_TRUE(OpenDocument("annotation_highlight_rollover_ap.pdf"));
+ FPDF_PAGE page = FPDF_LoadPage(document(), 0);
+ ASSERT_TRUE(page);
+
+ // Check that the page renders correctly.
+ FPDF_BITMAP bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+ CompareBitmap(bitmap, 612, 792, "dc98f06da047bd8aabfa99562d2cbd1e");
+ FPDFBitmap_Destroy(bitmap);
+
+ // Retrieve the annotation.
+ FPDF_ANNOTATION annot = FPDFPage_GetAnnot(page, 0);
+ ASSERT_TRUE(annot);
+
+ // Check that the original flag values are as expected.
+ int flags = FPDFAnnot_GetFlags(annot);
+ EXPECT_FALSE(flags & FPDF_ANNOT_FLAG_HIDDEN);
+ EXPECT_TRUE(flags & FPDF_ANNOT_FLAG_PRINT);
+
+ // Set the HIDDEN flag.
+ flags |= FPDF_ANNOT_FLAG_HIDDEN;
+ EXPECT_TRUE(FPDFAnnot_SetFlags(annot, flags));
+ flags = FPDFAnnot_GetFlags(annot);
+ EXPECT_TRUE(flags & FPDF_ANNOT_FLAG_HIDDEN);
+ EXPECT_TRUE(flags & FPDF_ANNOT_FLAG_PRINT);
+
+ // Check that the page renders correctly without rendering the annotation.
+ bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+ CompareBitmap(bitmap, 612, 792, "1940568c9ba33bac5d0b1ee9558c76b3");
+ FPDFBitmap_Destroy(bitmap);
+
+ // Unset the HIDDEN flag.
+ EXPECT_TRUE(FPDFAnnot_SetFlags(annot, FPDF_ANNOT_FLAG_NONE));
+ EXPECT_FALSE(FPDFAnnot_GetFlags(annot));
+ flags &= ~FPDF_ANNOT_FLAG_HIDDEN;
+ EXPECT_TRUE(FPDFAnnot_SetFlags(annot, flags));
+ flags = FPDFAnnot_GetFlags(annot);
+ EXPECT_FALSE(flags & FPDF_ANNOT_FLAG_HIDDEN);
+ EXPECT_TRUE(flags & FPDF_ANNOT_FLAG_PRINT);
+
+ // Check that the page renders correctly as before.
+ bitmap = RenderPageWithFlags(page, form_handle_, FPDF_ANNOT);
+ CompareBitmap(bitmap, 612, 792, "dc98f06da047bd8aabfa99562d2cbd1e");
+ FPDFBitmap_Destroy(bitmap);
+
+ FPDFPage_CloseAnnot(annot);
+ UnloadPage(page);
+}
diff --git a/fpdfsdk/fpdfview_c_api_test.c b/fpdfsdk/fpdfview_c_api_test.c
index 94f4051bcd..01c318912f 100644
--- a/fpdfsdk/fpdfview_c_api_test.c
+++ b/fpdfsdk/fpdfview_c_api_test.c
@@ -55,6 +55,8 @@ int CheckPDFiumCApi() {
CHK(FPDFAnnot_GetRect);
CHK(FPDFAnnot_SetText);
CHK(FPDFAnnot_GetText);
+ CHK(FPDFAnnot_GetFlags);
+ CHK(FPDFAnnot_SetFlags);
// fpdf_dataavail.h
CHK(FPDFAvail_Create);