Skip to content

Commit

Permalink
Merge PR #811
Browse files Browse the repository at this point in the history
  • Loading branch information
hhrutter committed Feb 29, 2024
2 parents da12eed + ea51e23 commit 268e6bb
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 39 deletions.
20 changes: 5 additions & 15 deletions pkg/filter/ascii85Decode.go
Expand Up @@ -33,14 +33,11 @@ const eodASCII85 = "~>"
// Encode implements encoding for an ASCII85Decode filter.
func (f ascii85Decode) Encode(r io.Reader) (io.Reader, error) {

var b1 bytes.Buffer
if _, err := io.Copy(&b1, r); err != nil {
return nil, err
}

b2 := &bytes.Buffer{}
encoder := ascii85.NewEncoder(b2)
encoder.Write(b1.Bytes())
if _, err := io.Copy(encoder, r); err != nil {
return nil, err
}
encoder.Close()

// Add eod sequence
Expand All @@ -52,13 +49,11 @@ func (f ascii85Decode) Encode(r io.Reader) (io.Reader, error) {
// Decode implements decoding for an ASCII85Decode filter.
func (f ascii85Decode) Decode(r io.Reader) (io.Reader, error) {

var b1 bytes.Buffer
if _, err := io.Copy(&b1, r); err != nil {
bb, err := getReaderBytes(r)
if err != nil {
return nil, err
}

bb := b1.Bytes()

// fmt.Printf("dump:\n%s", hex.Dump(bb))

l := len(bb)
Expand All @@ -80,10 +75,5 @@ func (f ascii85Decode) Decode(r io.Reader) (io.Reader, error) {
return nil, err
}

// buf, err := io.ReadAll(decoder)
// if err != nil {
// return nil, err
// }

return &b2, nil
}
12 changes: 4 additions & 8 deletions pkg/filter/asciiHexDecode.go
Expand Up @@ -31,13 +31,11 @@ const eodHexDecode = '>'
// Encode implements encoding for an ASCIIHexDecode filter.
func (f asciiHexDecode) Encode(r io.Reader) (io.Reader, error) {

var buf bytes.Buffer
if _, err := io.Copy(&buf, r); err != nil {
bb, err := getReaderBytes(r)
if err != nil {
return nil, err
}

bb := buf.Bytes()

dst := make([]byte, hex.EncodedLen(len(bb)))
hex.Encode(dst, bb)

Expand All @@ -50,13 +48,11 @@ func (f asciiHexDecode) Encode(r io.Reader) (io.Reader, error) {
// Decode implements decoding for an ASCIIHexDecode filter.
func (f asciiHexDecode) Decode(r io.Reader) (io.Reader, error) {

var buf bytes.Buffer
if _, err := io.Copy(&buf, r); err != nil {
bb, err := getReaderBytes(r)
if err != nil {
return nil, err
}

bb := buf.Bytes()

var p []byte

// Remove any white space and cut off on eod
Expand Down
17 changes: 17 additions & 0 deletions pkg/filter/filter.go
Expand Up @@ -18,6 +18,7 @@ limitations under the License.
package filter

import (
"bytes"
"io"

"github.com/pdfcpu/pdfcpu/pkg/log"
Expand Down Expand Up @@ -98,3 +99,19 @@ func List() []string {
type baseFilter struct {
parms map[string]int
}

func getReaderBytes(r io.Reader) ([]byte, error) {
var bb []byte
if buf, ok := r.(*bytes.Buffer); ok {
bb = buf.Bytes()
} else {
var buf bytes.Buffer
if _, err := io.Copy(&buf, r); err != nil {
return nil, err
}

bb = buf.Bytes()
}

return bb, nil
}
12 changes: 6 additions & 6 deletions pkg/filter/runLengthDecode.go
Expand Up @@ -112,27 +112,27 @@ func (f runLengthDecode) encode(w io.ByteWriter, src []byte) {
// Encode implements encoding for a RunLengthDecode filter.
func (f runLengthDecode) Encode(r io.Reader) (io.Reader, error) {

var b1 bytes.Buffer
if _, err := io.Copy(&b1, r); err != nil {
b1, err := getReaderBytes(r)
if err != nil {
return nil, err
}

var b2 bytes.Buffer
f.encode(&b2, b1.Bytes())
f.encode(&b2, b1)

return &b2, nil
}

// Decode implements decoding for an RunLengthDecode filter.
func (f runLengthDecode) Decode(r io.Reader) (io.Reader, error) {

var b1 bytes.Buffer
if _, err := io.Copy(&b1, r); err != nil {
b1, err := getReaderBytes(r)
if err != nil {
return nil, err
}

var b2 bytes.Buffer
f.decode(&b2, b1.Bytes())
f.decode(&b2, b1)

return &b2, nil
}
28 changes: 18 additions & 10 deletions pkg/pdfcpu/types/streamdict.go
Expand Up @@ -195,12 +195,16 @@ func (sd *StreamDict) Encode() error {
b = c
}

var buf bytes.Buffer
if _, err := io.Copy(&buf, c); err != nil {
return err
}
if bb, ok := c.(*bytes.Buffer); ok {
sd.Raw = bb.Bytes()
} else {
var buf bytes.Buffer
if _, err := io.Copy(&buf, c); err != nil {
return err
}

sd.Raw = buf.Bytes()
sd.Raw = buf.Bytes()
}

streamLength := int64(len(sd.Raw))
sd.StreamLength = &streamLength
Expand Down Expand Up @@ -289,12 +293,16 @@ func (sd *StreamDict) Decode() error {
b = c
}

var buf bytes.Buffer
if _, err := io.Copy(&buf, c); err != nil {
return err
}
if bb, ok := c.(*bytes.Buffer); ok {
sd.Content = bb.Bytes()
} else {
var buf bytes.Buffer
if _, err := io.Copy(&buf, c); err != nil {
return err
}

sd.Content = buf.Bytes()
sd.Content = buf.Bytes()
}

return nil
}
Expand Down

0 comments on commit 268e6bb

Please sign in to comment.