Chromium Code Reviews| Index: samples/pdfium_test.cc |
| diff --git a/samples/pdfium_test.cc b/samples/pdfium_test.cc |
| index 9ba11e12e4b506fad5f60747620bb891cf5a2a8b..f0b6b7174c984c93b14ccf46032362c13f067561 100644 |
| --- a/samples/pdfium_test.cc |
| +++ b/samples/pdfium_test.cc |
| @@ -18,6 +18,7 @@ |
| #endif |
| #include "public/fpdf_dataavail.h" |
| +#include "public/fpdf_doc.h" |
| #include "public/fpdf_edit.h" |
| #include "public/fpdf_ext.h" |
| #include "public/fpdf_formfill.h" |
| @@ -55,10 +56,14 @@ enum OutputFormat { |
| struct Options { |
| Options() |
| - : show_config(false), send_events(false), output_format(OUTPUT_NONE) {} |
| + : show_config(false), |
| + send_events(false), |
| + show_annotations(false), |
| + output_format(OUTPUT_NONE) {} |
| bool show_config; |
| bool send_events; |
| + bool show_annotations; |
| OutputFormat output_format; |
| std::string scale_factor_as_string; |
| std::string exe_path; |
| @@ -342,6 +347,8 @@ bool ParseCommandLine(const std::vector<std::string>& args, |
| options->show_config = true; |
| } else if (cur_arg == "--send-events") { |
| options->send_events = true; |
| + } else if (cur_arg == "--show-annotations") { |
| + options->show_annotations = true; |
| } else if (cur_arg == "--ppm") { |
| if (options->output_format != OUTPUT_NONE) { |
| fprintf(stderr, "Duplicate or conflicting --ppm argument\n"); |
| @@ -483,6 +490,39 @@ void SendPageEvents(const FPDF_FORMHANDLE& form, |
| } |
| } |
| +void ShowAnnotations(const FPDF_DOCUMENT& doc, const int page_index) { |
| + FPDF_PAGE page = FPDF_LoadPage(doc, page_index); |
|
Lei Zhang
2016/05/23 16:47:33
Why not put the ShowAnnotations() call inside Rend
|
| + if (!page) { |
| + fprintf(stderr, "bad page %d\n", page_index); |
| + return; |
| + } |
| + printf("page %d [%g,%g]:\n", page_index, FPDF_GetPageWidth(page), |
| + FPDF_GetPageHeight(page)); |
| + int startPos = 0; |
| + FPDF_LINK linkAnnot; |
| + while (FPDFLink_Enumerate(page, &startPos, &linkAnnot)) { |
| + FS_RECTF rect = {0.0f, 0.0f, 0.0f, 0.0f}; |
| + (void)FPDFLink_GetAnnotRect(linkAnnot, &rect); |
| + FPDF_ACTION action = FPDFLink_GetAction(linkAnnot); |
| + if (action && PDFACTION_URI == FPDFAction_GetType(action)) { |
| + auto len = FPDFAction_GetURIPath(doc, action, nullptr, 0); |
|
Lei Zhang
2016/05/23 16:47:33
write out unsigned int instead of using auto?
|
| + std::vector<char> buffer(len); |
| + (void)FPDFAction_GetURIPath(doc, action, &buffer[0], buffer.size()); |
| + printf(" <%g,%g,%g,%g> uri: \"%.*s\"\n", rect.left, rect.top, |
|
Lei Zhang
2016/05/23 16:47:32
I see 5 conversion specifiers and 6 variables.
|
| + rect.right, rect.bottom, (int)buffer.size(), &buffer[0]); |
|
Lei Zhang
2016/05/23 16:47:33
Borrow PRIuS from base/format_macros.h for size_t
|
| + } else if (FPDF_DEST dest = FPDFLink_GetDest(doc, linkAnnot)) { |
| + unsigned long dest_page = FPDFDest_GetPageIndex(doc, dest); |
| + FS_FLOAT x = 0.0f; |
| + FS_FLOAT y = 0.0f; |
| + (void)FPDFDest_GetLocationInPage(dest, &x, &y); |
| + printf(" <%g,%g,%g,%g> page: %lu; point: (%g,%g)\n", rect.left, |
| + rect.top, rect.right, rect.bottom, dest_page, x, y); |
| + } |
| + } |
| + FPDF_ClosePage(page); |
| + printf("\n"); |
| +} |
| + |
| bool RenderPage(const std::string& name, |
| const FPDF_DOCUMENT& doc, |
| const FPDF_FORMHANDLE& form, |
| @@ -696,6 +736,9 @@ void RenderPdf(const std::string& name, |
| } else { |
| ++bad_pages; |
| } |
| + if (options.show_annotations) { |
| + ShowAnnotations(doc, i); |
| + } |
| } |
| FORM_DoDocumentAAction(form, FPDFDOC_AACTION_WC); |
| @@ -741,11 +784,13 @@ static void ShowConfig() { |
| static const char usage_string[] = |
| "Usage: pdfium_test [OPTION] [FILE]...\n" |
| - " --show-config - print build options and exit\n" |
| - " --send-events - send input described by .evt file\n" |
| - " --bin-dir=<path> - override path to v8 external data\n" |
| - " --font-dir=<path> - override path to external fonts\n" |
| - " --scale=<number> - scale output size by number (e.g. 0.5)\n" |
| + " --show-config - print build options and exit\n" |
| + " --send-events - send input described by .evt file\n" |
| + " --bin-dir=<path> - override path to v8 external data\n" |
| + " --font-dir=<path> - override path to external fonts\n" |
| + " --show-annotations - print information about URL and internal\n" |
| + " link annotations in the document.\n" |
| + " --scale=<number> - scale output size by number (e.g. 0.5)\n" |
| #ifdef _WIN32 |
| " --bmp - write page images <pdf-name>.<page-number>.bmp\n" |
| " --emf - write page meta files <pdf-name>.<page-number>.emf\n" |