| OLD | NEW |
| 1 #include "SkCanvas.h" | 1 #include "SkCanvas.h" |
| 2 #include "SkCommandLineFlags.h" | 2 #include "SkCommandLineFlags.h" |
| 3 #include "SkDevice.h" | 3 #include "SkDevice.h" |
| 4 #include "SkGraphics.h" | 4 #include "SkGraphics.h" |
| 5 #include "SkImageDecoder.h" | 5 #include "SkImageDecoder.h" |
| 6 #include "SkImageEncoder.h" | 6 #include "SkImageEncoder.h" |
| 7 #include "SkOSFile.h" | 7 #include "SkOSFile.h" |
| 8 #include "SkPicture.h" | 8 #include "SkPicture.h" |
| 9 #include "SkStream.h" | 9 #include "SkStream.h" |
| 10 #include "SkTypeface.h" | 10 #include "SkTypeface.h" |
| 11 #include "SkTArray.h" | 11 #include "SkTArray.h" |
| 12 #include "picture_utils.h" | |
| 13 #include "SkNulCanvas.h" | 12 #include "SkNulCanvas.h" |
| 14 | 13 |
| 15 #include "SkPdfRenderer.h" | 14 #include "SkPdfRenderer.h" |
| 16 | 15 |
| 17 DEFINE_string2(readPath, r, "", "pdf files or directories of pdf files to proces
s."); | 16 DEFINE_string2(readPath, r, "", "pdf files or directories of pdf files to proces
s."); |
| 18 DEFINE_string2(writePath, w, "", "Directory to write the rendered pages."); | 17 DEFINE_string2(writePath, w, "", "Directory to write the rendered pages."); |
| 19 DEFINE_bool2(noExtensionForOnePagePdf, n, false, "No page extension if only one
page."); | 18 DEFINE_bool2(noExtensionForOnePagePdf, n, false, "No page extension if only one
page."); |
| 20 DEFINE_bool2(showMemoryUsage, m, false, "Show Memory usage."); | 19 DEFINE_bool2(showMemoryUsage, m, false, "Show Memory usage."); |
| 21 DEFINE_string2(pages, p, "all", "What pages to render and how:\n" | 20 DEFINE_string2(pages, p, "all", "What pages to render and how:\n" |
| 22 "\tall - all pages\n" | 21 "\tall - all pages\n" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 } | 66 } |
| 68 if (page >= 0) { | 67 if (page >= 0) { |
| 69 path->appendf("%i.", page); | 68 path->appendf("%i.", page); |
| 70 } | 69 } |
| 71 path->append(new_extension); | 70 path->append(new_extension); |
| 72 return true; | 71 return true; |
| 73 } | 72 } |
| 74 return false; | 73 return false; |
| 75 } | 74 } |
| 76 | 75 |
| 76 void make_filepath(SkString* path, const SkString& dir, const SkString& name) { |
| 77 size_t len = dir.size(); |
| 78 path->set(dir); |
| 79 if (0 < len && '/' != dir[len - 1]) { |
| 80 path->append("/"); |
| 81 } |
| 82 path->append(name); |
| 83 } |
| 84 |
| 85 bool is_path_seperator(const char chr) { |
| 86 #if defined(SK_BUILD_FOR_WIN) |
| 87 return chr == '\\' || chr == '/'; |
| 88 #else |
| 89 return chr == '/'; |
| 90 #endif |
| 91 } |
| 92 |
| 93 void get_basename(SkString* basename, const SkString& path) { |
| 94 if (path.size() == 0) { |
| 95 basename->reset(); |
| 96 return; |
| 97 } |
| 98 |
| 99 size_t end = path.size() - 1; |
| 100 |
| 101 // Paths pointing to directories often have a trailing slash, |
| 102 // we remove it so the name is not empty |
| 103 if (is_path_seperator(path[end])) { |
| 104 if (end == 0) { |
| 105 basename->reset(); |
| 106 return; |
| 107 } |
| 108 |
| 109 end -= 1; |
| 110 } |
| 111 |
| 112 size_t i = end; |
| 113 do { |
| 114 --i; |
| 115 if (is_path_seperator(path[i])) { |
| 116 const char* basenameStart = path.c_str() + i + 1; |
| 117 size_t basenameLength = end - i; |
| 118 basename->set(basenameStart, basenameLength); |
| 119 return; |
| 120 } |
| 121 } while (i > 0); |
| 122 |
| 123 basename->set(path.c_str(), end + 1); |
| 124 } |
| 125 |
| 77 /** Builds the output filename. path = dir/name, and it replaces expected | 126 /** Builds the output filename. path = dir/name, and it replaces expected |
| 78 * .skp extension with .pdf extention. | 127 * .skp extension with .pdf extention. |
| 79 * @param path Output filename. | 128 * @param path Output filename. |
| 80 * @param name The name of the file. | 129 * @param name The name of the file. |
| 81 * @returns false if the file did not has the expected extension. | 130 * @returns false if the file did not has the expected extension. |
| 82 * if false is returned, contents of path are undefined. | 131 * if false is returned, contents of path are undefined. |
| 83 */ | 132 */ |
| 84 | |
| 85 | |
| 86 static bool make_output_filepath(SkString* path, const SkString& dir, | 133 static bool make_output_filepath(SkString* path, const SkString& dir, |
| 87 const SkString& name, | 134 const SkString& name, |
| 88 int page) { | 135 int page) { |
| 89 sk_tools::make_filepath(path, dir, name); | 136 make_filepath(path, dir, name); |
| 90 return add_page_and_replace_filename_extension(path, page, | 137 return add_page_and_replace_filename_extension(path, page, |
| 91 PDF_FILE_EXTENSION, | 138 PDF_FILE_EXTENSION, |
| 92 PNG_FILE_EXTENSION); | 139 PNG_FILE_EXTENSION); |
| 93 } | 140 } |
| 94 | 141 |
| 95 static void setup_bitmap(SkBitmap* bitmap, int width, int height, SkColor color
= SK_ColorWHITE) { | 142 static void setup_bitmap(SkBitmap* bitmap, int width, int height, SkColor color
= SK_ColorWHITE) { |
| 96 bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height); | 143 bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height); |
| 97 | 144 |
| 98 bitmap->allocPixels(); | 145 bitmap->allocPixels(); |
| 99 bitmap->eraseColor(color); | 146 bitmap->eraseColor(color); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 /** Reads an skp file, renders it to pdf and writes the output to a pdf file | 207 /** Reads an skp file, renders it to pdf and writes the output to a pdf file |
| 161 * @param inputPath The skp file to be read. | 208 * @param inputPath The skp file to be read. |
| 162 * @param outputDir Output dir. | 209 * @param outputDir Output dir. |
| 163 * @param renderer The object responsible to render the skp object into pdf. | 210 * @param renderer The object responsible to render the skp object into pdf. |
| 164 */ | 211 */ |
| 165 static bool process_pdf(const SkString& inputPath, const SkString& outputDir, | 212 static bool process_pdf(const SkString& inputPath, const SkString& outputDir, |
| 166 SkPdfRenderer& renderer) { | 213 SkPdfRenderer& renderer) { |
| 167 SkDebugf("Loading PDF: %s\n", inputPath.c_str()); | 214 SkDebugf("Loading PDF: %s\n", inputPath.c_str()); |
| 168 | 215 |
| 169 SkString inputFilename; | 216 SkString inputFilename; |
| 170 sk_tools::get_basename(&inputFilename, inputPath); | 217 get_basename(&inputFilename, inputPath); |
| 171 | 218 |
| 172 SkFILEStream inputStream; | 219 SkFILEStream inputStream; |
| 173 inputStream.setPath(inputPath.c_str()); | 220 inputStream.setPath(inputPath.c_str()); |
| 174 if (!inputStream.isValid()) { | 221 if (!inputStream.isValid()) { |
| 175 SkDebugf("Could not open file %s\n", inputPath.c_str()); | 222 SkDebugf("Could not open file %s\n", inputPath.c_str()); |
| 176 return false; | 223 return false; |
| 177 } | 224 } |
| 178 | 225 |
| 179 bool success = false; | 226 bool success = false; |
| 180 | 227 |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 static int process_input(const char* input, const SkString& outputDir, | 281 static int process_input(const char* input, const SkString& outputDir, |
| 235 SkPdfRenderer& renderer) { | 282 SkPdfRenderer& renderer) { |
| 236 int failures = 0; | 283 int failures = 0; |
| 237 if (sk_isdir(input)) { | 284 if (sk_isdir(input)) { |
| 238 SkOSFile::Iter iter(input, PDF_FILE_EXTENSION); | 285 SkOSFile::Iter iter(input, PDF_FILE_EXTENSION); |
| 239 SkString inputFilename; | 286 SkString inputFilename; |
| 240 while (iter.next(&inputFilename)) { | 287 while (iter.next(&inputFilename)) { |
| 241 SkString inputPath; | 288 SkString inputPath; |
| 242 SkString _input; | 289 SkString _input; |
| 243 _input.append(input); | 290 _input.append(input); |
| 244 sk_tools::make_filepath(&inputPath, _input, inputFilename); | 291 make_filepath(&inputPath, _input, inputFilename); |
| 245 if (!process_pdf(inputPath, outputDir, renderer)) { | 292 if (!process_pdf(inputPath, outputDir, renderer)) { |
| 246 ++failures; | 293 ++failures; |
| 247 } | 294 } |
| 248 } | 295 } |
| 249 } else { | 296 } else { |
| 250 SkString inputPath(input); | 297 SkString inputPath(input); |
| 251 if (!process_pdf(inputPath, outputDir, renderer)) { | 298 if (!process_pdf(inputPath, outputDir, renderer)) { |
| 252 ++failures; | 299 ++failures; |
| 253 } | 300 } |
| 254 } | 301 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 } | 333 } |
| 287 | 334 |
| 288 return 0; | 335 return 0; |
| 289 } | 336 } |
| 290 | 337 |
| 291 #if !defined SK_BUILD_FOR_IOS | 338 #if !defined SK_BUILD_FOR_IOS |
| 292 int main(int argc, char * const argv[]) { | 339 int main(int argc, char * const argv[]) { |
| 293 return tool_main(argc, (char**) argv); | 340 return tool_main(argc, (char**) argv); |
| 294 } | 341 } |
| 295 #endif | 342 #endif |
| OLD | NEW |