summaryrefslogtreecommitdiff
path: root/samples/pdfium_test.cc
diff options
context:
space:
mode:
authorTom Sepez <tsepez@chromium.org>2015-01-29 15:44:37 -0800
committerTom Sepez <tsepez@chromium.org>2015-01-29 15:44:37 -0800
commitdaa2e84dfca2f1cf39e064bd9ad6ee3e2cd70825 (patch)
treea64e16da35fb02b7951577e26a40a1c87e8cea88 /samples/pdfium_test.cc
parent526f6d5279141b270898e7e07ded7b4ce021d0d6 (diff)
downloadpdfium-daa2e84dfca2f1cf39e064bd9ad6ee3e2cd70825.tar.xz
Add output scale factor command line parameter to pdfium_test.
It turns out that pdfium rendering takes some significantly different paths when the output bitmap size is the same as the document size, since it can avoid work in that case. For example, to reproduce the referenced bug, a scale factor less than 1.0 is required, so we add a parameter to let pdfium_test cover that case. BUG=451265 R=thestig@chromium.org Review URL: https://codereview.chromium.org/861203003
Diffstat (limited to 'samples/pdfium_test.cc')
-rw-r--r--samples/pdfium_test.cc24
1 files changed, 20 insertions, 4 deletions
diff --git a/samples/pdfium_test.cc b/samples/pdfium_test.cc
index 2ff8f5bbf1..f7911c36b9 100644
--- a/samples/pdfium_test.cc
+++ b/samples/pdfium_test.cc
@@ -9,6 +9,7 @@
#include <wchar.h>
#include <list>
+#include <sstream>
#include <string>
#include <utility>
#include <vector>
@@ -41,6 +42,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;
};
@@ -317,6 +319,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;
}
@@ -358,7 +367,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;
@@ -437,9 +446,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 ++;
@@ -448,7 +463,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);
@@ -489,6 +504,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");
@@ -526,7 +542,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);
}