Index: chrome/utility/chrome_content_utility_client.cc |
diff --git a/chrome/utility/chrome_content_utility_client.cc b/chrome/utility/chrome_content_utility_client.cc |
index 1ca9c94f4627ae2a1d24b09ca4ea12bcb5ef532c..552edc5e3360b0f57b97f213b9a1a0118e72d4d1 100644 |
--- a/chrome/utility/chrome_content_utility_client.cc |
+++ b/chrome/utility/chrome_content_utility_client.cc |
@@ -170,7 +170,7 @@ class PdfFunctionsBase { |
const base::FilePath& pdf_module_path, |
const base::ScopedNativeLibrary& pdf_lib) { |
return true; |
- }; |
+ } |
private: |
// Exported by PDF plugin. |
@@ -363,7 +363,7 @@ bool ChromeContentUtilityClient::OnMessageReceived( |
OnParseUpdateManifest) |
IPC_MESSAGE_HANDLER(ChromeUtilityMsg_DecodeImage, OnDecodeImage) |
IPC_MESSAGE_HANDLER(ChromeUtilityMsg_DecodeImageBase64, OnDecodeImageBase64) |
- IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RenderPDFPagesToMetafile, |
+ IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RenderPDFPagesToMetafiles, |
OnRenderPDFPagesToMetafile) |
IPC_MESSAGE_HANDLER(ChromeUtilityMsg_RenderPDFPagesToPWGRaster, |
OnRenderPDFPagesToPWGRaster) |
@@ -565,23 +565,26 @@ void ChromeContentUtilityClient::OnCreateZipFile( |
#endif // defined(OS_CHROMEOS) |
void ChromeContentUtilityClient::OnRenderPDFPagesToMetafile( |
- base::PlatformFile pdf_file, |
+ IPC::PlatformFileForTransit pdf_transit, |
const base::FilePath& metafile_path, |
const printing::PdfRenderSettings& settings, |
- const std::vector<printing::PageRange>& page_ranges) { |
+ const std::vector<printing::PageRange>& page_ranges_const) { |
bool succeeded = false; |
#if defined(OS_WIN) |
+ base::PlatformFile pdf_file = |
+ IPC::PlatformFileForTransitToPlatformFile(pdf_transit); |
int highest_rendered_page_number = 0; |
double scale_factor = 1.0; |
+ std::vector<printing::PageRange> page_ranges = page_ranges_const; |
succeeded = RenderPDFToWinMetafile(pdf_file, |
metafile_path, |
settings, |
- page_ranges, |
+ &page_ranges, |
&highest_rendered_page_number, |
&scale_factor); |
if (succeeded) { |
- Send(new ChromeUtilityHostMsg_RenderPDFPagesToMetafile_Succeeded( |
- highest_rendered_page_number, scale_factor)); |
+ Send(new ChromeUtilityHostMsg_RenderPDFPagesToMetafiles_Succeeded( |
Vitaly Buka (NO REVIEWS)
2014/05/15 19:23:34
So how about sending ChromeUtilityHostMsg_RenderPD
scottmg
2014/05/15 19:43:04
That should help for PdfToEmfConverter I think. It
|
+ page_ranges, scale_factor)); |
} |
#endif // defined(OS_WIN) |
if (!succeeded) { |
@@ -612,11 +615,12 @@ bool ChromeContentUtilityClient::RenderPDFToWinMetafile( |
base::PlatformFile pdf_file, |
const base::FilePath& metafile_path, |
const printing::PdfRenderSettings& settings, |
- const std::vector<printing::PageRange>& page_ranges, |
+ std::vector<printing::PageRange>* page_ranges, |
int* highest_rendered_page_number, |
double* scale_factor) { |
*highest_rendered_page_number = -1; |
*scale_factor = 1.0; |
+ CHECK(page_ranges); |
base::win::ScopedHandle file(pdf_file); |
if (!g_pdf_lib.Get().IsValid()) |
@@ -643,26 +647,37 @@ bool ChromeContentUtilityClient::RenderPDFToWinMetafile( |
return false; |
} |
- printing::Emf metafile; |
- metafile.InitToFile(metafile_path); |
- // We need to scale down DC to fit an entire page into DC available area. |
- // Current metafile is based on screen DC and have current screen size. |
- // Writing outside of those boundaries will result in the cut-off output. |
- // On metafiles (this is the case here), scaling down will still record |
- // original coordinates and we'll be able to print in full resolution. |
- // Before playback we'll need to counter the scaling up that will happen |
- // in the service (print_system_win.cc). |
- *scale_factor = gfx::CalculatePageScale(metafile.context(), |
- settings.area().right(), |
- settings.area().bottom()); |
- gfx::ScaleDC(metafile.context(), *scale_factor); |
+ // If no range supplied, do all pages. |
+ if (page_ranges->empty()) { |
+ printing::PageRange page_range_all; |
+ page_range_all.from = 0; |
+ page_range_all.to = total_page_count - 1; |
+ page_ranges->push_back(page_range_all); |
+ } |
bool ret = false; |
std::vector<printing::PageRange>::const_iterator iter; |
- for (iter = page_ranges.begin(); iter != page_ranges.end(); ++iter) { |
+ for (iter = page_ranges->begin(); iter != page_ranges->end(); ++iter) { |
for (int page_number = iter->from; page_number <= iter->to; ++page_number) { |
if (page_number >= total_page_count) |
break; |
+ |
+ printing::Emf metafile; |
+ metafile.InitToFile(metafile_path.InsertBeforeExtensionASCII( |
+ base::StringPrintf(".%d", page_number))); |
+ |
+ // We need to scale down DC to fit an entire page into DC available area. |
+ // Current metafile is based on screen DC and have current screen size. |
+ // Writing outside of those boundaries will result in the cut-off output. |
+ // On metafiles (this is the case here), scaling down will still record |
+ // original coordinates and we'll be able to print in full resolution. |
+ // Before playback we'll need to counter the scaling up that will happen |
+ // in the service (print_system_win.cc). |
+ *scale_factor = gfx::CalculatePageScale(metafile.context(), |
+ settings.area().right(), |
+ settings.area().bottom()); |
+ gfx::ScaleDC(metafile.context(), *scale_factor); |
+ |
// The underlying metafile is of type Emf and ignores the arguments passed |
// to StartPage. |
metafile.StartPage(gfx::Size(), gfx::Rect(), 1); |
@@ -677,9 +692,9 @@ bool ChromeContentUtilityClient::RenderPDFToWinMetafile( |
ret = true; |
} |
metafile.FinishPage(); |
+ metafile.FinishDocument(); |
} |
} |
- metafile.FinishDocument(); |
return ret; |
} |
#endif // defined(OS_WIN) |