diff options
author | William Bader <william@newspapersystems.com> | 2020-09-13 04:52:45 +0100 |
---|---|---|
committer | William Bader <william@newspapersystems.com> | 2020-09-13 04:52:45 +0100 |
commit | e2ecddf3fc1f93a68b0ae535813f8b0d5ec672b5 (patch) | |
tree | fb4fd29ee9d32dca98acab9ee9dfecc99de244c0 | |
parent | 91d95545b48d3aec6220d943177b571466f9a116 (diff) |
Implement EmbedStream::reset() to fix pdftops -level1sep -optimizecolorspace for in-line images.
-rw-r--r-- | poppler/Stream.cc | 17 | ||||
-rw-r--r-- | poppler/Stream.h | 3 |
2 files changed, 18 insertions, 2 deletions
diff --git a/poppler/Stream.cc b/poppler/Stream.cc index 6eedfa00..2b3eba85 100644 --- a/poppler/Stream.cc +++ b/poppler/Stream.cc @@ -1069,6 +1069,7 @@ EmbedStream::EmbedStream(Stream *strA, Object &&dictA, bool limitedA, Goffset le reusable = reusableA; record = false; replay = false; + start = str->getPos(); if (reusable) { bufData = (unsigned char *)gmalloc(16384); bufMax = 16384; @@ -1083,13 +1084,27 @@ EmbedStream::~EmbedStream() gfree(bufData); } +void EmbedStream::reset() +{ + if (str->getPos() != start) { + str->reset(); + // Might be a FilterStream that does not support str->setPos(start) + while (str->getPos() < start) { + str->getChar(); + } + } + record = false; + replay = false; + bufPos = 0; +} + BaseStream *EmbedStream::copy() { error(errInternal, -1, "Called copy() on EmbedStream"); return nullptr; } -Stream *EmbedStream::makeSubStream(Goffset start, bool limitedA, Goffset lengthA, Object &&dictA) +Stream *EmbedStream::makeSubStream(Goffset startA, bool limitedA, Goffset lengthA, Object &&dictA) { error(errInternal, -1, "Called makeSubStream() on EmbedStream"); return nullptr; diff --git a/poppler/Stream.h b/poppler/Stream.h index 5d9ad0c9..abd60d4b 100644 --- a/poppler/Stream.h +++ b/poppler/Stream.h @@ -747,7 +747,7 @@ public: BaseStream *copy() override; Stream *makeSubStream(Goffset start, bool limitedA, Goffset lengthA, Object &&dictA) override; StreamKind getKind() const override { return str->getKind(); } - void reset() override { } + void reset() override; int getChar() override; int lookChar() override; Goffset getPos() override; @@ -774,6 +774,7 @@ private: long bufMax; long bufLen; long bufPos; + Goffset start; }; //------------------------------------------------------------------------ |