aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--gyp/pdf.gyp8
-rw-r--r--src/pdf/SkPDFStream.cpp10
-rw-r--r--src/pdf/SkPDFTypes.cpp23
3 files changed, 40 insertions, 1 deletions
diff --git a/gyp/pdf.gyp b/gyp/pdf.gyp
index 259218338d..4a7ba6ddce 100644
--- a/gyp/pdf.gyp
+++ b/gyp/pdf.gyp
@@ -17,7 +17,10 @@
'product_name': 'skia_pdf',
'type': 'static_library',
'standalone_static_library': 1,
- 'variables': { 'skia_pdf_use_sfntly%': 1, },
+ 'variables': {
+ 'skia_pdf_use_sfntly%': 1,
+ 'skia_pdf_less_compression%': 0, # enable for debugging only
+ },
'dependencies': [
'skia_lib.gyp:skia_lib',
'zlib.gyp:zlib',
@@ -40,6 +43,9 @@
{ 'dependencies': [ 'sfntly.gyp:sfntly' ] }
],
[ 'skia_pdf_generate_pdfa', { 'defines': ['SK_PDF_GENERATE_PDFA'] } ],
+ [ 'skia_pdf_less_compression',
+ {'defines': ['SK_PDF_LESS_COMPRESSION'] }
+ ],
[ 'skia_android_framework', {
# Add SFTNLY support for PDF (which in turns depends on ICU)
'include_dirs': [
diff --git a/src/pdf/SkPDFStream.cpp b/src/pdf/SkPDFStream.cpp
index 10fc77b587..bfe33a8465 100644
--- a/src/pdf/SkPDFStream.cpp
+++ b/src/pdf/SkPDFStream.cpp
@@ -33,11 +33,21 @@ void SkPDFStream::emitObject(SkWStream* stream,
stream->writeText("\nendstream");
}
+
void SkPDFStream::setData(SkStream* stream) {
SkASSERT(!fCompressedData); // Only call this function once.
SkASSERT(stream);
// Code assumes that the stream starts at the beginning.
+ #ifdef SK_PDF_LESS_COMPRESSION
+ std::unique_ptr<SkStreamRewindable> duplicate(stream->duplicate());
+ if (duplicate && duplicate->hasLength()) {
+ this->insertInt("Length", duplicate->getLength());
+ fCompressedData.reset(duplicate.release());
+ return;
+ }
+ #endif
+
SkDynamicMemoryWStream compressedData;
SkDeflateWStream deflateWStream(&compressedData);
SkStreamCopy(&deflateWStream, stream);
diff --git a/src/pdf/SkPDFTypes.cpp b/src/pdf/SkPDFTypes.cpp
index 5eb5c39c0e..285da38513 100644
--- a/src/pdf/SkPDFTypes.cpp
+++ b/src/pdf/SkPDFTypes.cpp
@@ -465,6 +465,28 @@ void SkPDFSharedStream::drop() {
SkDEBUGCODE(fDumped = true;)
}
+#ifdef SK_PDF_LESS_COMPRESSION
+void SkPDFSharedStream::emitObject(
+ SkWStream* stream,
+ const SkPDFObjNumMap& objNumMap,
+ const SkPDFSubstituteMap& substitutes) const {
+ SkASSERT(!fDumped);
+ std::unique_ptr<SkStreamAsset> dup(fAsset->duplicate());
+ SkASSERT(dup && dup->hasLength());
+ size_t length = dup->getLength();
+ stream->writeText("<<");
+ fDict->emitAll(stream, objNumMap, substitutes);
+ stream->writeText("\n");
+ SkPDFUnion::Name("Length").emitObject(
+ stream, objNumMap, substitutes);
+ stream->writeText(" ");
+ SkPDFUnion::Int(length).emitObject(
+ stream, objNumMap, substitutes);
+ stream->writeText("\n>>stream\n");
+ SkStreamCopy(stream, dup.get());
+ stream->writeText("\nendstream");
+}
+#else
void SkPDFSharedStream::emitObject(
SkWStream* stream,
const SkPDFObjNumMap& objNumMap,
@@ -493,6 +515,7 @@ void SkPDFSharedStream::emitObject(
buffer.writeToStream(stream);
stream->writeText("\nendstream");
}
+#endif
void SkPDFSharedStream::addResources(
SkPDFObjNumMap* catalog, const SkPDFSubstituteMap& substitutes) const {