aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar edisonn@google.com <edisonn@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-01-11 20:30:41 +0000
committerGravatar edisonn@google.com <edisonn@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-01-11 20:30:41 +0000
commit4fa566b34ac19d1b8bbddd75d284c9db6eefab5b (patch)
tree0695de6ba07bcfa13d0134f79e344e3b4614c884 /tools
parentc18143e89b8ef91cb0a3f64cb490ea765da3549f (diff)
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
Diffstat (limited to 'tools')
-rw-r--r--tools/PdfRenderer.cpp9
-rw-r--r--tools/PdfRenderer.h2
-rw-r--r--tools/render_pdfs_main.cpp37
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 <input>... <outputDir> \n"
+" %s <input>... -w <outputDir> \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<SkString>* inputs) {
+ SkTArray<SkString>* 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);
}