92 ASSERT_TRUE(OpenDocument(
"viewer_ref.pdf"));
94 FPDF_PAGE page = LoadPage(0);
98 ASSERT_TRUE(output_doc);
99 EXPECT_TRUE(FPDF_CopyViewerPreferences(output_doc.get(), document()));
101 static constexpr int kPageIndices[] = {1};
102 EXPECT_TRUE(FPDF_ImportPagesByIndex(
103 output_doc.get(), document(), kPageIndices,
std::size(kPageIndices), 0));
104 EXPECT_EQ(1, FPDF_GetPageCount(output_doc.get()));
110 ASSERT_TRUE(OpenDocument(
"viewer_ref.pdf"));
112 FPDF_PAGE page = LoadPage(0);
116 ASSERT_TRUE(output_doc);
117 EXPECT_TRUE(FPDF_CopyViewerPreferences(output_doc.get(), document()));
118 EXPECT_TRUE(FPDF_ImportPages(output_doc.get(), document(),
"1", 0));
119 EXPECT_EQ(1, FPDF_GetPageCount(output_doc.get()));
125 ASSERT_TRUE(OpenDocument(
"rectangles_multi_pages.pdf"));
127 ScopedFPDFDocument output_doc_2up(
128 FPDF_ImportNPagesToOne(document(), 612, 792, 2, 1));
129 ASSERT_TRUE(output_doc_2up);
130 EXPECT_EQ(3, FPDF_GetPageCount(output_doc_2up.get()));
131 ScopedFPDFDocument output_doc_5up(
132 FPDF_ImportNPagesToOne(document(), 612, 792, 5, 1));
133 ASSERT_TRUE(output_doc_5up);
134 EXPECT_EQ(1, FPDF_GetPageCount(output_doc_5up.get()));
135 ScopedFPDFDocument output_doc_8up(
136 FPDF_ImportNPagesToOne(document(), 792, 612, 8, 1));
137 ASSERT_TRUE(output_doc_8up);
138 EXPECT_EQ(1, FPDF_GetPageCount(output_doc_8up.get()));
139 ScopedFPDFDocument output_doc_128up(
140 FPDF_ImportNPagesToOne(document(), 792, 612, 128, 1));
141 ASSERT_TRUE(output_doc_128up);
142 EXPECT_EQ(1, FPDF_GetPageCount(output_doc_128up.get()));
146 ASSERT_TRUE(OpenDocument(
"rectangles_multi_pages.pdf"));
148 FPDF_DOCUMENT output_doc_zero_row =
149 FPDF_ImportNPagesToOne(document(), 612, 792, 0, 3);
150 ASSERT_FALSE(output_doc_zero_row);
151 FPDF_DOCUMENT output_doc_zero_col =
152 FPDF_ImportNPagesToOne(document(), 612, 792, 2, 0);
153 ASSERT_FALSE(output_doc_zero_col);
154 FPDF_DOCUMENT output_doc_zero_width =
155 FPDF_ImportNPagesToOne(document(), 0, 792, 2, 1);
156 ASSERT_FALSE(output_doc_zero_width);
157 FPDF_DOCUMENT output_doc_zero_height =
158 FPDF_ImportNPagesToOne(document(), 612, 0, 7, 1);
159 ASSERT_FALSE(output_doc_zero_height);
165 ASSERT_TRUE(OpenDocument(
"rectangles_multi_pages.pdf"));
166 ScopedFPDFDocument output_doc_3up(
167 FPDF_ImportNPagesToOne(document(), 792, 612, 3, 1));
168 ASSERT_TRUE(output_doc_3up);
169 ASSERT_EQ(kRectanglesMultiPagesPageCount,
170 FPDF_GetPageCount(output_doc_3up.get()));
171 for (
int i = 0; i < kRectanglesMultiPagesPageCount; ++i) {
172 ScopedFPDFPage page(FPDF_LoadPage(output_doc_3up.get(), i));
174 ScopedFPDFBitmap bitmap = RenderPage(page.get());
175 EXPECT_EQ(792, FPDFBitmap_GetWidth(bitmap.get()));
176 EXPECT_EQ(612, FPDFBitmap_GetHeight(bitmap.get()));
177 EXPECT_EQ(RectanglesMultiPagesExpectedChecksum(i),
178 HashBitmap(bitmap.get()));
183 const char* checksum = []() {
185 return "d6ebc0a8afc22fe0137f54ce54e1a19c";
187 return "2d88d180af7109eb346439f7c855bb29";
190 ASSERT_TRUE(OpenDocument(
"rectangles.pdf"));
194 ASSERT_TRUE(output_doc);
196 FPDF_XOBJECT xobject =
197 FPDF_NewXObjectFromPage(output_doc.get(), document(), 0);
198 ASSERT_TRUE(xobject);
200 for (
int i = 0; i < 2; ++i) {
201 ScopedFPDFPage page(FPDFPage_New(output_doc.get(), 0, 612, 792));
205 ASSERT_TRUE(page_object);
207 FPDFPage_InsertObject(page.get(), page_object);
208 EXPECT_TRUE(FPDFPage_GenerateContent(page.get()));
210 ScopedFPDFBitmap page_bitmap = RenderPage(page.get());
211 CompareBitmap(page_bitmap.get(), 612, 792, checksum);
219 EXPECT_FLOAT_EQ(-1.0f, left);
220 EXPECT_FLOAT_EQ(-1.0f, bottom);
221 EXPECT_FLOAT_EQ(201.0f, right);
222 EXPECT_FLOAT_EQ(301.0f, top);
225 EXPECT_TRUE(FPDF_SaveAsCopy(output_doc.get(),
this, 0));
230 constexpr int kExpectedPageCount = 2;
231 ASSERT_TRUE(OpenSavedDocument());
233 std::array<FPDF_PAGE, kExpectedPageCount> saved_pages;
234 std::array<FPDF_PAGEOBJECT, kExpectedPageCount> xobjects;
235 for (
int i = 0; i < kExpectedPageCount; ++i) {
236 saved_pages[i] = LoadSavedPage(i);
237 ASSERT_TRUE(saved_pages[i]);
239 EXPECT_EQ(1, FPDFPage_CountObjects(saved_pages[i]));
240 xobjects[i] = FPDFPage_GetObject(saved_pages[i], 0);
241 ASSERT_TRUE(xobjects[i]);
243 EXPECT_EQ(8, FPDFFormObj_CountObjects(xobjects[i]));
246 ScopedFPDFBitmap page_bitmap = RenderPage(saved_pages[i]);
247 CompareBitmap(page_bitmap.get(), 612, 792, checksum);
251 for (
int i = 0; i < kExpectedPageCount; ++i) {
257 FPDFPageObj_GetBounds(xobjects[i], &left, &bottom, &right, &top));
258 EXPECT_FLOAT_EQ(-1.0f, left);
259 EXPECT_FLOAT_EQ(-1.0f, bottom);
260 EXPECT_FLOAT_EQ(201.0f, right);
261 EXPECT_FLOAT_EQ(301.0f, top);
266 EXPECT_NE(xobjects[0], xobjects[1]);
278 for (FPDF_PAGE saved_page : saved_pages)
279 CloseSavedPage(saved_page);
281 CloseSavedDocument();
285 const char* checksum = []() {
287 return "8e7d672f49f9ca98fb9157824cefc204";
289 return "4d5ca14827b7707f8283e639b33c121a";
292 ASSERT_TRUE(OpenDocument(
"rectangles.pdf"));
294 FPDF_XOBJECT xobject = FPDF_NewXObjectFromPage(document(), document(), 0);
295 ASSERT_TRUE(xobject);
297 FPDF_PAGE page = LoadPage(0);
301 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
306 ASSERT_TRUE(page_object);
309 static constexpr FS_MATRIX kMatrix = {0.5f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f};
316 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
317 CompareBitmap(bitmap.get(), 200, 300, checksum);
322 EXPECT_TRUE(FPDF_SaveAsCopy(document(),
this, 0));
323 VerifySavedDocument(200, 300, checksum);
329 ASSERT_TRUE(OpenDocument(
"rectangles.pdf"));
330 ASSERT_EQ(1, FPDF_GetPageCount(document()));
335 EXPECT_FALSE(FPDF_NewXObjectFromPage(document(),
nullptr, -1));
336 EXPECT_FALSE(FPDF_NewXObjectFromPage(document(),
nullptr, 0));
337 EXPECT_FALSE(FPDF_NewXObjectFromPage(document(),
nullptr, 1));
338 EXPECT_FALSE(FPDF_NewXObjectFromPage(
nullptr, document(), -1));
339 EXPECT_FALSE(FPDF_NewXObjectFromPage(
nullptr, document(), 0));
340 EXPECT_FALSE(FPDF_NewXObjectFromPage(
nullptr, document(), 1));
344 ASSERT_TRUE(output_doc);
345 EXPECT_FALSE(FPDF_NewXObjectFromPage(output_doc.get(), document(), -1));
346 EXPECT_FALSE(FPDF_NewXObjectFromPage(output_doc.get(), document(), 1));
363 static constexpr int kPageCount = 4;
364 static constexpr int kTwoUpPageCount = 2;
365 static const char kRectsChecksum[] =
"140d629b3c96a07ced2e3e408ea85a1d";
366 static const char kTwoUpChecksum[] =
"fa4501562301b2e75da354bd067495ec";
368 ASSERT_TRUE(OpenDocument(
"bug_1229106.pdf"));
371 ASSERT_EQ(kPageCount, FPDF_GetPageCount(document()));
372 for (
int i = 0; i < kPageCount; ++i) {
373 FPDF_PAGE page = LoadPage(0);
374 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
375 CompareBitmap(bitmap.get(), 792, 612, kRectsChecksum);
380 ScopedFPDFDocument output_doc_2up(
381 FPDF_ImportNPagesToOne(document(), 612, 792, 1, 2));
382 ASSERT_EQ(kTwoUpPageCount, FPDF_GetPageCount(output_doc_2up.get()));
383 for (
int i = 0; i < kTwoUpPageCount; ++i) {
384 ScopedFPDFPage page(FPDF_LoadPage(output_doc_2up.get(), i));
385 ScopedFPDFBitmap bitmap = RenderPage(page.get());
386 CompareBitmap(bitmap.get(), 612, 792, kTwoUpChecksum);
419 ASSERT_TRUE(OpenDocument(
"viewer_pref_types.pdf"));
422 ASSERT_TRUE(output_doc);
423 EXPECT_TRUE(FPDF_CopyViewerPreferences(output_doc.get(), document()));
427 CPDFDocumentFromFPDFDocument(output_doc.get());
429 output_doc_impl->GetRoot()->GetDictFor(
"ViewerPreferences");
431 EXPECT_EQ(6u, prefs->size());
434 ASSERT_TRUE(bool_obj);
435 EXPECT_TRUE(bool_obj->IsBoolean());
437 RetainPtr<
const CPDF_Number> num_obj = prefs->GetNumberFor(
"Num");
438 ASSERT_TRUE(num_obj);
439 EXPECT_TRUE(num_obj->IsInteger());
440 EXPECT_EQ(1, num_obj->GetInteger());
442 RetainPtr<
const CPDF_String> str_obj = prefs->GetStringFor(
"Str");
443 ASSERT_TRUE(str_obj);
444 EXPECT_EQ(
"str", str_obj->GetString());
446 EXPECT_EQ(
"name", prefs->GetNameFor(
"Name"));
449 prefs->GetArrayFor(
"EmptyArray");
450 ASSERT_TRUE(empty_array_obj);
451 EXPECT_TRUE(empty_array_obj->IsEmpty());
454 ASSERT_TRUE(good_array_obj);
455 EXPECT_EQ(4u, good_array_obj->size());
459 ASSERT_TRUE(OpenDocument(
"hello_world.pdf"));
461 FPDF_PAGE page = LoadPage(0);
465 EXPECT_TRUE(output_doc);
467 static constexpr int kBadIndices1[] = {-1};
468 EXPECT_FALSE(FPDF_ImportPagesByIndex(
469 output_doc.get(), document(), kBadIndices1,
std::size(kBadIndices1), 0));
471 static constexpr int kBadIndices2[] = {1};
472 EXPECT_FALSE(FPDF_ImportPagesByIndex(
473 output_doc.get(), document(), kBadIndices2,
std::size(kBadIndices2), 0));
475 static constexpr int kBadIndices3[] = {-1, 0, 1};
476 EXPECT_FALSE(FPDF_ImportPagesByIndex(
477 output_doc.get(), document(), kBadIndices3,
std::size(kBadIndices3), 0));
479 static constexpr int kBadIndices4[] = {42};
480 EXPECT_FALSE(FPDF_ImportPagesByIndex(
481 output_doc.get(), document(), kBadIndices4,
std::size(kBadIndices4), 0));
487 ASSERT_TRUE(OpenDocument(
"viewer_ref.pdf"));
489 FPDF_PAGE page = LoadPage(0);
493 EXPECT_TRUE(output_doc);
495 static constexpr int kGoodIndices1[] = {0, 0, 0, 0};
496 EXPECT_TRUE(FPDF_ImportPagesByIndex(output_doc.get(), document(),
497 kGoodIndices1,
std::size(kGoodIndices1),
499 EXPECT_EQ(4, FPDF_GetPageCount(output_doc.get()));
501 static constexpr int kGoodIndices2[] = {0};
502 EXPECT_TRUE(FPDF_ImportPagesByIndex(output_doc.get(), document(),
503 kGoodIndices2,
std::size(kGoodIndices2),
505 EXPECT_EQ(5, FPDF_GetPageCount(output_doc.get()));
507 static constexpr int kGoodIndices3[] = {4};
508 EXPECT_TRUE(FPDF_ImportPagesByIndex(output_doc.get(), document(),
509 kGoodIndices3,
std::size(kGoodIndices3),
511 EXPECT_EQ(6, FPDF_GetPageCount(output_doc.get()));
513 static constexpr int kGoodIndices4[] = {1, 2, 3};
514 EXPECT_TRUE(FPDF_ImportPagesByIndex(output_doc.get(), document(),
515 kGoodIndices4,
std::size(kGoodIndices4),
517 EXPECT_EQ(9, FPDF_GetPageCount(output_doc.get()));
521 FPDF_ImportPagesByIndex(output_doc.get(), document(),
nullptr, 0, 0));
522 EXPECT_EQ(14, FPDF_GetPageCount(output_doc.get()));
528 ASSERT_TRUE(OpenDocument(
"hello_world.pdf"));
530 FPDF_PAGE page = LoadPage(0);
534 EXPECT_TRUE(output_doc);
535 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"clams", 0));
536 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"0", 0));
537 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"42", 0));
538 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"1,2", 0));
539 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"1-2", 0));
540 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
",1", 0));
541 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"1,", 0));
542 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"1-", 0));
543 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"-1", 0));
544 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"-,0,,,1-", 0));
550 ASSERT_TRUE(OpenDocument(
"viewer_ref.pdf"));
552 FPDF_PAGE page = LoadPage(0);
556 EXPECT_TRUE(output_doc);
557 EXPECT_TRUE(FPDF_CopyViewerPreferences(output_doc.get(), document()));
558 EXPECT_TRUE(FPDF_ImportPages(output_doc.get(), document(),
"1,1,1,1", 0));
559 EXPECT_EQ(4, FPDF_GetPageCount(output_doc.get()));
560 EXPECT_TRUE(FPDF_ImportPages(output_doc.get(), document(),
"1-1", 0));
561 EXPECT_EQ(5, FPDF_GetPageCount(output_doc.get()));
562 EXPECT_TRUE(FPDF_ImportPages(output_doc.get(), document(),
"5-5", 0));
563 EXPECT_EQ(6, FPDF_GetPageCount(output_doc.get()));
564 EXPECT_TRUE(FPDF_ImportPages(output_doc.get(), document(),
"2-4", 0));
565 EXPECT_EQ(9, FPDF_GetPageCount(output_doc.get()));
587 ASSERT_TRUE(OpenDocument(
"bug_750568.pdf"));
588 ASSERT_EQ(4, FPDF_GetPageCount(document()));
590 for (size_t i = 0; i < 4; ++i) {
591 FPDF_PAGE page = LoadPage(i);
594 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
595 CompareBitmap(bitmap.get(), 200, 200, Bug750568PageHash(i));
600 ASSERT_TRUE(output_doc);
602 static constexpr int kIndices[] = {0, 1, 2, 3};
603 EXPECT_TRUE(FPDF_ImportPagesByIndex(output_doc.get(), document(), kIndices,
604 std::size(kIndices), 0));
605 ASSERT_EQ(4, FPDF_GetPageCount(output_doc.get()));
606 for (size_t i = 0; i < 4; ++i) {
607 ScopedFPDFPage page(FPDF_LoadPage(output_doc.get(), i));
610 ScopedFPDFBitmap bitmap = RenderPage(page.get());
611 CompareBitmap(bitmap.get(), 200, 200, Bug750568PageHash(i));
616 ASSERT_TRUE(OpenDocument(
"zero_length_stream.pdf"));
617 FPDF_PAGE page = LoadPage(0);
620 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
625 ASSERT_TRUE(new_doc);
627 static constexpr int kIndices[] = {0};
628 EXPECT_TRUE(FPDF_ImportPagesByIndex(new_doc.get(), document(), kIndices,
629 std::size(kIndices), 0));
631 EXPECT_EQ(1, FPDF_GetPageCount(new_doc.get()));
632 ScopedFPDFPage new_page(FPDF_LoadPage(new_doc.get(), 0));
633 ASSERT_TRUE(new_page);
634 ScopedFPDFBitmap new_bitmap = RenderPage(new_page.get());
639 ASSERT_TRUE(OpenDocument(
"hello_world.pdf"));
640 EXPECT_EQ(1, FPDF_GetPageCount(document()));
642 std::string file_path = PathService::GetTestFilePath(
"rectangles.pdf");
643 ASSERT_FALSE(file_path.empty());
644 std::vector<uint8_t> file_contents = GetFileContents(file_path.c_str());
645 ASSERT_FALSE(file_contents.empty());
647 ScopedFPDFDocument src_doc(FPDF_LoadMemDocument(
648 file_contents.data(), file_contents.size(),
nullptr));
649 ASSERT_TRUE(src_doc);
651 static constexpr int kIndices[] = {0};
652 EXPECT_TRUE(FPDF_ImportPagesByIndex(document(), src_doc.get(), kIndices,
653 std::size(kIndices), 0));
654 EXPECT_EQ(2, FPDF_GetPageCount(document()));
656 EXPECT_TRUE(FPDF_ImportPages(document(), src_doc.get(),
"1", 0));
657 EXPECT_EQ(3, FPDF_GetPageCount(document()));
661 ASSERT_TRUE(OpenDocument(
"bad_page_type.pdf"));
662 EXPECT_EQ(2, FPDF_GetPageCount(document()));
664 std::string file_path = PathService::GetTestFilePath(
"rectangles.pdf");
665 ASSERT_FALSE(file_path.empty());
666 std::vector<uint8_t> file_contents = GetFileContents(file_path.c_str());
667 ASSERT_FALSE(file_contents.empty());
669 ScopedFPDFDocument src_doc(FPDF_LoadMemDocument(
670 file_contents.data(), file_contents.size(),
nullptr));
671 ASSERT_TRUE(src_doc);
672 EXPECT_EQ(1, FPDF_GetPageCount(src_doc.get()));
674 FPDFPage_Delete(document(), 0);
675 EXPECT_EQ(1, FPDF_GetPageCount(document()));
677 static constexpr int kPageIndices[] = {0};
678 ASSERT_TRUE(FPDF_ImportPagesByIndex(document(), src_doc.get(), kPageIndices,
679 std::size(kPageIndices), 0));
680 EXPECT_EQ(2, FPDF_GetPageCount(document()));
681 const char*
const new_page_1_checksum = []() {
683 return "b4e411a6b5ffa59a50efede2efece597";
685 return "0a90de37f52127619c3dfb642b5fa2fe";
687 const char new_page_2_checksum[] =
"39336760026e7f3d26135e3b765125c3";
689 FPDF_PAGE page = LoadPage(0);
691 ScopedFPDFBitmap bitmap = RenderPage(page);
692 CompareBitmap(bitmap.get(), 200, 300, new_page_1_checksum);
696 FPDF_PAGE page = LoadPage(1);
698 ScopedFPDFBitmap bitmap = RenderPage(page);
699 CompareBitmap(bitmap.get(), 200, 100, new_page_2_checksum);
703 EXPECT_TRUE(FPDF_SaveAsCopy(document(),
this, 0));
705 ASSERT_TRUE(OpenSavedDocument());
706 EXPECT_EQ(2, FPDF_GetPageCount(saved_document()));
708 FPDF_PAGE page = LoadSavedPage(0);
710 ScopedFPDFBitmap bitmap = RenderPage(page);
711 CompareBitmap(bitmap.get(), 200, 300, new_page_1_checksum);
712 CloseSavedPage(page);
715 FPDF_PAGE page = LoadSavedPage(1);
717 ScopedFPDFBitmap bitmap = RenderPage(page);
718 CompareBitmap(bitmap.get(), 200, 100, new_page_2_checksum);
719 CloseSavedPage(page);
virtual CPDF_FormObject * AsForm()