• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "public/fpdf_edit.h"
6 
7 #include "core/fpdfapi/page/cpdf_pagemodule.h"
8 #include "public/cpp/fpdf_scopers.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "testing/utils/file_util.h"
11 
12 class PDFEditImgTest : public testing::Test {
SetUp()13   void SetUp() override { CPDF_PageModule::Create(); }
TearDown()14   void TearDown() override { CPDF_PageModule::Destroy(); }
15 };
16 
TEST_F(PDFEditImgTest,InsertObjectWithInvalidPage)17 TEST_F(PDFEditImgTest, InsertObjectWithInvalidPage) {
18   FPDF_DOCUMENT doc = FPDF_CreateNewDocument();
19   FPDF_PAGE page = FPDFPage_New(doc, 0, 100, 100);
20   EXPECT_EQ(0, FPDFPage_CountObjects(page));
21 
22   FPDFPage_InsertObject(nullptr, nullptr);
23   EXPECT_EQ(0, FPDFPage_CountObjects(page));
24 
25   FPDFPage_InsertObject(page, nullptr);
26   EXPECT_EQ(0, FPDFPage_CountObjects(page));
27 
28   FPDF_PAGEOBJECT page_image = FPDFPageObj_NewImageObj(doc);
29   FPDFPage_InsertObject(nullptr, page_image);
30   EXPECT_EQ(0, FPDFPage_CountObjects(page));
31 
32   FPDF_ClosePage(page);
33   FPDF_CloseDocument(doc);
34 }
35 
TEST_F(PDFEditImgTest,NewImageObj)36 TEST_F(PDFEditImgTest, NewImageObj) {
37   FPDF_DOCUMENT doc = FPDF_CreateNewDocument();
38   FPDF_PAGE page = FPDFPage_New(doc, 0, 100, 100);
39   EXPECT_EQ(0, FPDFPage_CountObjects(page));
40 
41   FPDF_PAGEOBJECT page_image = FPDFPageObj_NewImageObj(doc);
42   FPDFPage_InsertObject(page, page_image);
43   EXPECT_EQ(1, FPDFPage_CountObjects(page));
44   EXPECT_TRUE(FPDFPage_GenerateContent(page));
45 
46   FPDF_ClosePage(page);
47   FPDF_CloseDocument(doc);
48 }
49 
TEST_F(PDFEditImgTest,NewImageObjGenerateContent)50 TEST_F(PDFEditImgTest, NewImageObjGenerateContent) {
51   FPDF_DOCUMENT doc = FPDF_CreateNewDocument();
52   FPDF_PAGE page = FPDFPage_New(doc, 0, 100, 100);
53   EXPECT_EQ(0, FPDFPage_CountObjects(page));
54 
55   constexpr int kBitmapSize = 50;
56   FPDF_BITMAP bitmap = FPDFBitmap_Create(kBitmapSize, kBitmapSize, 0);
57   FPDFBitmap_FillRect(bitmap, 0, 0, kBitmapSize, kBitmapSize, 0x00000000);
58   EXPECT_EQ(kBitmapSize, FPDFBitmap_GetWidth(bitmap));
59   EXPECT_EQ(kBitmapSize, FPDFBitmap_GetHeight(bitmap));
60 
61   FPDF_PAGEOBJECT page_image = FPDFPageObj_NewImageObj(doc);
62   ASSERT_TRUE(FPDFImageObj_SetBitmap(&page, 0, page_image, bitmap));
63   ASSERT_TRUE(
64       FPDFImageObj_SetMatrix(page_image, kBitmapSize, 0, 0, kBitmapSize, 0, 0));
65   FPDFPage_InsertObject(page, page_image);
66   EXPECT_EQ(1, FPDFPage_CountObjects(page));
67   EXPECT_TRUE(FPDFPage_GenerateContent(page));
68 
69   FPDFBitmap_Destroy(bitmap);
70   FPDF_ClosePage(page);
71   FPDF_CloseDocument(doc);
72 }
73 
TEST_F(PDFEditImgTest,NewImageObjLoadJpeg)74 TEST_F(PDFEditImgTest, NewImageObjLoadJpeg) {
75   ScopedFPDFDocument doc(FPDF_CreateNewDocument());
76   ScopedFPDFPage page(FPDFPage_New(doc.get(), 0, 200, 200));
77   ASSERT_TRUE(page);
78 
79   ScopedFPDFPageObject image(FPDFPageObj_NewImageObj(doc.get()));
80   ASSERT_TRUE(image);
81 
82   FileAccessForTesting file_access("mona_lisa.jpg");
83   FPDF_PAGE temp_page = page.get();
84   EXPECT_TRUE(
85       FPDFImageObj_LoadJpegFile(&temp_page, 1, image.get(), &file_access));
86 
87   ScopedFPDFBitmap bitmap(FPDFImageObj_GetBitmap(image.get()));
88   EXPECT_TRUE(bitmap);
89   EXPECT_EQ(120, FPDFBitmap_GetWidth(bitmap.get()));
90   EXPECT_EQ(120, FPDFBitmap_GetHeight(bitmap.get()));
91 }
92 
TEST_F(PDFEditImgTest,NewImageObjLoadJpegInline)93 TEST_F(PDFEditImgTest, NewImageObjLoadJpegInline) {
94   ScopedFPDFDocument doc(FPDF_CreateNewDocument());
95   ScopedFPDFPage page(FPDFPage_New(doc.get(), 0, 200, 200));
96   ASSERT_TRUE(page);
97 
98   ScopedFPDFPageObject image(FPDFPageObj_NewImageObj(doc.get()));
99   ASSERT_TRUE(image);
100 
101   FileAccessForTesting file_access("mona_lisa.jpg");
102   FPDF_PAGE temp_page = page.get();
103   EXPECT_TRUE(FPDFImageObj_LoadJpegFileInline(&temp_page, 1, image.get(),
104                                               &file_access));
105 
106   ScopedFPDFBitmap bitmap(FPDFImageObj_GetBitmap(image.get()));
107   EXPECT_TRUE(bitmap);
108   EXPECT_EQ(120, FPDFBitmap_GetWidth(bitmap.get()));
109   EXPECT_EQ(120, FPDFBitmap_GetHeight(bitmap.get()));
110 }
111 
TEST_F(PDFEditImgTest,SetBitmap)112 TEST_F(PDFEditImgTest, SetBitmap) {
113   ScopedFPDFDocument doc(FPDF_CreateNewDocument());
114   ScopedFPDFPage page(FPDFPage_New(doc.get(), 0, 100, 100));
115   ScopedFPDFPageObject image(FPDFPageObj_NewImageObj(doc.get()));
116   ScopedFPDFBitmap bitmap(FPDFBitmap_Create(100, 100, 0));
117 
118   FPDF_PAGE page_ptr = page.get();
119   FPDF_PAGE* pages = &page_ptr;
120   EXPECT_TRUE(FPDFImageObj_SetBitmap(nullptr, 1, image.get(), bitmap.get()));
121   EXPECT_TRUE(FPDFImageObj_SetBitmap(pages, 0, image.get(), bitmap.get()));
122   EXPECT_FALSE(FPDFImageObj_SetBitmap(pages, 1, nullptr, bitmap.get()));
123   EXPECT_FALSE(FPDFImageObj_SetBitmap(pages, 1, image.get(), nullptr));
124 }
125 
TEST_F(PDFEditImgTest,GetSetImageMatrix)126 TEST_F(PDFEditImgTest, GetSetImageMatrix) {
127   FPDF_DOCUMENT doc = FPDF_CreateNewDocument();
128   FPDF_PAGEOBJECT image = FPDFPageObj_NewImageObj(doc);
129 
130   double a;
131   double b;
132   double c;
133   double d;
134   double e;
135   double f;
136   EXPECT_FALSE(FPDFImageObj_GetMatrix(nullptr, nullptr, nullptr, nullptr,
137                                       nullptr, nullptr, nullptr));
138   EXPECT_FALSE(FPDFImageObj_GetMatrix(nullptr, &a, nullptr, nullptr, nullptr,
139                                       nullptr, nullptr));
140   EXPECT_FALSE(FPDFImageObj_GetMatrix(nullptr, &a, &b, nullptr, nullptr,
141                                       nullptr, nullptr));
142   EXPECT_FALSE(
143       FPDFImageObj_GetMatrix(nullptr, &a, &b, &c, nullptr, nullptr, nullptr));
144   EXPECT_FALSE(
145       FPDFImageObj_GetMatrix(nullptr, &a, &b, &c, nullptr, nullptr, nullptr));
146   EXPECT_FALSE(
147       FPDFImageObj_GetMatrix(nullptr, &a, &b, &c, &d, nullptr, nullptr));
148   EXPECT_FALSE(FPDFImageObj_GetMatrix(nullptr, &a, &b, &c, &d, &e, nullptr));
149   EXPECT_FALSE(FPDFImageObj_GetMatrix(nullptr, &a, &b, &c, &d, &e, &f));
150   EXPECT_FALSE(FPDFImageObj_GetMatrix(nullptr, &a, nullptr, &c, &d, &e, &f));
151 
152   EXPECT_FALSE(FPDFImageObj_GetMatrix(image, nullptr, nullptr, nullptr, nullptr,
153                                       nullptr, nullptr));
154   EXPECT_FALSE(FPDFImageObj_GetMatrix(image, &a, nullptr, nullptr, nullptr,
155                                       nullptr, nullptr));
156   EXPECT_FALSE(FPDFImageObj_GetMatrix(image, &a, &b, nullptr, nullptr, nullptr,
157                                       nullptr));
158   EXPECT_FALSE(
159       FPDFImageObj_GetMatrix(image, &a, &b, &c, nullptr, nullptr, nullptr));
160   EXPECT_FALSE(
161       FPDFImageObj_GetMatrix(image, &a, &b, &c, nullptr, nullptr, nullptr));
162   EXPECT_FALSE(FPDFImageObj_GetMatrix(image, &a, &b, &c, &d, nullptr, nullptr));
163   EXPECT_FALSE(FPDFImageObj_GetMatrix(image, &a, &b, &c, &d, &e, nullptr));
164   EXPECT_FALSE(FPDFImageObj_GetMatrix(image, &a, nullptr, &c, &d, &e, &f));
165 
166   EXPECT_TRUE(FPDFImageObj_GetMatrix(image, &a, &b, &c, &d, &e, &f));
167   EXPECT_DOUBLE_EQ(1.0, a);
168   EXPECT_DOUBLE_EQ(0.0, b);
169   EXPECT_DOUBLE_EQ(0.0, c);
170   EXPECT_DOUBLE_EQ(1.0, d);
171   EXPECT_DOUBLE_EQ(0.0, e);
172   EXPECT_DOUBLE_EQ(0.0, f);
173 
174   EXPECT_TRUE(FPDFImageObj_SetMatrix(image, 1, 2, 3, 4, 5, 6));
175   EXPECT_TRUE(FPDFImageObj_GetMatrix(image, &a, &b, &c, &d, &e, &f));
176   EXPECT_DOUBLE_EQ(1.0, a);
177   EXPECT_DOUBLE_EQ(2.0, b);
178   EXPECT_DOUBLE_EQ(3.0, c);
179   EXPECT_DOUBLE_EQ(4.0, d);
180   EXPECT_DOUBLE_EQ(5.0, e);
181   EXPECT_DOUBLE_EQ(6.0, f);
182 
183   FPDFPageObj_Destroy(image);
184   FPDF_CloseDocument(doc);
185 }
186