Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
fpdf_editimg_embeddertest.cpp
Go to the documentation of this file.
1// Copyright 2016 The PDFium Authors
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 "public/cpp/fpdf_scopers.h"
8#include "testing/embedder_test.h"
9#include "testing/utils/file_util.h"
10
11class PDFEditImgTest : public EmbedderTest {};
12
14 ScopedFPDFDocument doc(FPDF_CreateNewDocument());
15 ScopedFPDFPage page(FPDFPage_New(doc.get(), 0, 100, 100));
16 EXPECT_EQ(0, FPDFPage_CountObjects(page.get()));
17
18 FPDFPage_InsertObject(nullptr, nullptr);
19 EXPECT_EQ(0, FPDFPage_CountObjects(page.get()));
20
21 FPDFPage_InsertObject(page.get(), nullptr);
22 EXPECT_EQ(0, FPDFPage_CountObjects(page.get()));
23
24 FPDFPage_InsertObject(nullptr, FPDFPageObj_NewImageObj(doc.get()));
25 EXPECT_EQ(0, FPDFPage_CountObjects(page.get()));
26}
27
29 ScopedFPDFDocument doc(FPDF_CreateNewDocument());
30 ScopedFPDFPage page(FPDFPage_New(doc.get(), 0, 100, 100));
31 EXPECT_EQ(0, FPDFPage_CountObjects(page.get()));
32
33 FPDFPage_InsertObject(page.get(), FPDFPageObj_NewImageObj(doc.get()));
34 EXPECT_EQ(1, FPDFPage_CountObjects(page.get()));
35 EXPECT_TRUE(FPDFPage_GenerateContent(page.get()));
36}
37
39 ScopedFPDFDocument doc(FPDF_CreateNewDocument());
40 ScopedFPDFPage page(FPDFPage_New(doc.get(), 0, 100, 100));
41 EXPECT_EQ(0, FPDFPage_CountObjects(page.get()));
42
43 constexpr int kBitmapSize = 50;
44 ScopedFPDFBitmap bitmap(FPDFBitmap_Create(kBitmapSize, kBitmapSize, 0));
45 ASSERT_TRUE(FPDFBitmap_FillRect(bitmap.get(), 0, 0, kBitmapSize, kBitmapSize,
46 0x00000000));
47 EXPECT_EQ(kBitmapSize, FPDFBitmap_GetWidth(bitmap.get()));
48 EXPECT_EQ(kBitmapSize, FPDFBitmap_GetHeight(bitmap.get()));
49
50 ScopedFPDFPageObject page_image(FPDFPageObj_NewImageObj(doc.get()));
51 FPDF_PAGE pages_array[] = {page.get()};
52 ASSERT_TRUE(
53 FPDFImageObj_SetBitmap(pages_array, 0, page_image.get(), bitmap.get()));
54 static constexpr FS_MATRIX kScaleBitmapMatrix{kBitmapSize, 0, 0,
55 kBitmapSize, 0, 0};
56 ASSERT_TRUE(FPDFPageObj_SetMatrix(page_image.get(), &kScaleBitmapMatrix));
57 FPDFPage_InsertObject(page.get(), page_image.release());
58 EXPECT_EQ(1, FPDFPage_CountObjects(page.get()));
59 EXPECT_TRUE(FPDFPage_GenerateContent(page.get()));
60}
61
63 CreateEmptyDocumentWithoutFormFillEnvironment();
64 constexpr int kPageWidth = 200;
65 constexpr int kPageHeight = 200;
66 ScopedFPDFPage page(FPDFPage_New(document(), 0, kPageWidth, kPageHeight));
67 ASSERT_TRUE(page);
68
69 ScopedFPDFPageObject image(FPDFPageObj_NewImageObj(document()));
70 ASSERT_TRUE(image);
71
72 FileAccessForTesting file_access("mona_lisa.jpg");
73 FPDF_PAGE temp_page = page.get();
74 EXPECT_TRUE(
75 FPDFImageObj_LoadJpegFile(&temp_page, 1, image.get(), &file_access));
76
77 constexpr int kImageWidth = 120;
78 constexpr int kImageHeight = 120;
79 const char kImageChecksum[] = "58589c36b3b27a0058f5ca1fbed4d5e5";
80 const char kPageChecksum[] = "52b3a852f39c5fa9143e59d805dcb343";
81 {
82 ScopedFPDFBitmap image_bitmap(FPDFImageObj_GetBitmap(image.get()));
83 CompareBitmap(image_bitmap.get(), kImageWidth, kImageHeight,
84 kImageChecksum);
85 }
86
87 FPDFImageObj_SetMatrix(image.get(), kImageWidth, 0, 0, kImageHeight, 0, 0);
88 FPDFPage_InsertObject(page.get(), image.release());
89 FPDFPage_GenerateContent(page.get());
90 {
91 ScopedFPDFBitmap page_bitmap = RenderPage(page.get());
92 CompareBitmap(page_bitmap.get(), kPageWidth, kPageHeight, kPageChecksum);
93 }
94
95 ASSERT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
96 VerifySavedDocument(kPageWidth, kPageHeight, kPageChecksum);
97}
98
100 CreateEmptyDocumentWithoutFormFillEnvironment();
101 constexpr int kPageWidth = 200;
102 constexpr int kPageHeight = 200;
103 ScopedFPDFPage page(FPDFPage_New(document(), 0, kPageWidth, kPageHeight));
104 ASSERT_TRUE(page);
105
106 ScopedFPDFPageObject image(FPDFPageObj_NewImageObj(document()));
107 ASSERT_TRUE(image);
108
109 FileAccessForTesting file_access("mona_lisa.jpg");
110 FPDF_PAGE temp_page = page.get();
111 EXPECT_TRUE(FPDFImageObj_LoadJpegFileInline(&temp_page, 1, image.get(),
112 &file_access));
113
114 constexpr int kImageWidth = 120;
115 constexpr int kImageHeight = 120;
116 const char kImageChecksum[] = "58589c36b3b27a0058f5ca1fbed4d5e5";
117 const char kPageChecksum[] = "52b3a852f39c5fa9143e59d805dcb343";
118 {
119 ScopedFPDFBitmap image_bitmap(FPDFImageObj_GetBitmap(image.get()));
120 CompareBitmap(image_bitmap.get(), kImageWidth, kImageHeight,
121 kImageChecksum);
122 }
123
124 FPDFImageObj_SetMatrix(image.get(), kImageWidth, 0, 0, kImageHeight, 0, 0);
125 FPDFPage_InsertObject(page.get(), image.release());
126 FPDFPage_GenerateContent(page.get());
127 {
128 ScopedFPDFBitmap page_bitmap = RenderPage(page.get());
129 CompareBitmap(page_bitmap.get(), kPageWidth, kPageHeight, kPageChecksum);
130 }
131
132 ASSERT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
133 VerifySavedDocument(kPageWidth, kPageHeight, kPageChecksum);
134}
135
137 ScopedFPDFDocument doc(FPDF_CreateNewDocument());
138 ScopedFPDFPage page(FPDFPage_New(doc.get(), 0, 100, 100));
139 ScopedFPDFPageObject image(FPDFPageObj_NewImageObj(doc.get()));
140 ScopedFPDFBitmap bitmap(FPDFBitmap_Create(100, 100, 0));
141
142 FPDF_PAGE page_ptr = page.get();
143 FPDF_PAGE* pages = &page_ptr;
144 EXPECT_TRUE(FPDFImageObj_SetBitmap(nullptr, 1, image.get(), bitmap.get()));
145 EXPECT_TRUE(FPDFImageObj_SetBitmap(pages, 0, image.get(), bitmap.get()));
146 EXPECT_FALSE(FPDFImageObj_SetBitmap(pages, 1, nullptr, bitmap.get()));
147 EXPECT_FALSE(FPDFImageObj_SetBitmap(pages, 1, image.get(), nullptr));
148}
149
151 ScopedFPDFDocument doc(FPDF_CreateNewDocument());
152 ScopedFPDFPageObject image(FPDFPageObj_NewImageObj(doc.get()));
153
154 FS_MATRIX matrix;
155 EXPECT_FALSE(FPDFPageObj_GetMatrix(nullptr, nullptr));
156 EXPECT_FALSE(FPDFPageObj_GetMatrix(nullptr, &matrix));
157 EXPECT_FALSE(FPDFPageObj_GetMatrix(image.get(), nullptr));
158
159 EXPECT_TRUE(FPDFPageObj_GetMatrix(image.get(), &matrix));
160 EXPECT_FLOAT_EQ(1.0f, matrix.a);
161 EXPECT_FLOAT_EQ(0.0f, matrix.b);
162 EXPECT_FLOAT_EQ(0.0f, matrix.c);
163 EXPECT_FLOAT_EQ(1.0f, matrix.d);
164 EXPECT_FLOAT_EQ(0.0f, matrix.e);
165 EXPECT_FLOAT_EQ(0.0f, matrix.f);
166
167 static constexpr FS_MATRIX kMatrix{1, 2, 3, 4, 5, 6};
168 EXPECT_TRUE(FPDFPageObj_SetMatrix(image.get(), &kMatrix));
169 EXPECT_TRUE(FPDFPageObj_GetMatrix(image.get(), &matrix));
170 EXPECT_FLOAT_EQ(1.0f, matrix.a);
171 EXPECT_FLOAT_EQ(2.0f, matrix.b);
172 EXPECT_FLOAT_EQ(3.0f, matrix.c);
173 EXPECT_FLOAT_EQ(4.0f, matrix.d);
174 EXPECT_FLOAT_EQ(5.0f, matrix.e);
175 EXPECT_FLOAT_EQ(6.0f, matrix.f);
176}
177
179 constexpr int kExpectedWidth = 200;
180 constexpr int kExpectedHeight = 300;
181 constexpr char kExpectedChecksum[] = "617b1d57c30c516beee86e0781ff7810";
182
183 OpenDocument("bug_2132.pdf");
184 FPDF_PAGE page = LoadPage(0);
185 ASSERT_TRUE(page);
186
187 {
188 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
189 CompareBitmap(bitmap.get(), kExpectedWidth, kExpectedHeight,
190 kExpectedChecksum);
191 }
192
193 FPDF_PAGEOBJECT image = FPDFPage_GetObject(page, 0);
194 ASSERT_TRUE(image);
196
197 FS_MATRIX matrix;
198 ASSERT_TRUE(FPDFPageObj_GetMatrix(image, &matrix));
199 EXPECT_FLOAT_EQ(60.0f, matrix.a);
200 EXPECT_FLOAT_EQ(0.0f, matrix.b);
201 EXPECT_FLOAT_EQ(0.0f, matrix.c);
202 EXPECT_FLOAT_EQ(30.0f, matrix.d);
203 EXPECT_FLOAT_EQ(0.0f, matrix.e);
204 EXPECT_FLOAT_EQ(270.0f, matrix.f);
205
206 ASSERT_TRUE(FPDFPageObj_SetMatrix(image, &matrix));
207 {
208 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
209 CompareBitmap(bitmap.get(), kExpectedWidth, kExpectedHeight,
210 kExpectedChecksum);
211 }
212
213 ASSERT_TRUE(FPDFPage_GenerateContent(page));
214 ASSERT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
215
216 {
217 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
218 CompareBitmap(bitmap.get(), kExpectedWidth, kExpectedHeight,
219 kExpectedChecksum);
220 }
221
222 UnloadPage(page);
223
224 VerifySavedDocument(kExpectedWidth, kExpectedHeight, kExpectedChecksum);
225}
226
228 constexpr int kExpectedWidth = 200;
229 constexpr int kExpectedHeight = 300;
230 constexpr char kExpectedChecksum[] = "fcb9007fd901d2052e2bd1c147b82800";
231
232 OpenDocument("form_object_with_image.pdf");
233 FPDF_PAGE page = LoadPage(0);
234 ASSERT_TRUE(page);
235
236 {
237 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
238 CompareBitmap(bitmap.get(), kExpectedWidth, kExpectedHeight,
239 kExpectedChecksum);
240 }
241
242 FPDF_PAGEOBJECT form = FPDFPage_GetObject(page, 0);
243 ASSERT_TRUE(form);
245
246 FS_MATRIX matrix;
247 ASSERT_TRUE(FPDFPageObj_GetMatrix(form, &matrix));
248 EXPECT_FLOAT_EQ(60.0f, matrix.a);
249 EXPECT_FLOAT_EQ(0.0f, matrix.b);
250 EXPECT_FLOAT_EQ(0.0f, matrix.c);
251 EXPECT_FLOAT_EQ(30.0f, matrix.d);
252 EXPECT_FLOAT_EQ(0.0f, matrix.e);
253 EXPECT_FLOAT_EQ(270.0f, matrix.f);
254
255 ASSERT_TRUE(FPDFPageObj_SetMatrix(form, &matrix));
256 {
257 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
258 CompareBitmap(bitmap.get(), kExpectedWidth, kExpectedHeight,
259 kExpectedChecksum);
260 }
261
262 FPDF_PAGEOBJECT image = FPDFFormObj_GetObject(form, 0);
263 ASSERT_TRUE(image);
265
266 ASSERT_TRUE(FPDFPageObj_GetMatrix(image, &matrix));
267 EXPECT_FLOAT_EQ(1.0f, matrix.a);
268 EXPECT_FLOAT_EQ(0.0f, matrix.b);
269 EXPECT_FLOAT_EQ(0.0f, matrix.c);
270 EXPECT_FLOAT_EQ(1.0f, matrix.d);
271 EXPECT_FLOAT_EQ(1.0f, matrix.e);
272 EXPECT_FLOAT_EQ(0.0f, matrix.f);
273
274 ASSERT_TRUE(FPDFPageObj_SetMatrix(image, &matrix));
275 {
276 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
277 CompareBitmap(bitmap.get(), kExpectedWidth, kExpectedHeight,
278 kExpectedChecksum);
279 }
280
281 ASSERT_TRUE(FPDFPage_GenerateContent(page));
282 ASSERT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
283
284 {
285 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
286 CompareBitmap(bitmap.get(), kExpectedWidth, kExpectedHeight,
287 kExpectedChecksum);
288 }
289
290 UnloadPage(page);
291
292 VerifySavedDocument(kExpectedWidth, kExpectedHeight, kExpectedChecksum);
293}
FPDF_EXPORT void FPDF_CALLCONV FPDFPage_InsertObject(FPDF_PAGE page, FPDF_PAGEOBJECT page_object)
FPDF_EXPORT FPDF_DOCUMENT FPDF_CALLCONV FPDF_CreateNewDocument()
FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPage_GetObject(FPDF_PAGE page, int index)
FPDF_EXPORT int FPDF_CALLCONV FPDFPageObj_GetType(FPDF_PAGEOBJECT page_object)
#define FPDF_PAGEOBJ_IMAGE
Definition fpdf_edit.h:41
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_SetMatrix(FPDF_PAGEOBJECT page_object, const FS_MATRIX *matrix)
#define FPDF_PAGEOBJ_FORM
Definition fpdf_edit.h:43
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPage_GenerateContent(FPDF_PAGE page)
FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFFormObj_GetObject(FPDF_PAGEOBJECT form_object, unsigned long index)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetMatrix(FPDF_PAGEOBJECT page_object, FS_MATRIX *matrix)
TEST_F(PDFEditImgTest, InsertObjectWithInvalidPage)
FPDF_EXPORT FPDF_BITMAP FPDF_CALLCONV FPDFBitmap_Create(int width, int height, int alpha)