This repository has been archived by the owner on Aug 7, 2021. It is now read-only.
forked from pdfcpu/pdfcpu
-
Notifications
You must be signed in to change notification settings - Fork 0
/
filter.go
79 lines (60 loc) · 1.61 KB
/
filter.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// Package filter contains PDF filter implementations.
package filter
// See 7.4 for a list of defined filter pdfcpu.
import (
"bytes"
"io"
"github.com/hhrutter/pdfcpu/pkg/log"
"github.com/pkg/errors"
)
// PDF defines the following filters.
const (
ASCII85 = "ASCII85Decode"
ASCIIHex = "ASCIIHexDecode"
RunLength = "RunLengthDecode"
LZW = "LZWDecode"
Flate = "FlateDecode"
CCITTFax = "CCITTFaxDecode"
JBIG2 = "JBIG2Decode"
DCT = "DCTDecode"
JPX = "JPXDecode"
)
var (
// ErrUnsupportedFilter signals an unsupported filter type.
ErrUnsupportedFilter = errors.New("Filter not supported")
)
// Filter defines an interface for encoding/decoding buffers.
type Filter interface {
Encode(r io.Reader) (*bytes.Buffer, error)
Decode(r io.Reader) (*bytes.Buffer, error)
}
// NewFilter returns a filter for given filterName and an optional parameter dictionary.
func NewFilter(filterName string, parms map[string]int) (filter Filter, err error) {
switch filterName {
case ASCII85:
filter = ascii85Decode{baseFilter{}}
case ASCIIHex:
filter = asciiHexDecode{baseFilter{}}
case RunLength:
filter = runLengthDecode{baseFilter{parms}}
case LZW:
filter = lzwDecode{baseFilter{parms}}
case Flate:
filter = flate{baseFilter{parms}}
// CCITTFax
// JBIG2
// DCT
// JPX
default:
log.Info.Printf("Filter not supported: <%s>", filterName)
err = ErrUnsupportedFilter
}
return filter, err
}
// List return the list of all supported PDF filters.
func List() []string {
return []string{ASCII85, ASCIIHex, RunLength, LZW, Flate}
}
type baseFilter struct {
parms map[string]int
}