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_editpage_embeddertest.cpp
Go to the documentation of this file.
1// Copyright 2018 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 <array>
8
9#include "core/fxcrt/fx_system.h"
10#include "core/fxge/cfx_defaultrenderdevice.h"
11#include "testing/embedder_test.h"
12#include "testing/embedder_test_constants.h"
13#include "testing/gmock/include/gmock/gmock.h"
14
15using ::testing::Each;
16using ::testing::Eq;
17using ::testing::FloatEq;
18using ::testing::Gt;
19
21
23 const char* rotated_checksum = []() {
24 if (CFX_DefaultRenderDevice::UseSkiaRenderer()) {
25 return "eded83f75f3d0332c584c416c571c0df";
26 }
27 return "d599429574ff0dcad3bc898ea8b874ca";
28 }();
29
30 {
31 ASSERT_TRUE(OpenDocument("rectangles.pdf"));
32 FPDF_PAGE page = LoadPage(0);
33 ASSERT_TRUE(page);
34
35 {
36 // Render the page as is.
37 EXPECT_EQ(0, FPDFPage_GetRotation(page));
38 const int page_width = static_cast<int>(FPDF_GetPageWidth(page));
39 const int page_height = static_cast<int>(FPDF_GetPageHeight(page));
40 EXPECT_EQ(200, page_width);
41 EXPECT_EQ(300, page_height);
42 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
43 CompareBitmap(bitmap.get(), page_width, page_height,
45 }
46
48
49 {
50 // Render the page after rotation.
51 // Note that the change affects the rendering, as expected.
52 // It behaves just like the case below, rather than the case above.
53 EXPECT_EQ(1, FPDFPage_GetRotation(page));
54 const int page_width = static_cast<int>(FPDF_GetPageWidth(page));
55 const int page_height = static_cast<int>(FPDF_GetPageHeight(page));
56 EXPECT_EQ(300, page_width);
57 EXPECT_EQ(200, page_height);
58 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
59 CompareBitmap(bitmap.get(), page_width, page_height, rotated_checksum);
60 }
61
62 UnloadPage(page);
63 }
64
65 {
66 // Save a copy, open the copy, and render it.
67 // Note that it renders the rotation.
68 EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
69 ASSERT_TRUE(OpenSavedDocument());
70 FPDF_PAGE saved_page = LoadSavedPage(0);
71 ASSERT_TRUE(saved_page);
72
73 EXPECT_EQ(1, FPDFPage_GetRotation(saved_page));
74 const int page_width = static_cast<int>(FPDF_GetPageWidth(saved_page));
75 const int page_height = static_cast<int>(FPDF_GetPageHeight(saved_page));
76 EXPECT_EQ(300, page_width);
77 EXPECT_EQ(200, page_height);
78 ScopedFPDFBitmap bitmap = RenderSavedPage(saved_page);
79 CompareBitmap(bitmap.get(), page_width, page_height, rotated_checksum);
80
81 CloseSavedPage(saved_page);
82 CloseSavedDocument();
83 }
84}
85
87 constexpr int kExpectedObjectCount = 39;
88 ASSERT_TRUE(OpenDocument("embedded_images.pdf"));
89 FPDF_PAGE page = LoadPage(0);
90 ASSERT_TRUE(page);
91 ASSERT_EQ(kExpectedObjectCount, FPDFPage_CountObjects(page));
92
93 for (int i = 0; i < kExpectedObjectCount; ++i) {
94 FPDF_PAGEOBJECT obj = FPDFPage_GetObject(page, i);
95 EXPECT_FALSE(FPDFPageObj_HasTransparency(obj));
96
97 FPDFPageObj_SetFillColor(obj, 255, 0, 0, 127);
98 EXPECT_TRUE(FPDFPageObj_HasTransparency(obj));
99 }
100
101 UnloadPage(page);
102}
103
107
109 constexpr int kExpectedObjectCount = 8;
110 ASSERT_TRUE(OpenDocument("rectangles.pdf"));
111 FPDF_PAGE page = LoadPage(0);
112 ASSERT_TRUE(page);
113 ASSERT_EQ(kExpectedObjectCount, FPDFPage_CountObjects(page));
114
115 for (int i = 0; i < kExpectedObjectCount; ++i) {
116 FPDF_PAGEOBJECT obj = FPDFPage_GetObject(page, i);
117 EXPECT_FALSE(FPDFPageObj_HasTransparency(obj));
118
120 EXPECT_TRUE(FPDFPageObj_HasTransparency(obj));
121 }
122
123 UnloadPage(page);
124}
125
127 constexpr int kExpectedObjectCount = 2;
128 ASSERT_TRUE(OpenDocument("text_render_mode.pdf"));
129 FPDF_PAGE page = LoadPage(0);
130 ASSERT_TRUE(page);
131 ASSERT_EQ(kExpectedObjectCount, FPDFPage_CountObjects(page));
132
133 for (int i = 0; i < kExpectedObjectCount; ++i) {
134 FPDF_PAGEOBJECT obj = FPDFPage_GetObject(page, i);
135 EXPECT_FALSE(FPDFPageObj_HasTransparency(obj));
136
137 FPDFPageObj_SetBlendMode(obj, "Lighten");
138 EXPECT_TRUE(FPDFPageObj_HasTransparency(obj));
139 }
140
141 UnloadPage(page);
142}
143
145 constexpr int kExpectedObjectCount = 39;
146 constexpr int kImageObjectsStartIndex = 33;
147 ASSERT_TRUE(OpenDocument("embedded_images.pdf"));
148 FPDF_PAGE page = LoadPage(0);
149 ASSERT_TRUE(page);
150
151 ASSERT_EQ(kExpectedObjectCount, FPDFPage_CountObjects(page));
152
153 for (int i = kImageObjectsStartIndex; i < kExpectedObjectCount; ++i) {
154 FPDF_PAGEOBJECT image = FPDFPage_GetObject(page, i);
155 ASSERT_TRUE(image);
157
158 unsigned int r;
159 unsigned int g;
160 unsigned int b;
161 unsigned int a;
162 EXPECT_FALSE(FPDFPageObj_GetFillColor(image, &r, &g, &b, &a));
163 EXPECT_FALSE(FPDFPageObj_GetStrokeColor(image, &r, &g, &b, &a));
164 }
165
166 UnloadPage(page);
167}
168
170 {
171 EXPECT_FALSE(FPDFPageObj_GetDashPhase(nullptr, nullptr));
172
173 float phase = -1123.5f;
174 EXPECT_FALSE(FPDFPageObj_GetDashPhase(nullptr, &phase));
175 EXPECT_FLOAT_EQ(-1123.5f, phase);
176
177 EXPECT_EQ(-1, FPDFPageObj_GetDashCount(nullptr));
178
179 EXPECT_FALSE(FPDFPageObj_GetDashArray(nullptr, nullptr, 3));
180
181 std::array<float, 3> get_array = {{-1.0f, -1.0f, -1.0f}};
182 EXPECT_FALSE(
183 FPDFPageObj_GetDashArray(nullptr, get_array.data(), get_array.size()));
184 EXPECT_THAT(get_array, Each(FloatEq(-1.0f)));
185
186 EXPECT_FALSE(FPDFPageObj_SetDashPhase(nullptr, 5.0f));
187 EXPECT_FALSE(FPDFPageObj_SetDashArray(nullptr, nullptr, 3, 5.0f));
188
189 std::array<float, 3> set_array = {{1.0f, 2.0f, 3.0f}};
190 EXPECT_FALSE(FPDFPageObj_SetDashArray(nullptr, set_array.data(),
191 set_array.size(), 5.0f));
192 }
193
194 constexpr int kExpectedObjectCount = 3;
195 ASSERT_TRUE(OpenDocument("dashed_lines.pdf"));
196 FPDF_PAGE page = LoadPage(0);
197 ASSERT_TRUE(page);
198
199 ASSERT_EQ(kExpectedObjectCount, FPDFPage_CountObjects(page));
200
201 {
202 FPDF_PAGEOBJECT path = FPDFPage_GetObject(page, 0);
203 ASSERT_TRUE(path);
205
206 EXPECT_FALSE(FPDFPageObj_GetDashPhase(path, nullptr));
207 EXPECT_FALSE(FPDFPageObj_GetDashArray(path, nullptr, 3));
208 EXPECT_FALSE(FPDFPageObj_SetDashArray(path, nullptr, 3, 5.0f));
209
210 float phase = -1123.5f;
211 EXPECT_TRUE(FPDFPageObj_GetDashPhase(path, &phase));
212 EXPECT_FLOAT_EQ(0.0f, phase);
213 EXPECT_EQ(0, FPDFPageObj_GetDashCount(path));
214
215 std::array<float, 3> get_array = {{-1.0f, -1.0f, -1.0f}};
216 EXPECT_TRUE(
217 FPDFPageObj_GetDashArray(path, get_array.data(), get_array.size()));
218 EXPECT_THAT(get_array, Each(FloatEq(-1.0f)));
219 }
220
221 {
222 FPDF_PAGEOBJECT path = FPDFPage_GetObject(page, 1);
223 ASSERT_TRUE(path);
225
226 float phase = -1123.5f;
227 EXPECT_TRUE(FPDFPageObj_GetDashPhase(path, &phase));
228 EXPECT_LT(0.0f, phase);
229 ASSERT_EQ(6, FPDFPageObj_GetDashCount(path));
230
231 std::array<float, 6> dash_array = {
232 {-1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f}};
233 ASSERT_TRUE(
234 FPDFPageObj_GetDashArray(path, dash_array.data(), dash_array.size()));
235 EXPECT_THAT(dash_array, Each(Gt(0.0f)));
236
237 // the array is decreasing in value.
238 for (int i = 0; i < 5; i++) {
239 EXPECT_GT(dash_array[i], dash_array[i + 1]);
240 }
241 // modify phase
242 EXPECT_TRUE(FPDFPageObj_SetDashPhase(path, 1.0f));
243
244 phase = -1123.5f;
245 EXPECT_TRUE(FPDFPageObj_GetDashPhase(path, &phase));
246 EXPECT_FLOAT_EQ(1.0f, phase);
247
248 // clear array
249 EXPECT_TRUE(FPDFPageObj_SetDashArray(path, nullptr, 0, 0.0f));
250 EXPECT_EQ(0, FPDFPageObj_GetDashCount(path));
251
252 phase = -1123.5f;
253 EXPECT_TRUE(FPDFPageObj_GetDashPhase(path, &phase));
254 EXPECT_FLOAT_EQ(0.0f, phase);
255 }
256
257 {
258 FPDF_PAGEOBJECT path = FPDFPage_GetObject(page, 2);
259 ASSERT_TRUE(path);
261
262 float phase = -1123.5f;
263 EXPECT_TRUE(FPDFPageObj_GetDashPhase(path, &phase));
264 EXPECT_FLOAT_EQ(0.0f, phase);
265
266 EXPECT_EQ(0, FPDFPageObj_GetDashCount(path));
267
268 // `get_array` should be unmodified
269 std::array<float, 4> get_array = {{-1.0f, -1.0f, -1.0f, -1.0f}};
270 EXPECT_TRUE(
271 FPDFPageObj_GetDashArray(path, get_array.data(), get_array.size()));
272 EXPECT_THAT(get_array, Each(FloatEq(-1.0f)));
273
274 // modify dash_array and phase
275 const std::array<float, 3> set_array = {{1.0f, 2.0f, 3.0f}};
276 EXPECT_TRUE(FPDFPageObj_SetDashArray(path, set_array.data(),
277 set_array.size(), 5.0f));
278
279 phase = -1123.5f;
280 EXPECT_TRUE(FPDFPageObj_GetDashPhase(path, &phase));
281 EXPECT_FLOAT_EQ(5.0f, phase);
282 ASSERT_EQ(3, FPDFPageObj_GetDashCount(path));
283
284 // Pretend `get_array` has too few members.
285 EXPECT_FALSE(FPDFPageObj_GetDashArray(path, get_array.data(), 2));
286 EXPECT_THAT(get_array, Each(FloatEq(-1.0f)));
287
288 ASSERT_TRUE(
289 FPDFPageObj_GetDashArray(path, get_array.data(), get_array.size()));
290
291 // `get_array` should be modified only up to dash_count
292 for (int i = 0; i < 3; i++) {
293 EXPECT_FLOAT_EQ(static_cast<float>(i + 1), get_array[i]);
294 }
295 EXPECT_FLOAT_EQ(-1.0f, get_array[3]);
296
297 // clear array
298 EXPECT_TRUE(FPDFPageObj_SetDashArray(path, set_array.data(), 0, 4.0f));
299 EXPECT_EQ(0, FPDFPageObj_GetDashCount(path));
300
301 phase = -1123.5f;
302 EXPECT_TRUE(FPDFPageObj_GetDashPhase(path, &phase));
303 EXPECT_FLOAT_EQ(4.0f, phase);
304 }
305
306 UnloadPage(page);
307}
308
310 ASSERT_TRUE(OpenDocument("hello_world.pdf"));
311 FPDF_PAGE page = LoadPage(0);
312 ASSERT_TRUE(page);
313
314 FPDF_PAGEOBJECT obj = FPDFPage_GetObject(page, 0);
316
317 FS_QUADPOINTSF quad;
318 ASSERT_FALSE(FPDFPageObj_GetRotatedBounds(nullptr, nullptr));
319 ASSERT_FALSE(FPDFPageObj_GetRotatedBounds(obj, nullptr));
320 ASSERT_FALSE(FPDFPageObj_GetRotatedBounds(nullptr, &quad));
321
322 UnloadPage(page);
323}
324
326 ASSERT_TRUE(OpenDocument("hello_world.pdf"));
327 FPDF_PAGE page = LoadPage(0);
328 ASSERT_TRUE(page);
329
330 FPDF_PAGEOBJECT obj = FPDFPage_GetObject(page, 0);
332
333 constexpr float kExpectedLeft = 20.348f;
334 constexpr float kExpectedBottom = 48.164f;
335 constexpr float kExpectedRight = 83.36f;
336 constexpr float kExpectedTop = 58.328f;
337
338 float left;
339 float bottom;
340 float right;
341 float top;
342 ASSERT_TRUE(FPDFPageObj_GetBounds(obj, &left, &bottom, &right, &top));
343 EXPECT_FLOAT_EQ(kExpectedLeft, left);
344 EXPECT_FLOAT_EQ(kExpectedBottom, bottom);
345 EXPECT_FLOAT_EQ(kExpectedRight, right);
346 EXPECT_FLOAT_EQ(kExpectedTop, top);
347
348 FS_QUADPOINTSF quad;
349 ASSERT_TRUE(FPDFPageObj_GetRotatedBounds(obj, &quad));
350 EXPECT_FLOAT_EQ(kExpectedLeft, quad.x1);
351 EXPECT_FLOAT_EQ(kExpectedBottom, quad.y1);
352 EXPECT_FLOAT_EQ(kExpectedRight, quad.x2);
353 EXPECT_FLOAT_EQ(kExpectedBottom, quad.y2);
354 EXPECT_FLOAT_EQ(kExpectedRight, quad.x3);
355 EXPECT_FLOAT_EQ(kExpectedTop, quad.y3);
356 EXPECT_FLOAT_EQ(kExpectedLeft, quad.x4);
357 EXPECT_FLOAT_EQ(kExpectedTop, quad.y4);
358
359 UnloadPage(page);
360}
361
363 ASSERT_TRUE(OpenDocument("rotated_text.pdf"));
364 FPDF_PAGE page = LoadPage(0);
365 ASSERT_TRUE(page);
366
367 FPDF_PAGEOBJECT obj = FPDFPage_GetObject(page, 0);
369
370 constexpr float kExpectedLeft = 98.9478f;
371 constexpr float kExpectedBottom = 78.2607f;
372 constexpr float kExpectedRight = 126.32983f;
373 constexpr float kExpectedTop = 105.64272f;
374
375 float left;
376 float bottom;
377 float right;
378 float top;
379 ASSERT_TRUE(FPDFPageObj_GetBounds(obj, &left, &bottom, &right, &top));
380 EXPECT_FLOAT_EQ(kExpectedLeft, left);
381 EXPECT_FLOAT_EQ(kExpectedBottom, bottom);
382 EXPECT_FLOAT_EQ(kExpectedRight, right);
383 EXPECT_FLOAT_EQ(kExpectedTop, top);
384
385 FS_QUADPOINTSF quad;
386 ASSERT_TRUE(FPDFPageObj_GetRotatedBounds(obj, &quad));
387 EXPECT_FLOAT_EQ(kExpectedLeft, quad.x1);
388 EXPECT_FLOAT_EQ(98.4557f, quad.y1);
389 EXPECT_FLOAT_EQ(119.14279f, quad.x2);
390 EXPECT_FLOAT_EQ(kExpectedBottom, quad.y2);
391 EXPECT_FLOAT_EQ(kExpectedRight, quad.x3);
392 EXPECT_FLOAT_EQ(85.447739f, quad.y3);
393 EXPECT_FLOAT_EQ(106.13486f, quad.x4);
394 EXPECT_FLOAT_EQ(kExpectedTop, quad.y4);
395
396 UnloadPage(page);
397}
398
400 ASSERT_TRUE(OpenDocument("matte.pdf"));
401 FPDF_PAGE page = LoadPage(0);
402 ASSERT_TRUE(page);
403
404 FPDF_PAGEOBJECT obj = FPDFPage_GetObject(page, 2);
406
407 constexpr float kExpectedLeft = 0.0f;
408 constexpr float kExpectedBottom = 90.0f;
409 constexpr float kExpectedRight = 40.0f;
410 constexpr float kExpectedTop = 150.0f;
411
412 float left;
413 float bottom;
414 float right;
415 float top;
416 ASSERT_TRUE(FPDFPageObj_GetBounds(obj, &left, &bottom, &right, &top));
417 EXPECT_FLOAT_EQ(kExpectedLeft, left);
418 EXPECT_FLOAT_EQ(kExpectedBottom, bottom);
419 EXPECT_FLOAT_EQ(kExpectedRight, right);
420 EXPECT_FLOAT_EQ(kExpectedTop, top);
421
422 FS_QUADPOINTSF quad;
423 ASSERT_TRUE(FPDFPageObj_GetRotatedBounds(obj, &quad));
424 EXPECT_FLOAT_EQ(kExpectedLeft, quad.x1);
425 EXPECT_FLOAT_EQ(kExpectedBottom, quad.y1);
426 EXPECT_FLOAT_EQ(kExpectedRight, quad.x2);
427 EXPECT_FLOAT_EQ(kExpectedBottom, quad.y2);
428 EXPECT_FLOAT_EQ(kExpectedRight, quad.x3);
429 EXPECT_FLOAT_EQ(kExpectedTop, quad.y3);
430 EXPECT_FLOAT_EQ(kExpectedLeft, quad.x4);
431 EXPECT_FLOAT_EQ(kExpectedTop, quad.y4);
432
433 UnloadPage(page);
434}
435
437 ASSERT_TRUE(OpenDocument("rotated_image.pdf"));
438 FPDF_PAGE page = LoadPage(0);
439 ASSERT_TRUE(page);
440
441 FPDF_PAGEOBJECT obj = FPDFPage_GetObject(page, 0);
443
444 constexpr float kExpectedLeft = 100.0f;
445 constexpr float kExpectedBottom = 70.0f;
446 constexpr float kExpectedRight = 170.0f;
447 constexpr float kExpectedTop = 140.0f;
448
449 float left;
450 float bottom;
451 float right;
452 float top;
453 ASSERT_TRUE(FPDFPageObj_GetBounds(obj, &left, &bottom, &right, &top));
454 EXPECT_FLOAT_EQ(kExpectedLeft, left);
455 EXPECT_FLOAT_EQ(kExpectedBottom, bottom);
456 EXPECT_FLOAT_EQ(kExpectedRight, right);
457 EXPECT_FLOAT_EQ(kExpectedTop, top);
458
459 FS_QUADPOINTSF quad;
460 ASSERT_TRUE(FPDFPageObj_GetRotatedBounds(obj, &quad));
461 EXPECT_FLOAT_EQ(kExpectedLeft, quad.x1);
462 EXPECT_FLOAT_EQ(100.0f, quad.y1);
463 EXPECT_FLOAT_EQ(130.0f, quad.x2);
464 EXPECT_FLOAT_EQ(kExpectedBottom, quad.y2);
465 EXPECT_FLOAT_EQ(kExpectedRight, quad.x3);
466 EXPECT_FLOAT_EQ(110.0f, quad.y3);
467 EXPECT_FLOAT_EQ(140.0f, quad.x4);
468 EXPECT_FLOAT_EQ(kExpectedTop, quad.y4);
469
470 UnloadPage(page);
471}
472
474 constexpr float kDashArray[] = {2.5, 3.6};
475 constexpr float kDashPhase = 1.2;
476
477 CreateEmptyDocument();
478 {
479 ScopedFPDFPage page(FPDFPage_New(document(), 0, 612, 792));
480
481 FPDF_PAGEOBJECT path = FPDFPageObj_CreateNewPath(400, 100);
482 EXPECT_TRUE(FPDFPageObj_SetStrokeWidth(path, 2));
483 EXPECT_TRUE(FPDFPageObj_SetStrokeColor(path, 255, 0, 0, 255));
485 EXPECT_TRUE(FPDFPath_LineTo(path, 200, 200));
486 EXPECT_TRUE(FPDFPageObj_SetDashArray(path, kDashArray,
487 std::size(kDashArray), kDashPhase));
488 FPDFPage_InsertObject(page.get(), path);
489
490 EXPECT_TRUE(FPDFPage_GenerateContent(page.get()));
491 path = FPDFPage_GetObject(page.get(), 0);
492 ASSERT_TRUE(path);
493 ASSERT_EQ(2, FPDFPageObj_GetDashCount(path));
494
495 EXPECT_TRUE(FPDF_SaveAsCopy(document(), this, 0));
496 }
497
498 ASSERT_TRUE(OpenSavedDocument());
499 FPDF_PAGE page = LoadSavedPage(0);
500 ASSERT_TRUE(page);
501
502 FPDF_PAGEOBJECT path = FPDFPage_GetObject(page, 0);
503 ASSERT_TRUE(path);
504
505 float dash_array[] = {0, 0};
506 ASSERT_EQ(static_cast<int>(std::size(dash_array)),
508 ASSERT_TRUE(
509 FPDFPageObj_GetDashArray(path, dash_array, std::size(dash_array)));
510 ASSERT_EQ(kDashArray[0], dash_array[0]);
511 ASSERT_EQ(kDashArray[1], dash_array[1]);
512 float dash_phase = 0;
513 ASSERT_TRUE(FPDFPageObj_GetDashPhase(path, &dash_phase));
514 ASSERT_EQ(kDashPhase, dash_phase);
515
516 CloseSavedPage(page);
517 CloseSavedDocument();
518}
FPDF_EXPORT int FPDF_CALLCONV FPDFPage_GetRotation(FPDF_PAGE page)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_SetStrokeColor(FPDF_PAGEOBJECT page_object, unsigned int R, unsigned int G, unsigned int B, unsigned int A)
FPDF_EXPORT FPDF_PAGEOBJECT FPDF_CALLCONV FPDFPageObj_CreateNewPath(float x, float y)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_SetDrawMode(FPDF_PAGEOBJECT path, int fillmode, FPDF_BOOL stroke)
FPDF_EXPORT int FPDF_CALLCONV FPDFPageObj_GetDashCount(FPDF_PAGEOBJECT page_object)
FPDF_EXPORT void FPDF_CALLCONV FPDFPage_SetRotation(FPDF_PAGE page, int rotate)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_SetFillColor(FPDF_PAGEOBJECT page_object, unsigned int R, unsigned int G, unsigned int B, unsigned int A)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetDashPhase(FPDF_PAGEOBJECT page_object, float *phase)
#define FPDF_FILLMODE_NONE
Definition fpdf_edit.h:51
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetRotatedBounds(FPDF_PAGEOBJECT page_object, FS_QUADPOINTSF *quad_points)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetFillColor(FPDF_PAGEOBJECT page_object, unsigned int *R, unsigned int *G, unsigned int *B, unsigned int *A)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPath_LineTo(FPDF_PAGEOBJECT path, float x, float y)
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_PATH
Definition fpdf_edit.h:40
#define FPDF_PAGEOBJ_TEXT
Definition fpdf_edit.h:39
#define FPDF_PAGEOBJ_IMAGE
Definition fpdf_edit.h:41
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetBounds(FPDF_PAGEOBJECT page_object, float *left, float *bottom, float *right, float *top)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_SetDashPhase(FPDF_PAGEOBJECT page_object, float phase)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_SetStrokeWidth(FPDF_PAGEOBJECT page_object, float width)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_HasTransparency(FPDF_PAGEOBJECT page_object)
FPDF_EXPORT int FPDF_CALLCONV FPDFPage_CountObjects(FPDF_PAGE page)
FPDF_EXPORT void FPDF_CALLCONV FPDFPageObj_SetBlendMode(FPDF_PAGEOBJECT page_object, FPDF_BYTESTRING blend_mode)
FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV FPDFPageObj_GetStrokeColor(FPDF_PAGEOBJECT page_object, unsigned int *R, unsigned int *G, unsigned int *B, unsigned int *A)
TEST_F(FPDFEditPageEmbedderTest, Rotation)
FPDF_EXPORT double FPDF_CALLCONV FPDF_GetPageWidth(FPDF_PAGE page)
FPDF_EXPORT double FPDF_CALLCONV FPDF_GetPageHeight(FPDF_PAGE page)
const char * RectanglesChecksum()