Index: experimental/PdfViewer/pdf_viewer_main.cpp |
=================================================================== |
--- experimental/PdfViewer/pdf_viewer_main.cpp (revision 9985) |
+++ experimental/PdfViewer/pdf_viewer_main.cpp (working copy) |
@@ -1,6 +1,6 @@ |
#include "SkCanvas.h" |
+#include "SkCommandLineFlags.h" |
#include "SkDevice.h" |
-#include "SkForceLinking.h" |
#include "SkGraphics.h" |
#include "SkImageDecoder.h" |
#include "SkImageEncoder.h" |
@@ -13,6 +13,11 @@ |
#include "SkPdfRenderer.h" |
+DEFINE_string2(readPath, r, "", "pdf files or directories of pdf files to process."); |
+DEFINE_string2(writePath, w, "", "Directory to write the rendered pages."); |
+DEFINE_bool2(noExtensionForOnePagePdf, n, false, "No page extension if only one page."); |
+DEFINE_bool2(showMemoryUsage, m, false, "Show Memory usage."); |
+ |
/** |
* Given list of directories and files to use as input, expects to find .pdf |
* files and it will convert them to .png files writing them in the same directory |
@@ -25,24 +30,6 @@ |
static const char PDF_FILE_EXTENSION[] = "pdf"; |
static const char PNG_FILE_EXTENSION[] = "png"; |
-// TODO(edisonn): add ability to write to a new directory. |
-static void usage(const char* argv0) { |
- SkDebugf("PDF to PNG rendering tool\n"); |
- SkDebugf("\n" |
-"Usage: \n" |
-" %s <input>... [-w <outputDir>] [-n | --no-page-ext] \n" |
-, argv0); |
- SkDebugf("\n\n"); |
- SkDebugf( |
-" input: A list of directories and files to use as input. Files are\n" |
-" expected to have the .skp extension.\n\n"); |
- SkDebugf( |
-" outputDir: directory to write the rendered pdfs.\n\n"); |
- SkDebugf( |
-" -n: no page extension if only one page.\n\n"); |
- SkDebugf("\n"); |
-} |
- |
/** Replaces the extension of a file. |
* @param path File name whose extension will be changed. |
* @param old_extension The old extension. |
@@ -144,7 +131,7 @@ |
* @param renderer The object responsible to render the skp object into pdf. |
*/ |
static bool process_pdf(const SkString& inputPath, const SkString& outputDir, |
- SkPdfRenderer& renderer, bool noPageExt) { |
+ SkPdfRenderer& renderer, bool noPageExt, bool showMemoryUsage) { |
SkDebugf("Loading PDF: %s\n", inputPath.c_str()); |
SkString inputFilename; |
@@ -162,6 +149,9 @@ |
success = renderer.load(inputPath); |
if (success) { |
+ if (showMemoryUsage) { |
+ SkDebugf("Memory usage after load: %u\n", (unsigned int)renderer.bytesUsed()); |
+ } |
if (!renderer.pages()) |
{ |
SkDebugf("ERROR: Empty PDF Document %s\n", inputPath.c_str()); |
@@ -169,6 +159,7 @@ |
} else { |
for (int pn = 0; pn < renderer.pages(); ++pn) { |
success = render_page(outputDir, inputFilename, renderer, noPageExt && renderer.pages() == 1 ? -1 : pn) && success; |
+ SkDebugf("Memory usage after page %i rendered: %u\n", pn, (unsigned int)renderer.bytesUsed()); |
} |
} |
} |
@@ -182,73 +173,52 @@ |
* @param outputDir Output dir. |
* @param renderer The object responsible to render the skp object into pdf. |
*/ |
-static int process_input(const SkString& input, const SkString& outputDir, |
- SkPdfRenderer& renderer, bool noPageExt) { |
+static int process_input(const char* input, const SkString& outputDir, |
+ SkPdfRenderer& renderer, bool noPageExt, bool showMemoryUsage) { |
int failures = 0; |
- if (sk_isdir(input.c_str())) { |
- SkOSFile::Iter iter(input.c_str(), PDF_FILE_EXTENSION); |
+ if (sk_isdir(input)) { |
+ SkOSFile::Iter iter(input, PDF_FILE_EXTENSION); |
SkString inputFilename; |
while (iter.next(&inputFilename)) { |
SkString inputPath; |
- sk_tools::make_filepath(&inputPath, input, inputFilename); |
- if (!process_pdf(inputPath, outputDir, renderer, noPageExt)) { |
+ SkString _input; |
+ _input.append(input); |
+ sk_tools::make_filepath(&inputPath, _input, inputFilename); |
+ if (!process_pdf(inputPath, outputDir, renderer, noPageExt, showMemoryUsage)) { |
++failures; |
} |
} |
} else { |
SkString inputPath(input); |
- if (!process_pdf(inputPath, outputDir, renderer, noPageExt)) { |
+ if (!process_pdf(inputPath, outputDir, renderer, noPageExt, showMemoryUsage)) { |
++failures; |
} |
} |
return failures; |
} |
-static void parse_commandline(int argc, char* const argv[], |
- SkTArray<SkString>* inputs, |
- SkString* outputDir, bool* noPageExt) { |
- const char* argv0 = argv[0]; |
- char* const* stop = argv + argc; |
+int tool_main(int argc, char** argv); |
+int tool_main(int argc, char** argv) { |
+ SkCommandLineFlags::SetUsage("Parse and Render .pdf files (pdf viewer)."); |
+ SkCommandLineFlags::Parse(argc, argv); |
- for (++argv; argv < stop; ++argv) { |
- if ((0 == strcmp(*argv, "-h")) || (0 == strcmp(*argv, "--help"))) { |
- usage(argv0); |
- exit(-1); |
- } else if ((0 == strcmp(*argv, "-n")) || (0 == strcmp(*argv, "--no-page-ext"))) { |
- *noPageExt = true; |
- } else if (0 == strcmp(*argv, "-w")) { |
- ++argv; |
- if (argv >= stop) { |
- SkDebugf("Missing outputDir for -w\n"); |
- usage(argv0); |
- exit(-1); |
- } |
- *outputDir = SkString(*argv); |
- } else { |
- inputs->push_back(SkString(*argv)); |
- } |
- } |
- |
- if (inputs->count() < 1) { |
- usage(argv0); |
+ if (FLAGS_readPath.isEmpty()) { |
+ SkDebugf(".pdf files or directories are required.\n"); |
exit(-1); |
} |
-} |
-int tool_main(int argc, char** argv); |
-int tool_main(int argc, char** argv) { |
- SkAutoGraphics ag; |
- SkTArray<SkString> inputs; |
- |
SkPdfRenderer renderer; |
SkString outputDir; |
- bool noPageExt = false; |
- parse_commandline(argc, argv, &inputs, &outputDir, &noPageExt); |
+ if (FLAGS_writePath.count() == 1) { |
+ outputDir.set(FLAGS_writePath[0]); |
+ } |
int failures = 0; |
- for (int i = 0; i < inputs.count(); i ++) { |
- failures += process_input(inputs[i], outputDir, renderer, noPageExt); |
+ for (int i = 0; i < FLAGS_readPath.count(); i ++) { |
+ failures += process_input(FLAGS_readPath[i], outputDir, renderer, |
+ FLAGS_noExtensionForOnePagePdf, |
+ FLAGS_showMemoryUsage); |
renderer.unload(); |
} |