88 ASSERT_TRUE(OpenDocument(
"viewer_ref.pdf"));
90 FPDF_PAGE page = LoadPage(0);
93 ScopedFPDFDocument output_doc(FPDF_CreateNewDocument());
94 ASSERT_TRUE(output_doc);
95 EXPECT_TRUE(FPDF_CopyViewerPreferences(output_doc.get(), document()));
97 static constexpr int kPageIndices[] = {1};
98 EXPECT_TRUE(FPDF_ImportPagesByIndex(
99 output_doc.get(), document(), kPageIndices,
std::size(kPageIndices), 0));
100 EXPECT_EQ(1, FPDF_GetPageCount(output_doc.get()));
106 ASSERT_TRUE(OpenDocument(
"viewer_ref.pdf"));
108 FPDF_PAGE page = LoadPage(0);
111 ScopedFPDFDocument output_doc(FPDF_CreateNewDocument());
112 ASSERT_TRUE(output_doc);
113 EXPECT_TRUE(FPDF_CopyViewerPreferences(output_doc.get(), document()));
114 EXPECT_TRUE(FPDF_ImportPages(output_doc.get(), document(),
"1", 0));
115 EXPECT_EQ(1, FPDF_GetPageCount(output_doc.get()));
121 ASSERT_TRUE(OpenDocument(
"rectangles_multi_pages.pdf"));
123 ScopedFPDFDocument output_doc_2up(
124 FPDF_ImportNPagesToOne(document(), 612, 792, 2, 1));
125 ASSERT_TRUE(output_doc_2up);
126 EXPECT_EQ(3, FPDF_GetPageCount(output_doc_2up.get()));
127 ScopedFPDFDocument output_doc_5up(
128 FPDF_ImportNPagesToOne(document(), 612, 792, 5, 1));
129 ASSERT_TRUE(output_doc_5up);
130 EXPECT_EQ(1, FPDF_GetPageCount(output_doc_5up.get()));
131 ScopedFPDFDocument output_doc_8up(
132 FPDF_ImportNPagesToOne(document(), 792, 612, 8, 1));
133 ASSERT_TRUE(output_doc_8up);
134 EXPECT_EQ(1, FPDF_GetPageCount(output_doc_8up.get()));
135 ScopedFPDFDocument output_doc_128up(
136 FPDF_ImportNPagesToOne(document(), 792, 612, 128, 1));
137 ASSERT_TRUE(output_doc_128up);
138 EXPECT_EQ(1, FPDF_GetPageCount(output_doc_128up.get()));
142 ASSERT_TRUE(OpenDocument(
"rectangles_multi_pages.pdf"));
144 FPDF_DOCUMENT output_doc_zero_row =
145 FPDF_ImportNPagesToOne(document(), 612, 792, 0, 3);
146 ASSERT_FALSE(output_doc_zero_row);
147 FPDF_DOCUMENT output_doc_zero_col =
148 FPDF_ImportNPagesToOne(document(), 612, 792, 2, 0);
149 ASSERT_FALSE(output_doc_zero_col);
150 FPDF_DOCUMENT output_doc_zero_width =
151 FPDF_ImportNPagesToOne(document(), 0, 792, 2, 1);
152 ASSERT_FALSE(output_doc_zero_width);
153 FPDF_DOCUMENT output_doc_zero_height =
154 FPDF_ImportNPagesToOne(document(), 612, 0, 7, 1);
155 ASSERT_FALSE(output_doc_zero_height);
161 ASSERT_TRUE(OpenDocument(
"rectangles_multi_pages.pdf"));
162 ScopedFPDFDocument output_doc_3up(
163 FPDF_ImportNPagesToOne(document(), 792, 612, 3, 1));
164 ASSERT_TRUE(output_doc_3up);
165 ASSERT_EQ(kRectanglesMultiPagesPageCount,
166 FPDF_GetPageCount(output_doc_3up.get()));
167 for (
int i = 0; i < kRectanglesMultiPagesPageCount; ++i) {
168 ScopedFPDFPage page(FPDF_LoadPage(output_doc_3up.get(), i));
170 ScopedFPDFBitmap bitmap = RenderPage(page.get());
171 EXPECT_EQ(792, FPDFBitmap_GetWidth(bitmap.get()));
172 EXPECT_EQ(612, FPDFBitmap_GetHeight(bitmap.get()));
173 EXPECT_EQ(RectanglesMultiPagesExpectedChecksum(i),
174 HashBitmap(bitmap.get()));
179 const char* checksum = []() {
181 return "d6ebc0a8afc22fe0137f54ce54e1a19c";
183 return "2d88d180af7109eb346439f7c855bb29";
186 ASSERT_TRUE(OpenDocument(
"rectangles.pdf"));
189 ScopedFPDFDocument output_doc(FPDF_CreateNewDocument());
190 ASSERT_TRUE(output_doc);
192 FPDF_XOBJECT xobject =
193 FPDF_NewXObjectFromPage(output_doc.get(), document(), 0);
194 ASSERT_TRUE(xobject);
196 for (
int i = 0; i < 2; ++i) {
197 ScopedFPDFPage page(FPDFPage_New(output_doc.get(), 0, 612, 792));
201 ASSERT_TRUE(page_object);
203 FPDFPage_InsertObject(page.get(), page_object);
204 EXPECT_TRUE(FPDFPage_GenerateContent(page.get()));
206 ScopedFPDFBitmap page_bitmap = RenderPage(page.get());
207 CompareBitmap(page_bitmap.get(), 612, 792, checksum);
215 EXPECT_FLOAT_EQ(-1.0f, left);
216 EXPECT_FLOAT_EQ(-1.0f, bottom);
217 EXPECT_FLOAT_EQ(201.0f, right);
218 EXPECT_FLOAT_EQ(301.0f, top);
221 EXPECT_TRUE(FPDF_SaveAsCopy(output_doc.get(),
this, 0));
226 constexpr int kExpectedPageCount = 2;
227 ASSERT_TRUE(OpenSavedDocument());
229 FPDF_PAGE saved_pages[kExpectedPageCount];
230 FPDF_PAGEOBJECT xobjects[kExpectedPageCount];
231 for (
int i = 0; i < kExpectedPageCount; ++i) {
232 saved_pages[i] = LoadSavedPage(i);
233 ASSERT_TRUE(saved_pages[i]);
237 ASSERT_TRUE(xobjects[i]);
242 ScopedFPDFBitmap page_bitmap = RenderPage(saved_pages[i]);
243 CompareBitmap(page_bitmap.get(), 612, 792, checksum);
247 for (
int i = 0; i < kExpectedPageCount; ++i) {
254 EXPECT_FLOAT_EQ(-1.0f, left);
255 EXPECT_FLOAT_EQ(-1.0f, bottom);
256 EXPECT_FLOAT_EQ(201.0f, right);
257 EXPECT_FLOAT_EQ(301.0f, top);
261 EXPECT_NE(xobjects[0], xobjects[1]);
273 for (FPDF_PAGE saved_page : saved_pages)
274 CloseSavedPage(saved_page);
276 CloseSavedDocument();
280 const char* checksum = []() {
282 return "8e7d672f49f9ca98fb9157824cefc204";
284 return "4d5ca14827b7707f8283e639b33c121a";
287 ASSERT_TRUE(OpenDocument(
"rectangles.pdf"));
289 FPDF_XOBJECT xobject = FPDF_NewXObjectFromPage(document(), document(), 0);
290 ASSERT_TRUE(xobject);
292 FPDF_PAGE page = LoadPage(0);
296 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
301 ASSERT_TRUE(page_object);
304 static constexpr FS_MATRIX kMatrix = {0.5f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f};
311 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
312 CompareBitmap(bitmap.get(), 200, 300, checksum);
317 EXPECT_TRUE(FPDF_SaveAsCopy(document(),
this, 0));
318 VerifySavedDocument(200, 300, checksum);
324 ASSERT_TRUE(OpenDocument(
"rectangles.pdf"));
325 ASSERT_EQ(1, FPDF_GetPageCount(document()));
330 EXPECT_FALSE(FPDF_NewXObjectFromPage(document(),
nullptr, -1));
331 EXPECT_FALSE(FPDF_NewXObjectFromPage(document(),
nullptr, 0));
332 EXPECT_FALSE(FPDF_NewXObjectFromPage(document(),
nullptr, 1));
333 EXPECT_FALSE(FPDF_NewXObjectFromPage(
nullptr, document(), -1));
334 EXPECT_FALSE(FPDF_NewXObjectFromPage(
nullptr, document(), 0));
335 EXPECT_FALSE(FPDF_NewXObjectFromPage(
nullptr, document(), 1));
338 ScopedFPDFDocument output_doc(FPDF_CreateNewDocument());
339 ASSERT_TRUE(output_doc);
340 EXPECT_FALSE(FPDF_NewXObjectFromPage(output_doc.get(), document(), -1));
341 EXPECT_FALSE(FPDF_NewXObjectFromPage(output_doc.get(), document(), 1));
351 ASSERT_TRUE(OpenDocument(
"bug_925981.pdf"));
352 ScopedFPDFDocument output_doc_2up(
353 FPDF_ImportNPagesToOne(document(), 612, 792, 2, 1));
354 EXPECT_EQ(1, FPDF_GetPageCount(output_doc_2up.get()));
358 static constexpr int kPageCount = 4;
359 static constexpr int kTwoUpPageCount = 2;
360 static const char kRectsChecksum[] =
"140d629b3c96a07ced2e3e408ea85a1d";
361 static const char kTwoUpChecksum[] =
"fa4501562301b2e75da354bd067495ec";
363 ASSERT_TRUE(OpenDocument(
"bug_1229106.pdf"));
366 ASSERT_EQ(kPageCount, FPDF_GetPageCount(document()));
367 for (
int i = 0; i < kPageCount; ++i) {
368 FPDF_PAGE page = LoadPage(0);
369 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
370 CompareBitmap(bitmap.get(), 792, 612, kRectsChecksum);
375 ScopedFPDFDocument output_doc_2up(
376 FPDF_ImportNPagesToOne(document(), 612, 792, 1, 2));
377 ASSERT_EQ(kTwoUpPageCount, FPDF_GetPageCount(output_doc_2up.get()));
378 for (
int i = 0; i < kTwoUpPageCount; ++i) {
379 ScopedFPDFPage page(FPDF_LoadPage(output_doc_2up.get(), i));
380 ScopedFPDFBitmap bitmap = RenderPage(page.get());
381 CompareBitmap(bitmap.get(), 612, 792, kTwoUpChecksum);
414 ASSERT_TRUE(OpenDocument(
"viewer_pref_types.pdf"));
416 ScopedFPDFDocument output_doc(FPDF_CreateNewDocument());
417 ASSERT_TRUE(output_doc);
418 EXPECT_TRUE(FPDF_CopyViewerPreferences(output_doc.get(), document()));
422 CPDFDocumentFromFPDFDocument(output_doc.get());
424 output_doc_impl->GetRoot()->GetDictFor(
"ViewerPreferences");
426 EXPECT_EQ(6u, prefs->size());
429 ASSERT_TRUE(bool_obj);
430 EXPECT_TRUE(bool_obj->IsBoolean());
432 RetainPtr<
const CPDF_Number> num_obj = prefs->GetNumberFor(
"Num");
433 ASSERT_TRUE(num_obj);
434 EXPECT_TRUE(num_obj->IsInteger());
435 EXPECT_EQ(1, num_obj->GetInteger());
437 RetainPtr<
const CPDF_String> str_obj = prefs->GetStringFor(
"Str");
438 ASSERT_TRUE(str_obj);
439 EXPECT_EQ(
"str", str_obj->GetString());
441 EXPECT_EQ(
"name", prefs->GetNameFor(
"Name"));
443 RetainPtr<
const CPDF_Array> empty_array_obj =
444 prefs->GetArrayFor(
"EmptyArray");
445 ASSERT_TRUE(empty_array_obj);
446 EXPECT_TRUE(empty_array_obj->IsEmpty());
448 RetainPtr<
const CPDF_Array> good_array_obj = prefs->GetArrayFor(
"GoodArray");
449 ASSERT_TRUE(good_array_obj);
450 EXPECT_EQ(4u, good_array_obj->size());
454 ASSERT_TRUE(OpenDocument(
"hello_world.pdf"));
456 FPDF_PAGE page = LoadPage(0);
459 ScopedFPDFDocument output_doc(FPDF_CreateNewDocument());
460 EXPECT_TRUE(output_doc);
462 static constexpr int kBadIndices1[] = {-1};
463 EXPECT_FALSE(FPDF_ImportPagesByIndex(
464 output_doc.get(), document(), kBadIndices1,
std::size(kBadIndices1), 0));
466 static constexpr int kBadIndices2[] = {1};
467 EXPECT_FALSE(FPDF_ImportPagesByIndex(
468 output_doc.get(), document(), kBadIndices2,
std::size(kBadIndices2), 0));
470 static constexpr int kBadIndices3[] = {-1, 0, 1};
471 EXPECT_FALSE(FPDF_ImportPagesByIndex(
472 output_doc.get(), document(), kBadIndices3,
std::size(kBadIndices3), 0));
474 static constexpr int kBadIndices4[] = {42};
475 EXPECT_FALSE(FPDF_ImportPagesByIndex(
476 output_doc.get(), document(), kBadIndices4,
std::size(kBadIndices4), 0));
482 ASSERT_TRUE(OpenDocument(
"viewer_ref.pdf"));
484 FPDF_PAGE page = LoadPage(0);
487 ScopedFPDFDocument output_doc(FPDF_CreateNewDocument());
488 EXPECT_TRUE(output_doc);
490 static constexpr int kGoodIndices1[] = {0, 0, 0, 0};
491 EXPECT_TRUE(FPDF_ImportPagesByIndex(output_doc.get(), document(),
492 kGoodIndices1,
std::size(kGoodIndices1),
494 EXPECT_EQ(4, FPDF_GetPageCount(output_doc.get()));
496 static constexpr int kGoodIndices2[] = {0};
497 EXPECT_TRUE(FPDF_ImportPagesByIndex(output_doc.get(), document(),
498 kGoodIndices2,
std::size(kGoodIndices2),
500 EXPECT_EQ(5, FPDF_GetPageCount(output_doc.get()));
502 static constexpr int kGoodIndices3[] = {4};
503 EXPECT_TRUE(FPDF_ImportPagesByIndex(output_doc.get(), document(),
504 kGoodIndices3,
std::size(kGoodIndices3),
506 EXPECT_EQ(6, FPDF_GetPageCount(output_doc.get()));
508 static constexpr int kGoodIndices4[] = {1, 2, 3};
509 EXPECT_TRUE(FPDF_ImportPagesByIndex(output_doc.get(), document(),
510 kGoodIndices4,
std::size(kGoodIndices4),
512 EXPECT_EQ(9, FPDF_GetPageCount(output_doc.get()));
516 FPDF_ImportPagesByIndex(output_doc.get(), document(),
nullptr, 0, 0));
517 EXPECT_EQ(14, FPDF_GetPageCount(output_doc.get()));
523 ASSERT_TRUE(OpenDocument(
"hello_world.pdf"));
525 FPDF_PAGE page = LoadPage(0);
528 ScopedFPDFDocument output_doc(FPDF_CreateNewDocument());
529 EXPECT_TRUE(output_doc);
530 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"clams", 0));
531 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"0", 0));
532 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"42", 0));
533 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"1,2", 0));
534 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"1-2", 0));
535 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
",1", 0));
536 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"1,", 0));
537 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"1-", 0));
538 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"-1", 0));
539 EXPECT_FALSE(FPDF_ImportPages(output_doc.get(), document(),
"-,0,,,1-", 0));
545 ASSERT_TRUE(OpenDocument(
"viewer_ref.pdf"));
547 FPDF_PAGE page = LoadPage(0);
550 ScopedFPDFDocument output_doc(FPDF_CreateNewDocument());
551 EXPECT_TRUE(output_doc);
552 EXPECT_TRUE(FPDF_CopyViewerPreferences(output_doc.get(), document()));
553 EXPECT_TRUE(FPDF_ImportPages(output_doc.get(), document(),
"1,1,1,1", 0));
554 EXPECT_EQ(4, FPDF_GetPageCount(output_doc.get()));
555 EXPECT_TRUE(FPDF_ImportPages(output_doc.get(), document(),
"1-1", 0));
556 EXPECT_EQ(5, FPDF_GetPageCount(output_doc.get()));
557 EXPECT_TRUE(FPDF_ImportPages(output_doc.get(), document(),
"5-5", 0));
558 EXPECT_EQ(6, FPDF_GetPageCount(output_doc.get()));
559 EXPECT_TRUE(FPDF_ImportPages(output_doc.get(), document(),
"2-4", 0));
560 EXPECT_EQ(9, FPDF_GetPageCount(output_doc.get()));
566 ASSERT_TRUE(OpenDocument(
"bug_664284.pdf"));
568 FPDF_PAGE page = LoadPage(0);
569 ASSERT_NE(
nullptr, page);
571 ScopedFPDFDocument output_doc(FPDF_CreateNewDocument());
572 EXPECT_TRUE(output_doc);
574 static constexpr int kIndices[] = {0};
575 EXPECT_TRUE(FPDF_ImportPagesByIndex(output_doc.get(), document(), kIndices,
576 std::size(kIndices), 0));
582 ASSERT_TRUE(OpenDocument(
"bug_750568.pdf"));
583 ASSERT_EQ(4, FPDF_GetPageCount(document()));
585 for (size_t i = 0; i < 4; ++i) {
586 FPDF_PAGE page = LoadPage(i);
589 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
590 CompareBitmap(bitmap.get(), 200, 200, Bug750568PageHash(i));
594 ScopedFPDFDocument output_doc(FPDF_CreateNewDocument());
595 ASSERT_TRUE(output_doc);
597 static constexpr int kIndices[] = {0, 1, 2, 3};
598 EXPECT_TRUE(FPDF_ImportPagesByIndex(output_doc.get(), document(), kIndices,
599 std::size(kIndices), 0));
600 ASSERT_EQ(4, FPDF_GetPageCount(output_doc.get()));
601 for (size_t i = 0; i < 4; ++i) {
602 ScopedFPDFPage page(FPDF_LoadPage(output_doc.get(), i));
605 ScopedFPDFBitmap bitmap = RenderPage(page.get());
606 CompareBitmap(bitmap.get(), 200, 200, Bug750568PageHash(i));
611 ASSERT_TRUE(OpenDocument(
"zero_length_stream.pdf"));
612 FPDF_PAGE page = LoadPage(0);
615 ScopedFPDFBitmap bitmap = RenderLoadedPage(page);
619 ScopedFPDFDocument new_doc(FPDF_CreateNewDocument());
620 ASSERT_TRUE(new_doc);
622 static constexpr int kIndices[] = {0};
623 EXPECT_TRUE(FPDF_ImportPagesByIndex(new_doc.get(), document(), kIndices,
624 std::size(kIndices), 0));
626 EXPECT_EQ(1, FPDF_GetPageCount(new_doc.get()));
627 ScopedFPDFPage new_page(FPDF_LoadPage(new_doc.get(), 0));
628 ASSERT_TRUE(new_page);
629 ScopedFPDFBitmap new_bitmap = RenderPage(new_page.get());
634 ASSERT_TRUE(OpenDocument(
"hello_world.pdf"));
635 EXPECT_EQ(1, FPDF_GetPageCount(document()));
637 std::string file_path = PathService::GetTestFilePath(
"rectangles.pdf");
638 ASSERT_FALSE(file_path.empty());
639 std::vector<uint8_t> file_contents = GetFileContents(file_path.c_str());
640 ASSERT_FALSE(file_contents.empty());
642 ScopedFPDFDocument src_doc(FPDF_LoadMemDocument(
643 file_contents.data(), file_contents.size(),
nullptr));
644 ASSERT_TRUE(src_doc);
646 static constexpr int kIndices[] = {0};
647 EXPECT_TRUE(FPDF_ImportPagesByIndex(document(), src_doc.get(), kIndices,
648 std::size(kIndices), 0));
649 EXPECT_EQ(2, FPDF_GetPageCount(document()));
651 EXPECT_TRUE(FPDF_ImportPages(document(), src_doc.get(),
"1", 0));
652 EXPECT_EQ(3, FPDF_GetPageCount(document()));
656 ASSERT_TRUE(OpenDocument(
"bad_page_type.pdf"));
657 EXPECT_EQ(2, FPDF_GetPageCount(document()));
659 std::string file_path = PathService::GetTestFilePath(
"rectangles.pdf");
660 ASSERT_FALSE(file_path.empty());
661 std::vector<uint8_t> file_contents = GetFileContents(file_path.c_str());
662 ASSERT_FALSE(file_contents.empty());
664 ScopedFPDFDocument src_doc(FPDF_LoadMemDocument(
665 file_contents.data(), file_contents.size(),
nullptr));
666 ASSERT_TRUE(src_doc);
667 EXPECT_EQ(1, FPDF_GetPageCount(src_doc.get()));
669 FPDFPage_Delete(document(), 0);
670 EXPECT_EQ(1, FPDF_GetPageCount(document()));
672 static constexpr int kPageIndices[] = {0};
673 ASSERT_TRUE(FPDF_ImportPagesByIndex(document(), src_doc.get(), kPageIndices,
674 std::size(kPageIndices), 0));
675 EXPECT_EQ(2, FPDF_GetPageCount(document()));
676 const char*
const new_page_1_checksum = []() {
678 return "b4e411a6b5ffa59a50efede2efece597";
680 return "0a90de37f52127619c3dfb642b5fa2fe";
682 const char new_page_2_checksum[] =
"39336760026e7f3d26135e3b765125c3";
684 FPDF_PAGE page = LoadPage(0);
686 ScopedFPDFBitmap bitmap = RenderPage(page);
687 CompareBitmap(bitmap.get(), 200, 300, new_page_1_checksum);
691 FPDF_PAGE page = LoadPage(1);
693 ScopedFPDFBitmap bitmap = RenderPage(page);
694 CompareBitmap(bitmap.get(), 200, 100, new_page_2_checksum);
698 EXPECT_TRUE(FPDF_SaveAsCopy(document(),
this, 0));
700 ASSERT_TRUE(OpenSavedDocument());
701 EXPECT_EQ(2, FPDF_GetPageCount(saved_document()));
703 FPDF_PAGE page = LoadSavedPage(0);
705 ScopedFPDFBitmap bitmap = RenderPage(page);
706 CompareBitmap(bitmap.get(), 200, 300, new_page_1_checksum);
707 CloseSavedPage(page);
710 FPDF_PAGE page = LoadSavedPage(1);
712 ScopedFPDFBitmap bitmap = RenderPage(page);
713 CompareBitmap(bitmap.get(), 200, 100, new_page_2_checksum);
714 CloseSavedPage(page);
virtual CPDF_FormObject * AsForm()