mirror of
https://github.com/electron/electron.git
synced 2026-04-10 03:01:51 -04:00
Fix printing selected pages on Windows
This commit is contained in:
@@ -270,6 +270,10 @@ class PrintJob::PdfToEmfState {
|
||||
std::unique_ptr<PdfToEmfConverter> converter_;
|
||||
};
|
||||
|
||||
void PrintJob::AppendPrintedPage(int page_number) {
|
||||
pdf_page_mapping_.push_back(page_number);
|
||||
}
|
||||
|
||||
void PrintJob::StartPdfToEmfConversion(
|
||||
const scoped_refptr<base::RefCountedMemory>& bytes,
|
||||
const gfx::Size& page_size,
|
||||
@@ -298,14 +302,15 @@ void PrintJob::OnPdfToEmfPageConverted(int page_number,
|
||||
float scale_factor,
|
||||
std::unique_ptr<MetafilePlayer> emf) {
|
||||
DCHECK(ptd_to_emf_state_);
|
||||
if (!document_.get() || !emf) {
|
||||
if (!document_.get() || !emf || page_number < 0 ||
|
||||
static_cast<size_t>(page_number) >= pdf_page_mapping_.size()) {
|
||||
ptd_to_emf_state_.reset();
|
||||
Cancel();
|
||||
return;
|
||||
}
|
||||
|
||||
// Update the rendered document. It will send notifications to the listener.
|
||||
document_->SetPage(page_number,
|
||||
document_->SetPage(pdf_page_mapping_[page_number],
|
||||
std::move(emf),
|
||||
scale_factor,
|
||||
ptd_to_emf_state_->page_size(),
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#define CHROME_BROWSER_PRINTING_PRINT_JOB_H_
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include "base/memory/weak_ptr.h"
|
||||
#include "base/message_loop/message_loop.h"
|
||||
@@ -91,6 +92,9 @@ class PrintJob : public PrintJobWorkerOwner,
|
||||
PrintedDocument* document() const;
|
||||
|
||||
#if defined(OS_WIN)
|
||||
// Let the PrintJob know the 0-based |page_number| of a given printed page.
|
||||
void AppendPrintedPage(int page_number);
|
||||
|
||||
void StartPdfToEmfConversion(
|
||||
const scoped_refptr<base::RefCountedMemory>& bytes,
|
||||
const gfx::Size& page_size,
|
||||
@@ -153,6 +157,7 @@ class PrintJob : public PrintJobWorkerOwner,
|
||||
#if defined(OS_WIN)
|
||||
class PdfToEmfState;
|
||||
std::unique_ptr<PdfToEmfState> ptd_to_emf_state_;
|
||||
std::vector<int> pdf_page_mapping_;
|
||||
#endif // OS_WIN
|
||||
|
||||
// Used at shutdown so that we can quit a nested message loop.
|
||||
|
||||
@@ -153,6 +153,7 @@ void PrintViewManagerBase::OnDidPrintPage(
|
||||
|
||||
ShouldQuitFromInnerMessageLoop();
|
||||
#else
|
||||
print_job_->AppendPrintedPage(params.page_number);
|
||||
if (metafile_must_be_valid) {
|
||||
scoped_refptr<base::RefCountedBytes> bytes = new base::RefCountedBytes(
|
||||
reinterpret_cast<const unsigned char*>(shared_buf.memory()),
|
||||
|
||||
Reference in New Issue
Block a user