| Index: printing/pdf_metafile_skia.cc
|
| diff --git a/printing/pdf_metafile_skia.cc b/printing/pdf_metafile_skia.cc
|
| index 69cae9e089c867d3c30f199009511e02361cedb5..d265ca02a13f50f5e3bee2d84cecc1a29a327463 100644
|
| --- a/printing/pdf_metafile_skia.cc
|
| +++ b/printing/pdf_metafile_skia.cc
|
| @@ -51,7 +51,8 @@ bool PdfMetafileSkia::InitFromData(const void* src_buffer,
|
| SkDevice* PdfMetafileSkia::StartPageForVectorCanvas(
|
| const gfx::Size& page_size, const gfx::Rect& content_area,
|
| const float& scale_factor) {
|
| - DCHECK(data_->current_page_.get() == NULL);
|
| + DCHECK (!page_outstanding_);
|
| + page_outstanding_ = true;
|
|
|
| // Adjust for the margins and apply the scale factor.
|
| SkMatrix transform;
|
| @@ -84,7 +85,7 @@ bool PdfMetafileSkia::FinishPage() {
|
| DCHECK(data_->current_page_.get());
|
|
|
| data_->pdf_doc_.appendPage(data_->current_page_);
|
| - data_->current_page_ = NULL;
|
| + page_outstanding_ = false;
|
| return true;
|
| }
|
|
|
| @@ -93,9 +94,10 @@ bool PdfMetafileSkia::FinishDocument() {
|
| if (data_->pdf_stream_.getOffset())
|
| return true;
|
|
|
| - if (data_->current_page_.get())
|
| + if (page_outstanding_)
|
| FinishPage();
|
|
|
| + data_->current_page_ = NULL;
|
| base::hash_set<SkFontID> font_set;
|
|
|
| const SkTDArray<SkPDFPage*>& pages = data_->pdf_doc_.getPages();
|
| @@ -234,6 +236,25 @@ bool PdfMetafileSkia::SaveToFD(const base::FileDescriptor& fd) const {
|
|
|
| PdfMetafileSkia::PdfMetafileSkia()
|
| : data_(new PdfMetafileSkiaData),
|
| - draft_(false) {}
|
| + draft_(false),
|
| + page_outstanding_(false) {}
|
| +
|
| +PdfMetafileSkia* PdfMetafileSkia::GetMetafileForCurrentPage() {
|
| + SkPDFDocument pdf_doc;
|
| + SkDynamicMemoryWStream pdf_stream;
|
| + if (!pdf_doc.appendPage(data_->current_page_))
|
| + return NULL;
|
| +
|
| + if (!pdf_doc.emitPDF(&pdf_stream))
|
| + return NULL;
|
| +
|
| + SkAutoDataUnref data(pdf_stream.copyToData());
|
| + if (data.size() == 0)
|
| + return NULL;
|
| +
|
| + PdfMetafileSkia* metafile = new printing::PdfMetafileSkia;
|
| + metafile->InitFromData(data.bytes(), data.size());
|
| + return metafile;
|
| +}
|
|
|
| } // namespace printing
|
|
|