OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <limits.h> | 5 #include <limits.h> |
6 #include <stdio.h> | 6 #include <stdio.h> |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 #include <string.h> | 8 #include <string.h> |
9 | 9 |
10 #include <list> | 10 #include <list> |
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
491 const std::string& events) { | 491 const std::string& events) { |
492 FPDF_PAGE page = FPDF_LoadPage(doc, page_index); | 492 FPDF_PAGE page = FPDF_LoadPage(doc, page_index); |
493 if (!page) { | 493 if (!page) { |
494 return false; | 494 return false; |
495 } | 495 } |
496 FPDF_TEXTPAGE text_page = FPDFText_LoadPage(page); | 496 FPDF_TEXTPAGE text_page = FPDFText_LoadPage(page); |
497 FORM_OnAfterLoadPage(page, form); | 497 FORM_OnAfterLoadPage(page, form); |
498 FORM_DoPageAAction(page, form, FPDFPAGE_AACTION_OPEN); | 498 FORM_DoPageAAction(page, form, FPDFPAGE_AACTION_OPEN); |
499 | 499 |
500 if (options.send_events) | 500 if (options.send_events) |
501 SendPageEvents(doc, form, events); | 501 SendPageEvents(form, page, events); |
502 | 502 |
503 double scale = 1.0; | 503 double scale = 1.0; |
504 if (!options.scale_factor_as_string.empty()) { | 504 if (!options.scale_factor_as_string.empty()) { |
505 std::stringstream(options.scale_factor_as_string) >> scale; | 505 std::stringstream(options.scale_factor_as_string) >> scale; |
506 } | 506 } |
507 int width = static_cast<int>(FPDF_GetPageWidth(page) * scale); | 507 int width = static_cast<int>(FPDF_GetPageWidth(page) * scale); |
508 int height = static_cast<int>(FPDF_GetPageHeight(page) * scale); | 508 int height = static_cast<int>(FPDF_GetPageHeight(page) * scale); |
509 int alpha = FPDFPage_HasTransparency(page) ? 1 : 0; | 509 int alpha = FPDFPage_HasTransparency(page) ? 1 : 0; |
510 FPDF_BITMAP bitmap = FPDFBitmap_Create(width, height, alpha); | 510 FPDF_BITMAP bitmap = FPDFBitmap_Create(width, height, alpha); |
511 if (!bitmap) { | 511 if (!bitmap) { |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
557 FPDFText_ClosePage(text_page); | 557 FPDFText_ClosePage(text_page); |
558 FPDF_ClosePage(page); | 558 FPDF_ClosePage(page); |
559 return true; | 559 return true; |
560 } | 560 } |
561 | 561 |
562 void RenderPdf(const std::string& name, | 562 void RenderPdf(const std::string& name, |
563 const char* pBuf, | 563 const char* pBuf, |
564 size_t len, | 564 size_t len, |
565 const Options& options, | 565 const Options& options, |
566 const std::string& events) { | 566 const std::string& events) { |
567 fprintf(stderr, "Rendering PDF file %s.\n", name.c_str()); | |
568 | |
569 IPDF_JSPLATFORM platform_callbacks; | 567 IPDF_JSPLATFORM platform_callbacks; |
570 memset(&platform_callbacks, '\0', sizeof(platform_callbacks)); | 568 memset(&platform_callbacks, '\0', sizeof(platform_callbacks)); |
571 platform_callbacks.version = 3; | 569 platform_callbacks.version = 3; |
572 platform_callbacks.app_alert = ExampleAppAlert; | 570 platform_callbacks.app_alert = ExampleAppAlert; |
573 platform_callbacks.app_response = ExampleAppResponse; | 571 platform_callbacks.app_response = ExampleAppResponse; |
574 platform_callbacks.Doc_gotoPage = ExampleDocGotoPage; | 572 platform_callbacks.Doc_gotoPage = ExampleDocGotoPage; |
575 platform_callbacks.Doc_mail = ExampleDocMail; | 573 platform_callbacks.Doc_mail = ExampleDocMail; |
576 | 574 |
577 FPDF_FORMFILLINFO form_callbacks; | 575 FPDF_FORMFILLINFO form_callbacks; |
578 memset(&form_callbacks, '\0', sizeof(form_callbacks)); | 576 memset(&form_callbacks, '\0', sizeof(form_callbacks)); |
(...skipping 20 matching lines...) Expand all Loading... |
599 memset(&hints, '\0', sizeof(hints)); | 597 memset(&hints, '\0', sizeof(hints)); |
600 hints.version = 1; | 598 hints.version = 1; |
601 hints.AddSegment = Add_Segment; | 599 hints.AddSegment = Add_Segment; |
602 | 600 |
603 FPDF_DOCUMENT doc; | 601 FPDF_DOCUMENT doc; |
604 int nRet = PDF_DATA_NOTAVAIL; | 602 int nRet = PDF_DATA_NOTAVAIL; |
605 bool bIsLinearized = false; | 603 bool bIsLinearized = false; |
606 FPDF_AVAIL pdf_avail = FPDFAvail_Create(&file_avail, &file_access); | 604 FPDF_AVAIL pdf_avail = FPDFAvail_Create(&file_avail, &file_access); |
607 | 605 |
608 if (FPDFAvail_IsLinearized(pdf_avail) == PDF_LINEARIZED) { | 606 if (FPDFAvail_IsLinearized(pdf_avail) == PDF_LINEARIZED) { |
609 fprintf(stderr, "Linearized path...\n"); | |
610 doc = FPDFAvail_GetDocument(pdf_avail, nullptr); | 607 doc = FPDFAvail_GetDocument(pdf_avail, nullptr); |
611 if (doc) { | 608 if (doc) { |
612 while (nRet == PDF_DATA_NOTAVAIL) { | 609 while (nRet == PDF_DATA_NOTAVAIL) { |
613 nRet = FPDFAvail_IsDocAvail(pdf_avail, &hints); | 610 nRet = FPDFAvail_IsDocAvail(pdf_avail, &hints); |
614 } | 611 } |
615 if (nRet == PDF_DATA_ERROR) { | 612 if (nRet == PDF_DATA_ERROR) { |
616 fprintf(stderr, "Unknown error in checking if doc was available.\n"); | 613 fprintf(stderr, "Unknown error in checking if doc was available.\n"); |
617 return; | 614 return; |
618 } | 615 } |
619 nRet = FPDFAvail_IsFormAvail(pdf_avail, &hints); | 616 nRet = FPDFAvail_IsFormAvail(pdf_avail, &hints); |
620 if (nRet == PDF_FORM_ERROR || nRet == PDF_FORM_NOTAVAIL) { | 617 if (nRet == PDF_FORM_ERROR || nRet == PDF_FORM_NOTAVAIL) { |
621 fprintf(stderr, | 618 fprintf(stderr, |
622 "Error %d was returned in checking if form was available.\n", | 619 "Error %d was returned in checking if form was available.\n", |
623 nRet); | 620 nRet); |
624 return; | 621 return; |
625 } | 622 } |
626 bIsLinearized = true; | 623 bIsLinearized = true; |
627 } | 624 } |
628 } else { | 625 } else { |
629 fprintf(stderr, "Non-linearized path...\n"); | |
630 doc = FPDF_LoadCustomDocument(&file_access, nullptr); | 626 doc = FPDF_LoadCustomDocument(&file_access, nullptr); |
631 } | 627 } |
632 | 628 |
633 if (!doc) { | 629 if (!doc) { |
634 unsigned long err = FPDF_GetLastError(); | 630 unsigned long err = FPDF_GetLastError(); |
635 fprintf(stderr, "Load pdf docs unsuccessful: "); | 631 fprintf(stderr, "Load pdf docs unsuccessful: "); |
636 switch (err) { | 632 switch (err) { |
637 case FPDF_ERR_SUCCESS: | 633 case FPDF_ERR_SUCCESS: |
638 fprintf(stderr, "Success"); | 634 fprintf(stderr, "Success"); |
639 break; | 635 break; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
711 FPDF_CloseDocument(doc); | 707 FPDF_CloseDocument(doc); |
712 FPDFDOC_ExitFormFillEnvironment(form); | 708 FPDFDOC_ExitFormFillEnvironment(form); |
713 #else // PDF_ENABLE_XFA | 709 #else // PDF_ENABLE_XFA |
714 FPDFDOC_ExitFormFillEnvironment(form); | 710 FPDFDOC_ExitFormFillEnvironment(form); |
715 FPDF_CloseDocument(doc); | 711 FPDF_CloseDocument(doc); |
716 #endif // PDF_ENABLE_XFA | 712 #endif // PDF_ENABLE_XFA |
717 | 713 |
718 FPDFAvail_Destroy(pdf_avail); | 714 FPDFAvail_Destroy(pdf_avail); |
719 | 715 |
720 fprintf(stderr, "Rendered %d pages.\n", rendered_pages); | 716 fprintf(stderr, "Rendered %d pages.\n", rendered_pages); |
721 fprintf(stderr, "Skipped %d bad pages.\n", bad_pages); | 717 if (bad_pages) |
| 718 fprintf(stderr, "Skipped %d bad pages.\n", bad_pages); |
722 } | 719 } |
723 | 720 |
724 static void ShowConfig() { | 721 static void ShowConfig() { |
725 std::string config; | 722 std::string config; |
726 std::string maybe_comma; | 723 std::string maybe_comma; |
727 #if PDF_ENABLE_V8 | 724 #if PDF_ENABLE_V8 |
728 config.append(maybe_comma); | 725 config.append(maybe_comma); |
729 config.append("V8"); | 726 config.append("V8"); |
730 maybe_comma = ","; | 727 maybe_comma = ","; |
731 #endif // PDF_ENABLE_V8 | 728 #endif // PDF_ENABLE_V8 |
732 #ifdef V8_USE_EXTERNAL_STARTUP_DATA | 729 #ifdef V8_USE_EXTERNAL_STARTUP_DATA |
733 config.append(maybe_comma); | 730 config.append(maybe_comma); |
734 config.append("V8_EXTERNAL"); | 731 config.append("V8_EXTERNAL"); |
735 maybe_comma = ","; | 732 maybe_comma = ","; |
736 #endif // V8_USE_EXTERNAL_STARTUP_DATA | 733 #endif // V8_USE_EXTERNAL_STARTUP_DATA |
737 #ifdef PDF_ENABLE_XFA | 734 #ifdef PDF_ENABLE_XFA |
738 config.append(maybe_comma); | 735 config.append(maybe_comma); |
739 config.append("XFA"); | 736 config.append("XFA"); |
740 maybe_comma = ","; | 737 maybe_comma = ","; |
741 #endif // PDF_ENABLE_XFA | 738 #endif // PDF_ENABLE_XFA |
742 printf("%s\n", config.c_str()); | 739 printf("%s\n", config.c_str()); |
743 } | 740 } |
744 | 741 |
745 static const char usage_string[] = | 742 static const char usage_string[] = |
746 "Usage: pdfium_test [OPTION] [FILE]...\n" | 743 "Usage: pdfium_test [OPTION] [FILE]...\n" |
747 " --show-config - print build options and exit\n" | 744 " --show-config - print build options and exit\n" |
| 745 " --send-events - send input described by .evt file\n" |
748 " --bin-dir=<path> - override path to v8 external data\n" | 746 " --bin-dir=<path> - override path to v8 external data\n" |
749 " --font-dir=<path> - override path to external fonts\n" | 747 " --font-dir=<path> - override path to external fonts\n" |
750 " --scale=<number> - scale output size by number (e.g. 0.5)\n" | 748 " --scale=<number> - scale output size by number (e.g. 0.5)\n" |
751 #ifdef _WIN32 | 749 #ifdef _WIN32 |
752 " --bmp - write page images <pdf-name>.<page-number>.bmp\n" | 750 " --bmp - write page images <pdf-name>.<page-number>.bmp\n" |
753 " --emf - write page meta files <pdf-name>.<page-number>.emf\n" | 751 " --emf - write page meta files <pdf-name>.<page-number>.emf\n" |
754 #endif // _WIN32 | 752 #endif // _WIN32 |
755 " --png - write page images <pdf-name>.<page-number>.png\n" | 753 " --png - write page images <pdf-name>.<page-number>.png\n" |
756 #ifdef PDF_ENABLE_SKIA | 754 #ifdef PDF_ENABLE_SKIA |
757 " --skp - write page images <pdf-name>.<page-number>.skp\n" | 755 " --skp - write page images <pdf-name>.<page-number>.skp\n" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
811 FSDK_SetUnSpObjProcessHandler(&unsuppored_info); | 809 FSDK_SetUnSpObjProcessHandler(&unsuppored_info); |
812 | 810 |
813 while (!files.empty()) { | 811 while (!files.empty()) { |
814 std::string filename = files.front(); | 812 std::string filename = files.front(); |
815 files.pop_front(); | 813 files.pop_front(); |
816 size_t file_length = 0; | 814 size_t file_length = 0; |
817 std::unique_ptr<char, pdfium::FreeDeleter> file_contents = | 815 std::unique_ptr<char, pdfium::FreeDeleter> file_contents = |
818 GetFileContents(filename.c_str(), &file_length); | 816 GetFileContents(filename.c_str(), &file_length); |
819 if (!file_contents) | 817 if (!file_contents) |
820 continue; | 818 continue; |
| 819 fprintf(stderr, "Rendering PDF file %s.\n", filename.c_str()); |
821 std::string events; | 820 std::string events; |
822 if (options.send_events) { | 821 if (options.send_events) { |
823 std::string event_filename = filename; | 822 std::string event_filename = filename; |
824 size_t event_length = 0; | 823 size_t event_length = 0; |
825 size_t extension_pos = event_filename.find(".pdf"); | 824 size_t extension_pos = event_filename.find(".pdf"); |
826 if (extension_pos != std::string::npos) { | 825 if (extension_pos != std::string::npos) { |
827 event_filename.replace(extension_pos, 4, ".evt"); | 826 event_filename.replace(extension_pos, 4, ".evt"); |
828 std::unique_ptr<char, pdfium::FreeDeleter> event_contents = | 827 std::unique_ptr<char, pdfium::FreeDeleter> event_contents = |
829 GetFileContents(event_filename.c_str(), &event_length); | 828 GetFileContents(event_filename.c_str(), &event_length); |
830 if (event_contents) { | 829 if (event_contents) { |
| 830 fprintf(stderr, "Sending events from: %s\n", event_filename.c_str()); |
831 events = std::string(event_contents.get(), event_length); | 831 events = std::string(event_contents.get(), event_length); |
832 } else { | |
833 fprintf(stderr, "Warning: no event file: %s\n", | |
834 event_filename.c_str()); | |
835 } | 832 } |
836 } | 833 } |
837 } | 834 } |
838 RenderPdf(filename, file_contents.get(), file_length, options, events); | 835 RenderPdf(filename, file_contents.get(), file_length, options, events); |
839 } | 836 } |
840 | 837 |
841 FPDF_DestroyLibrary(); | 838 FPDF_DestroyLibrary(); |
842 #ifdef PDF_ENABLE_V8 | 839 #ifdef PDF_ENABLE_V8 |
843 v8::V8::ShutdownPlatform(); | 840 v8::V8::ShutdownPlatform(); |
844 delete platform; | 841 delete platform; |
845 #endif // PDF_ENABLE_V8 | 842 #endif // PDF_ENABLE_V8 |
846 | 843 |
847 return 0; | 844 return 0; |
848 } | 845 } |
OLD | NEW |