From 4fa566b34ac19d1b8bbddd75d284c9db6eefab5b Mon Sep 17 00:00:00 2001 From: "edisonn@google.com" Date: Fri, 11 Jan 2013 20:30:41 +0000 Subject: [PATCH] Add option to render PDFs to memory only. Review URL: https://codereview.appspot.com/7097045 git-svn-id: http://skia.googlecode.com/svn/trunk@7140 2bbb7eff-a529-9590-31e7-b0007b416f81 --- tools/PdfRenderer.cpp | 9 ++------- tools/PdfRenderer.h | 2 +- tools/render_pdfs_main.cpp | 37 ++++++++++++++++++++++++++++--------- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/tools/PdfRenderer.cpp b/tools/PdfRenderer.cpp index 8819266a9f..9a4bd38be6 100644 --- a/tools/PdfRenderer.cpp +++ b/tools/PdfRenderer.cpp @@ -48,15 +48,10 @@ void PdfRenderer::end() { } } -bool PdfRenderer::write(const SkString& path) const { +void PdfRenderer::write(SkWStream* stream) const { SkPDFDocument doc; doc.appendPage(fPDFDevice); - SkFILEWStream stream(path.c_str()); - if (stream.isValid()) { - doc.emitPDF(&stream); - return true; - } - return false; + doc.emitPDF(stream); } void SimplePdfRenderer::render() { diff --git a/tools/PdfRenderer.h b/tools/PdfRenderer.h index bce6197bb5..3524a9d8f9 100644 --- a/tools/PdfRenderer.h +++ b/tools/PdfRenderer.h @@ -39,7 +39,7 @@ public: , fPDFDevice(NULL) {} - bool write(const SkString& path) const; + void write(SkWStream* stream) const; protected: SkCanvas* setupCanvas(); diff --git a/tools/render_pdfs_main.cpp b/tools/render_pdfs_main.cpp index 6e6a6e81ee..80ec7fbc3a 100644 --- a/tools/render_pdfs_main.cpp +++ b/tools/render_pdfs_main.cpp @@ -33,7 +33,7 @@ static void usage(const char* argv0) { SkDebugf("SKP to PDF rendering tool\n"); SkDebugf("\n" "Usage: \n" -" %s ... \n" +" %s ... -w \n" , argv0); SkDebugf("\n\n"); SkDebugf( @@ -89,15 +89,25 @@ static bool make_output_filepath(SkString* path, const SkString& dir, static bool write_output(const SkString& outputDir, const SkString& inputFilename, const sk_tools::PdfRenderer& renderer) { + if (outputDir.isEmpty()) { + SkDynamicMemoryWStream stream; + renderer.write(&stream); + return true; + } + SkString outputPath; if (!make_output_filepath(&outputPath, outputDir, inputFilename)) { return false; } - bool isWritten = renderer.write(outputPath); - if (!isWritten) { + + SkFILEWStream stream(outputPath.c_str()); + if (!stream.isValid()) { SkDebugf("Could not write to file %s\n", outputPath.c_str()); + return false; } - return isWritten; + renderer.write(&stream); + + return true; } /** Reads an skp file, renders it to pdf and writes the output to a pdf file @@ -168,7 +178,8 @@ static int process_input(const SkString& input, const SkString& outputDir, } static void parse_commandline(int argc, char* const argv[], - SkTArray* inputs) { + SkTArray* inputs, + SkString* outputDir) { const char* argv0 = argv[0]; char* const* stop = argv + argc; @@ -176,12 +187,20 @@ static void parse_commandline(int argc, char* const argv[], if ((0 == strcmp(*argv, "-h")) || (0 == strcmp(*argv, "--help"))) { usage(argv0); exit(-1); + } 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() < 2) { + if (inputs->count() < 1) { usage(argv0); exit(-1); } @@ -197,11 +216,11 @@ int tool_main(int argc, char** argv) { renderer(SkNEW(sk_tools::SimplePdfRenderer)); SkASSERT(renderer.get()); - parse_commandline(argc, argv, &inputs); - SkString outputDir = inputs[inputs.count() - 1]; + SkString outputDir; + parse_commandline(argc, argv, &inputs, &outputDir); int failures = 0; - for (int i = 0; i < inputs.count() - 1; i ++) { + for (int i = 0; i < inputs.count(); i ++) { failures += process_input(inputs[i], outputDir, *renderer); }