summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Bader <william@newspapersystems.com>2020-09-13 04:52:45 +0100
committerWilliam Bader <william@newspapersystems.com>2020-09-13 04:52:45 +0100
commite2ecddf3fc1f93a68b0ae535813f8b0d5ec672b5 (patch)
treefb4fd29ee9d32dca98acab9ee9dfecc99de244c0
parent91d95545b48d3aec6220d943177b571466f9a116 (diff)
Implement EmbedStream::reset() to fix pdftops -level1sep -optimizecolorspace for in-line images.
-rw-r--r--poppler/Stream.cc17
-rw-r--r--poppler/Stream.h3
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;
};
//------------------------------------------------------------------------