OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <limits.h> | 5 #include <limits.h> |
6 #include <stdio.h> | 6 #include <stdio.h> |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 #include <string.h> | 8 #include <string.h> |
9 | 9 |
10 #include <list> | 10 #include <list> |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 std::string exe_path; | 47 std::string exe_path; |
48 std::string bin_directory; | 48 std::string bin_directory; |
49 std::string font_directory; | 49 std::string font_directory; |
50 }; | 50 }; |
51 | 51 |
52 // Reads the entire contents of a file into a newly malloc'd buffer. | 52 // Reads the entire contents of a file into a newly malloc'd buffer. |
53 static char* GetFileContents(const char* filename, size_t* retlen) { | 53 static char* GetFileContents(const char* filename, size_t* retlen) { |
54 FILE* file = fopen(filename, "rb"); | 54 FILE* file = fopen(filename, "rb"); |
55 if (!file) { | 55 if (!file) { |
56 fprintf(stderr, "Failed to open: %s\n", filename); | 56 fprintf(stderr, "Failed to open: %s\n", filename); |
57 return NULL; | 57 return nullptr; |
58 } | 58 } |
59 (void) fseek(file, 0, SEEK_END); | 59 (void)fseek(file, 0, SEEK_END); |
60 size_t file_length = ftell(file); | 60 size_t file_length = ftell(file); |
61 if (!file_length) { | 61 if (!file_length) { |
62 return NULL; | 62 (void)fclose(file); |
| 63 return nullptr; |
63 } | 64 } |
64 (void) fseek(file, 0, SEEK_SET); | 65 (void)fseek(file, 0, SEEK_SET); |
65 char* buffer = (char*) malloc(file_length); | 66 char* buffer = static_cast<char*>(malloc(file_length)); |
66 if (!buffer) { | 67 if (!buffer) { |
67 return NULL; | 68 (void)fclose(file); |
| 69 return nullptr; |
68 } | 70 } |
69 size_t bytes_read = fread(buffer, 1, file_length, file); | 71 size_t bytes_read = fread(buffer, 1, file_length, file); |
70 (void) fclose(file); | 72 (void)fclose(file); |
71 if (bytes_read != file_length) { | 73 if (bytes_read != file_length) { |
72 fprintf(stderr, "Failed to read: %s\n", filename); | 74 fprintf(stderr, "Failed to read: %s\n", filename); |
73 free(buffer); | 75 free(buffer); |
74 return NULL; | 76 return nullptr; |
75 } | 77 } |
76 *retlen = bytes_read; | 78 *retlen = bytes_read; |
77 return buffer; | 79 return buffer; |
78 } | 80 } |
79 | 81 |
80 #ifdef V8_USE_EXTERNAL_STARTUP_DATA | 82 #ifdef V8_USE_EXTERNAL_STARTUP_DATA |
81 // Returns the full path for an external V8 data file based on either | 83 // Returns the full path for an external V8 data file based on either |
82 // the currect exectuable path or an explicit override. | 84 // the currect exectuable path or an explicit override. |
83 static std::string GetFullPathForSnapshotFile(const Options& options, | 85 static std::string GetFullPathForSnapshotFile(const Options& options, |
84 const std::string& filename) { | 86 const std::string& filename) { |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 if (!fp) { | 189 if (!fp) { |
188 fprintf(stderr, "Failed to open %s for output\n", filename); | 190 fprintf(stderr, "Failed to open %s for output\n", filename); |
189 return; | 191 return; |
190 } | 192 } |
191 | 193 |
192 size_t bytes_written = fwrite( | 194 size_t bytes_written = fwrite( |
193 &png_encoding.front(), 1, png_encoding.size(), fp); | 195 &png_encoding.front(), 1, png_encoding.size(), fp); |
194 if (bytes_written != png_encoding.size()) | 196 if (bytes_written != png_encoding.size()) |
195 fprintf(stderr, "Failed to write to %s\n", filename); | 197 fprintf(stderr, "Failed to write to %s\n", filename); |
196 | 198 |
197 (void) fclose(fp); | 199 (void)fclose(fp); |
198 } | 200 } |
199 | 201 |
200 #ifdef _WIN32 | 202 #ifdef _WIN32 |
201 static void WriteBmp(const char* pdf_name, int num, const void* buffer, | 203 static void WriteBmp(const char* pdf_name, int num, const void* buffer, |
202 int stride, int width, int height) { | 204 int stride, int width, int height) { |
203 if (stride < 0 || width < 0 || height < 0) | 205 if (stride < 0 || width < 0 || height < 0) |
204 return; | 206 return; |
205 if (height > 0 && width > INT_MAX / height) | 207 if (height > 0 && width > INT_MAX / height) |
206 return; | 208 return; |
207 int out_len = stride * height; | 209 int out_len = stride * height; |
(...skipping 26 matching lines...) Expand all Loading... |
234 fclose(fp); | 236 fclose(fp); |
235 } | 237 } |
236 | 238 |
237 void WriteEmf(FPDF_PAGE page, const char* pdf_name, int num) { | 239 void WriteEmf(FPDF_PAGE page, const char* pdf_name, int num) { |
238 int width = static_cast<int>(FPDF_GetPageWidth(page)); | 240 int width = static_cast<int>(FPDF_GetPageWidth(page)); |
239 int height = static_cast<int>(FPDF_GetPageHeight(page)); | 241 int height = static_cast<int>(FPDF_GetPageHeight(page)); |
240 | 242 |
241 char filename[256]; | 243 char filename[256]; |
242 snprintf(filename, sizeof(filename), "%s.%d.emf", pdf_name, num); | 244 snprintf(filename, sizeof(filename), "%s.%d.emf", pdf_name, num); |
243 | 245 |
244 HDC dc = CreateEnhMetaFileA(NULL, filename, NULL, NULL); | 246 HDC dc = CreateEnhMetaFileA(nullptr, filename, nullptr, nullptr); |
245 | 247 |
246 HRGN rgn = CreateRectRgn(0, 0, width, height); | 248 HRGN rgn = CreateRectRgn(0, 0, width, height); |
247 SelectClipRgn(dc, rgn); | 249 SelectClipRgn(dc, rgn); |
248 DeleteObject(rgn); | 250 DeleteObject(rgn); |
249 | 251 |
250 SelectObject(dc, GetStockObject(NULL_PEN)); | 252 SelectObject(dc, GetStockObject(NULL_PEN)); |
251 SelectObject(dc, GetStockObject(WHITE_BRUSH)); | 253 SelectObject(dc, GetStockObject(WHITE_BRUSH)); |
252 // If a PS_NULL pen is used, the dimensions of the rectangle are 1 pixel less. | 254 // If a PS_NULL pen is used, the dimensions of the rectangle are 1 pixel less. |
253 Rectangle(dc, 0, 0, width + 1, height + 1); | 255 Rectangle(dc, 0, 0, width + 1, height + 1); |
254 | 256 |
255 FPDF_RenderPage(dc, page, 0, 0, width, height, 0, | 257 FPDF_RenderPage(dc, page, 0, 0, width, height, 0, |
256 FPDF_ANNOT | FPDF_PRINTING | FPDF_NO_CATCH); | 258 FPDF_ANNOT | FPDF_PRINTING | FPDF_NO_CATCH); |
257 | 259 |
258 DeleteEnhMetaFile(CloseEnhMetaFile(dc)); | 260 DeleteEnhMetaFile(CloseEnhMetaFile(dc)); |
259 } | 261 } |
260 #endif | 262 #endif |
261 | 263 |
262 int ExampleAppAlert(IPDF_JSPLATFORM*, FPDF_WIDESTRING msg, FPDF_WIDESTRING, | 264 int ExampleAppAlert(IPDF_JSPLATFORM*, FPDF_WIDESTRING msg, FPDF_WIDESTRING, |
263 int, int) { | 265 int, int) { |
264 // Deal with differences between UTF16LE and wchar_t on this platform. | 266 // Deal with differences between UTF16LE and wchar_t on this platform. |
265 size_t characters = 0; | 267 size_t characters = 0; |
266 while (msg[characters]) { | 268 while (msg[characters]) { |
267 ++characters; | 269 ++characters; |
268 } | 270 } |
269 wchar_t* platform_string = | 271 wchar_t* platform_string = |
270 (wchar_t*)malloc((characters + 1) * sizeof(wchar_t)); | 272 static_cast<wchar_t*>(malloc((characters + 1) * sizeof(wchar_t))); |
271 for (size_t i = 0; i < characters + 1; ++i) { | 273 for (size_t i = 0; i < characters + 1; ++i) { |
272 unsigned char* ptr = (unsigned char*)&msg[i]; | 274 unsigned char* ptr = (unsigned char*)&msg[i]; |
273 platform_string[i] = ptr[0] + 256 * ptr[1]; | 275 platform_string[i] = ptr[0] + 256 * ptr[1]; |
274 } | 276 } |
275 printf("Alert: %ls\n", platform_string); | 277 printf("Alert: %ls\n", platform_string); |
276 free(platform_string); | 278 free(platform_string); |
277 return 0; | 279 return 0; |
278 } | 280 } |
279 | 281 |
280 void ExampleDocGotoPage(IPDF_JSPLATFORM*, int pageNumber) { | 282 void ExampleDocGotoPage(IPDF_JSPLATFORM*, int pageNumber) { |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 TestLoader(const char* pBuf, size_t len); | 407 TestLoader(const char* pBuf, size_t len); |
406 | 408 |
407 const char* m_pBuf; | 409 const char* m_pBuf; |
408 size_t m_Len; | 410 size_t m_Len; |
409 }; | 411 }; |
410 | 412 |
411 TestLoader::TestLoader(const char* pBuf, size_t len) | 413 TestLoader::TestLoader(const char* pBuf, size_t len) |
412 : m_pBuf(pBuf), m_Len(len) { | 414 : m_pBuf(pBuf), m_Len(len) { |
413 } | 415 } |
414 | 416 |
415 int Get_Block(void* param, unsigned long pos, unsigned char* pBuf, | 417 int GetBlock(void* param, |
416 unsigned long size) { | 418 unsigned long pos, |
417 TestLoader* pLoader = (TestLoader*) param; | 419 unsigned char* pBuf, |
| 420 unsigned long size) { |
| 421 TestLoader* pLoader = static_cast<TestLoader*>(param); |
418 if (pos + size < pos || pos + size > pLoader->m_Len) return 0; | 422 if (pos + size < pos || pos + size > pLoader->m_Len) return 0; |
419 memcpy(pBuf, pLoader->m_pBuf + pos, size); | 423 memcpy(pBuf, pLoader->m_pBuf + pos, size); |
420 return 1; | 424 return 1; |
421 } | 425 } |
422 | 426 |
423 FPDF_BOOL Is_Data_Avail(FX_FILEAVAIL* pThis, size_t offset, size_t size) { | 427 FPDF_BOOL Is_Data_Avail(FX_FILEAVAIL* pThis, size_t offset, size_t size) { |
424 return true; | 428 return true; |
425 } | 429 } |
426 | 430 |
427 void Add_Segment(FX_DOWNLOADHINTS* pThis, size_t offset, size_t size) { | 431 void Add_Segment(FX_DOWNLOADHINTS* pThis, size_t offset, size_t size) { |
(...skipping 12 matching lines...) Expand all Loading... |
440 FPDF_FORMFILLINFO form_callbacks; | 444 FPDF_FORMFILLINFO form_callbacks; |
441 memset(&form_callbacks, '\0', sizeof(form_callbacks)); | 445 memset(&form_callbacks, '\0', sizeof(form_callbacks)); |
442 form_callbacks.version = 1; | 446 form_callbacks.version = 1; |
443 form_callbacks.m_pJsPlatform = &platform_callbacks; | 447 form_callbacks.m_pJsPlatform = &platform_callbacks; |
444 | 448 |
445 TestLoader loader(pBuf, len); | 449 TestLoader loader(pBuf, len); |
446 | 450 |
447 FPDF_FILEACCESS file_access; | 451 FPDF_FILEACCESS file_access; |
448 memset(&file_access, '\0', sizeof(file_access)); | 452 memset(&file_access, '\0', sizeof(file_access)); |
449 file_access.m_FileLen = static_cast<unsigned long>(len); | 453 file_access.m_FileLen = static_cast<unsigned long>(len); |
450 file_access.m_GetBlock = Get_Block; | 454 file_access.m_GetBlock = GetBlock; |
451 file_access.m_Param = &loader; | 455 file_access.m_Param = &loader; |
452 | 456 |
453 FX_FILEAVAIL file_avail; | 457 FX_FILEAVAIL file_avail; |
454 memset(&file_avail, '\0', sizeof(file_avail)); | 458 memset(&file_avail, '\0', sizeof(file_avail)); |
455 file_avail.version = 1; | 459 file_avail.version = 1; |
456 file_avail.IsDataAvail = Is_Data_Avail; | 460 file_avail.IsDataAvail = Is_Data_Avail; |
457 | 461 |
458 FX_DOWNLOADHINTS hints; | 462 FX_DOWNLOADHINTS hints; |
459 memset(&hints, '\0', sizeof(hints)); | 463 memset(&hints, '\0', sizeof(hints)); |
460 hints.version = 1; | 464 hints.version = 1; |
461 hints.AddSegment = Add_Segment; | 465 hints.AddSegment = Add_Segment; |
462 | 466 |
463 FPDF_DOCUMENT doc; | 467 FPDF_DOCUMENT doc; |
464 FPDF_AVAIL pdf_avail = FPDFAvail_Create(&file_avail, &file_access); | 468 FPDF_AVAIL pdf_avail = FPDFAvail_Create(&file_avail, &file_access); |
465 | 469 |
466 (void) FPDFAvail_IsDocAvail(pdf_avail, &hints); | 470 (void)FPDFAvail_IsDocAvail(pdf_avail, &hints); |
467 | 471 |
468 if (!FPDFAvail_IsLinearized(pdf_avail)) { | 472 if (!FPDFAvail_IsLinearized(pdf_avail)) { |
469 fprintf(stderr, "Non-linearized path...\n"); | 473 fprintf(stderr, "Non-linearized path...\n"); |
470 doc = FPDF_LoadCustomDocument(&file_access, NULL); | 474 doc = FPDF_LoadCustomDocument(&file_access, nullptr); |
471 } else { | 475 } else { |
472 fprintf(stderr, "Linearized path...\n"); | 476 fprintf(stderr, "Linearized path...\n"); |
473 doc = FPDFAvail_GetDocument(pdf_avail, NULL); | 477 doc = FPDFAvail_GetDocument(pdf_avail, nullptr); |
474 } | 478 } |
475 | 479 |
476 (void) FPDF_GetDocPermissions(doc); | 480 (void)FPDF_GetDocPermissions(doc); |
477 (void) FPDFAvail_IsFormAvail(pdf_avail, &hints); | 481 (void)FPDFAvail_IsFormAvail(pdf_avail, &hints); |
478 | 482 |
479 FPDF_FORMHANDLE form = FPDFDOC_InitFormFillEnvironment(doc, &form_callbacks); | 483 FPDF_FORMHANDLE form = FPDFDOC_InitFormFillEnvironment(doc, &form_callbacks); |
480 FPDF_SetFormFieldHighlightColor(form, 0, 0xFFE4DD); | 484 FPDF_SetFormFieldHighlightColor(form, 0, 0xFFE4DD); |
481 FPDF_SetFormFieldHighlightAlpha(form, 100); | 485 FPDF_SetFormFieldHighlightAlpha(form, 100); |
482 | 486 |
483 int first_page = FPDFAvail_GetFirstPageNum(doc); | 487 int first_page = FPDFAvail_GetFirstPageNum(doc); |
484 (void) FPDFAvail_IsPageAvail(pdf_avail, first_page, &hints); | 488 (void)FPDFAvail_IsPageAvail(pdf_avail, first_page, &hints); |
485 | 489 |
486 int page_count = FPDF_GetPageCount(doc); | 490 int page_count = FPDF_GetPageCount(doc); |
487 for (int i = 0; i < page_count; ++i) { | 491 for (int i = 0; i < page_count; ++i) { |
488 (void) FPDFAvail_IsPageAvail(pdf_avail, i, &hints); | 492 (void)FPDFAvail_IsPageAvail(pdf_avail, i, &hints); |
489 } | 493 } |
490 | 494 |
491 FORM_DoDocumentJSAction(form); | 495 FORM_DoDocumentJSAction(form); |
492 FORM_DoDocumentOpenAction(form); | 496 FORM_DoDocumentOpenAction(form); |
493 | 497 |
494 int rendered_pages = 0; | 498 int rendered_pages = 0; |
495 int bad_pages = 0; | 499 int bad_pages = 0; |
496 for (int i = 0; i < page_count; ++i) { | 500 for (int i = 0; i < page_count; ++i) { |
497 FPDF_PAGE page = FPDF_LoadPage(doc, i); | 501 FPDF_PAGE page = FPDF_LoadPage(doc, i); |
498 if (!page) { | 502 if (!page) { |
499 bad_pages ++; | 503 ++bad_pages; |
500 continue; | 504 continue; |
501 } | 505 } |
502 FPDF_TEXTPAGE text_page = FPDFText_LoadPage(page); | 506 FPDF_TEXTPAGE text_page = FPDFText_LoadPage(page); |
503 FORM_OnAfterLoadPage(page, form); | 507 FORM_OnAfterLoadPage(page, form); |
504 FORM_DoPageAAction(page, form, FPDFPAGE_AACTION_OPEN); | 508 FORM_DoPageAAction(page, form, FPDFPAGE_AACTION_OPEN); |
505 | 509 |
506 double scale = 1.0; | 510 double scale = 1.0; |
507 if (!options.scale_factor_as_string.empty()) { | 511 if (!options.scale_factor_as_string.empty()) { |
508 std::stringstream(options.scale_factor_as_string) >> scale; | 512 std::stringstream(options.scale_factor_as_string) >> scale; |
509 } | 513 } |
510 int width = static_cast<int>(FPDF_GetPageWidth(page) * scale); | 514 int width = static_cast<int>(FPDF_GetPageWidth(page) * scale); |
511 int height = static_cast<int>(FPDF_GetPageHeight(page) * scale); | 515 int height = static_cast<int>(FPDF_GetPageHeight(page) * scale); |
512 | 516 |
513 FPDF_BITMAP bitmap = FPDFBitmap_Create(width, height, 0); | 517 FPDF_BITMAP bitmap = FPDFBitmap_Create(width, height, 0); |
514 if (!bitmap) { | 518 if (!bitmap) { |
515 fprintf(stderr, "Page was too large to be rendered.\n"); | 519 fprintf(stderr, "Page was too large to be rendered.\n"); |
516 bad_pages++; | 520 bad_pages++; |
517 continue; | 521 continue; |
518 } | 522 } |
519 | 523 |
520 FPDFBitmap_FillRect(bitmap, 0, 0, width, height, 0xFFFFFFFF); | 524 FPDFBitmap_FillRect(bitmap, 0, 0, width, height, 0xFFFFFFFF); |
521 FPDF_RenderPageBitmap(bitmap, page, 0, 0, width, height, 0, 0); | 525 FPDF_RenderPageBitmap(bitmap, page, 0, 0, width, height, 0, 0); |
522 rendered_pages ++; | 526 ++rendered_pages; |
523 | 527 |
524 FPDF_FFLDraw(form, bitmap, page, 0, 0, width, height, 0, 0); | 528 FPDF_FFLDraw(form, bitmap, page, 0, 0, width, height, 0, 0); |
525 int stride = FPDFBitmap_GetStride(bitmap); | 529 int stride = FPDFBitmap_GetStride(bitmap); |
526 const char* buffer = | 530 const char* buffer = |
527 reinterpret_cast<const char*>(FPDFBitmap_GetBuffer(bitmap)); | 531 reinterpret_cast<const char*>(FPDFBitmap_GetBuffer(bitmap)); |
528 | 532 |
529 switch (options.output_format) { | 533 switch (options.output_format) { |
530 #ifdef _WIN32 | 534 #ifdef _WIN32 |
531 case OUTPUT_BMP: | 535 case OUTPUT_BMP: |
532 WriteBmp(name.c_str(), i, buffer, stride, width, height); | 536 WriteBmp(name.c_str(), i, buffer, stride, width, height); |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
636 RenderPdf(filename, file_contents, file_length, options); | 640 RenderPdf(filename, file_contents, file_length, options); |
637 free(file_contents); | 641 free(file_contents); |
638 } | 642 } |
639 | 643 |
640 FPDF_DestroyLibrary(); | 644 FPDF_DestroyLibrary(); |
641 v8::V8::ShutdownPlatform(); | 645 v8::V8::ShutdownPlatform(); |
642 delete platform; | 646 delete platform; |
643 | 647 |
644 return 0; | 648 return 0; |
645 } | 649 } |
OLD | NEW |