OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #include "SkPDFCatalog.h" | 10 #include "SkPDFCatalog.h" |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 SkPDFDict* raw_dests = dests.get(); | 153 SkPDFDict* raw_dests = dests.get(); |
154 fFirstPageResources->add(dests.detach()); // Transfer ownership. | 154 fFirstPageResources->add(dests.detach()); // Transfer ownership. |
155 fCatalog->addObject(raw_dests, true /* onFirstPage */); | 155 fCatalog->addObject(raw_dests, true /* onFirstPage */); |
156 fDocCatalog->insert("Dests", SkNEW_ARGS(SkPDFObjRef, (raw_dests)))->
unref(); | 156 fDocCatalog->insert("Dests", SkNEW_ARGS(SkPDFObjRef, (raw_dests)))->
unref(); |
157 } | 157 } |
158 | 158 |
159 // Build font subsetting info before proceeding. | 159 // Build font subsetting info before proceeding. |
160 perform_font_subsetting(fCatalog.get(), fPages, &fSubstitutes); | 160 perform_font_subsetting(fCatalog.get(), fPages, &fSubstitutes); |
161 | 161 |
162 // Figure out the size of things and inform the catalog of file offsets. | 162 // Figure out the size of things and inform the catalog of file offsets. |
163 off_t fileOffset = headerSize(); | 163 off_t fileOffset = SkToOffT(this->headerSize()); |
164 fileOffset += fCatalog->setFileOffset(fDocCatalog, fileOffset); | 164 fileOffset += SkToOffT(fCatalog->setFileOffset(fDocCatalog, fileOffset))
; |
165 fileOffset += fCatalog->setFileOffset(fPages[0], fileOffset); | 165 fileOffset += SkToOffT(fCatalog->setFileOffset(fPages[0], fileOffset)); |
166 fileOffset += fPages[0]->getPageSize(fCatalog.get(), | 166 fileOffset += fPages[0]->getPageSize(fCatalog.get(), fileOffset); |
167 (size_t) fileOffset); | |
168 for (int i = 0; i < fFirstPageResources->count(); i++) { | 167 for (int i = 0; i < fFirstPageResources->count(); i++) { |
169 fileOffset += fCatalog->setFileOffset((*fFirstPageResources)[i], | 168 fileOffset += SkToOffT(fCatalog->setFileOffset((*fFirstPageResources
)[i], fileOffset)); |
170 fileOffset); | |
171 } | 169 } |
172 // Add the size of resources of substitute objects used on page 1. | 170 // Add the size of resources of substitute objects used on page 1. |
173 fileOffset += fCatalog->setSubstituteResourcesOffsets(fileOffset, true); | 171 fileOffset += fCatalog->setSubstituteResourcesOffsets(fileOffset, true); |
174 if (fPages.count() > 1) { | 172 if (fPages.count() > 1) { |
175 // TODO(vandebo): For linearized format, save the start of the | 173 // TODO(vandebo): For linearized format, save the start of the |
176 // first page xref table and calculate the size. | 174 // first page xref table and calculate the size. |
177 } | 175 } |
178 | 176 |
179 for (int i = 0; i < fPageTree.count(); i++) { | 177 for (int i = 0; i < fPageTree.count(); i++) { |
180 fileOffset += fCatalog->setFileOffset(fPageTree[i], fileOffset); | 178 fileOffset += SkToOffT(fCatalog->setFileOffset(fPageTree[i], fileOff
set)); |
181 } | 179 } |
182 | 180 |
183 for (int i = 1; i < fPages.count(); i++) { | 181 for (int i = 1; i < fPages.count(); i++) { |
184 fileOffset += fPages[i]->getPageSize(fCatalog.get(), fileOffset); | 182 fileOffset += fPages[i]->getPageSize(fCatalog.get(), fileOffset); |
185 } | 183 } |
186 | 184 |
187 for (int i = 0; i < fOtherPageResources->count(); i++) { | 185 for (int i = 0; i < fOtherPageResources->count(); i++) { |
188 fileOffset += fCatalog->setFileOffset( | 186 fileOffset += SkToOffT(fCatalog->setFileOffset((*fOtherPageResources
)[i], fileOffset)); |
189 (*fOtherPageResources)[i], fileOffset); | |
190 } | 187 } |
191 | 188 |
192 fileOffset += fCatalog->setSubstituteResourcesOffsets(fileOffset, | 189 fileOffset += fCatalog->setSubstituteResourcesOffsets(fileOffset, false)
; |
193 false); | |
194 fXRefFileOffset = fileOffset; | 190 fXRefFileOffset = fileOffset; |
195 } | 191 } |
196 | 192 |
197 emitHeader(stream); | 193 emitHeader(stream); |
198 fDocCatalog->emitObject(stream, fCatalog.get(), true); | 194 fDocCatalog->emitObject(stream, fCatalog.get(), true); |
199 fPages[0]->emitObject(stream, fCatalog.get(), true); | 195 fPages[0]->emitObject(stream, fCatalog.get(), true); |
200 fPages[0]->emitPage(stream, fCatalog.get()); | 196 fPages[0]->emitPage(stream, fCatalog.get()); |
201 for (int i = 0; i < fFirstPageResources->count(); i++) { | 197 for (int i = 0; i < fFirstPageResources->count(); i++) { |
202 (*fFirstPageResources)[i]->emit(stream, fCatalog.get(), true); | 198 (*fFirstPageResources)[i]->emit(stream, fCatalog.get(), true); |
203 } | 199 } |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
342 fTrailerDict->insertInt("Size", int(objCount)); | 338 fTrailerDict->insertInt("Size", int(objCount)); |
343 fTrailerDict->insert("Root", new SkPDFObjRef(fDocCatalog))->unref(); | 339 fTrailerDict->insert("Root", new SkPDFObjRef(fDocCatalog))->unref(); |
344 } | 340 } |
345 | 341 |
346 stream->writeText("trailer\n"); | 342 stream->writeText("trailer\n"); |
347 fTrailerDict->emitObject(stream, fCatalog.get(), false); | 343 fTrailerDict->emitObject(stream, fCatalog.get(), false); |
348 stream->writeText("\nstartxref\n"); | 344 stream->writeText("\nstartxref\n"); |
349 stream->writeBigDecAsText(fXRefFileOffset); | 345 stream->writeBigDecAsText(fXRefFileOffset); |
350 stream->writeText("\n%%EOF"); | 346 stream->writeText("\n%%EOF"); |
351 } | 347 } |
OLD | NEW |