Merge to Master: Add output scale factor command line parameter to pdfium_test.
authorTom Sepez <tsepez@chromium.org>
Thu, 29 Jan 2015 23:48:15 +0000 (15:48 -0800)
committerTom Sepez <tsepez@chromium.org>
Thu, 29 Jan 2015 23:48:15 +0000 (15:48 -0800)
Original Review URL: https://codereview.chromium.org/861203003

TBR=thestig@chromium.org

Review URL: https://codereview.chromium.org/889733002

samples/pdfium_test.cc

index 9e1527d..debe033 100644 (file)
@@ -8,6 +8,7 @@
 #include <string.h>
 
 #include <list>
+#include <sstream>
 #include <string>
 #include <utility>
 #include <vector>
@@ -40,6 +41,7 @@ struct Options {
   Options() : output_format(OUTPUT_NONE) { }
 
   OutputFormat output_format;
+  std::string scale_factor_as_string;
   std::string exe_path;
   std::string bin_directory;
 };
@@ -303,6 +305,13 @@ bool ParseCommandLine(const std::vector<std::string>& args,
       options->bin_directory = cur_arg.substr(10);
     }
 #endif  // V8_USE_EXTERNAL_STARTUP_DATA
+    else if (cur_arg.size() > 8 && cur_arg.compare(0, 8, "--scale=") == 0) {
+      if (!options->scale_factor_as_string.empty()) {
+        fprintf(stderr, "Duplicate --scale argument\n");
+        return false;
+      }
+      options->scale_factor_as_string = cur_arg.substr(8);
+    }
     else
       break;
   }
@@ -344,7 +353,7 @@ void Add_Segment(FX_DOWNLOADHINTS* pThis, size_t offset, size_t size) {
 }
 
 void RenderPdf(const std::string& name, const char* pBuf, size_t len,
-               OutputFormat format) {
+               const Options& options) {
   printf("Rendering PDF file %s.\n", name.c_str());
 
   IPDF_JSPLATFORM platform_callbacks;
@@ -420,9 +429,15 @@ void RenderPdf(const std::string& name, const char* pBuf, size_t len,
 
     int width = static_cast<int>(FPDF_GetPageWidth(page));
     int height = static_cast<int>(FPDF_GetPageHeight(page));
+    if (!options.scale_factor_as_string.empty()) {
+      double scale = 1.0;
+      std::stringstream(options.scale_factor_as_string) >> scale;
+      width *= scale;
+      height *= scale;
+    }
+
     FPDF_BITMAP bitmap = FPDFBitmap_Create(width, height, 0);
     FPDFBitmap_FillRect(bitmap, 0, 0, width, height, 0xFFFFFFFF);
-
     FPDF_RenderPageBitmap(bitmap, page, 0, 0, width, height, 0, 0);
     rendered_pages ++;
 
@@ -431,7 +446,7 @@ void RenderPdf(const std::string& name, const char* pBuf, size_t len,
     const char* buffer =
         reinterpret_cast<const char*>(FPDFBitmap_GetBuffer(bitmap));
 
-    switch (format) {
+    switch (options.output_format) {
 #ifdef _WIN32
       case OUTPUT_BMP:
         WriteBmp(name.c_str(), i, buffer, stride, width, height);
@@ -472,6 +487,7 @@ int main(int argc, const char* argv[]) {
   if (!ParseCommandLine(args, &options, &files)) {
     printf("Usage: pdfium_test [OPTION] [FILE]...\n");
     printf("--bin-dir=<path> - override path to v8 external data\n");
+    printf("--scale=<number> - scale output size by number (e.g. 0.5)\n");
     printf("--ppm - write page images <pdf-name>.<page-number>.ppm\n");
 #ifdef _WIN32
     printf("--bmp - write page images <pdf-name>.<page-number>.bmp\n");
@@ -509,7 +525,7 @@ int main(int argc, const char* argv[]) {
     char* file_contents = GetFileContents(filename.c_str(), &file_length);
     if (!file_contents)
       continue;
-    RenderPdf(filename, file_contents, file_length, options.output_format);
+    RenderPdf(filename, file_contents, file_length, options);
     free(file_contents);
   }