mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-09 19:29:34 +08:00
Add UpdateParams method to StreamEncoder
This commit is contained in:
parent
195105ee56
commit
b477c1430f
@ -58,6 +58,7 @@ type StreamEncoder interface {
|
||||
GetFilterName() string
|
||||
MakeDecodeParams() PdfObject
|
||||
MakeStreamDict() *PdfObjectDictionary
|
||||
UpdateParams(params *PdfObjectDictionary)
|
||||
|
||||
EncodeBytes(data []byte) ([]byte, error)
|
||||
DecodeBytes(encoded []byte) ([]byte, error)
|
||||
@ -137,6 +138,29 @@ func (enc *FlateEncoder) MakeStreamDict() *PdfObjectDictionary {
|
||||
return dict
|
||||
}
|
||||
|
||||
// UpdateParams updates the parameter values of the encoder.
|
||||
func (enc *FlateEncoder) UpdateParams(params *PdfObjectDictionary) {
|
||||
predictor, err := GetNumberAsInt64(params.Get("Predictor"))
|
||||
if err == nil {
|
||||
enc.Predictor = int(predictor)
|
||||
}
|
||||
|
||||
bpc, err := GetNumberAsInt64(params.Get("BitsPerComponent"))
|
||||
if err == nil {
|
||||
enc.BitsPerComponent = int(bpc)
|
||||
}
|
||||
|
||||
columns, err := GetNumberAsInt64(params.Get("Width"))
|
||||
if err == nil {
|
||||
enc.Columns = int(columns)
|
||||
}
|
||||
|
||||
colorComponents, err := GetNumberAsInt64(params.Get("ColorComponents"))
|
||||
if err == nil {
|
||||
enc.Colors = int(colorComponents)
|
||||
}
|
||||
}
|
||||
|
||||
// Create a new flate decoder from a stream object, getting all the encoding parameters
|
||||
// from the DecodeParms stream object dictionary entry.
|
||||
func newFlateEncoderFromStream(streamObj *PdfObjectStream, decodeParams *PdfObjectDictionary) (*FlateEncoder, error) {
|
||||
@ -508,6 +532,34 @@ func (enc *LZWEncoder) MakeStreamDict() *PdfObjectDictionary {
|
||||
return dict
|
||||
}
|
||||
|
||||
// UpdateParams updates the parameter values of the encoder.
|
||||
func (enc *LZWEncoder) UpdateParams(params *PdfObjectDictionary) {
|
||||
predictor, err := GetNumberAsInt64(params.Get("Predictor"))
|
||||
if err == nil {
|
||||
enc.Predictor = int(predictor)
|
||||
}
|
||||
|
||||
bpc, err := GetNumberAsInt64(params.Get("BitsPerComponent"))
|
||||
if err == nil {
|
||||
enc.BitsPerComponent = int(bpc)
|
||||
}
|
||||
|
||||
columns, err := GetNumberAsInt64(params.Get("Width"))
|
||||
if err == nil {
|
||||
enc.Columns = int(columns)
|
||||
}
|
||||
|
||||
colorComponents, err := GetNumberAsInt64(params.Get("ColorComponents"))
|
||||
if err == nil {
|
||||
enc.Colors = int(colorComponents)
|
||||
}
|
||||
|
||||
earlyChange, err := GetNumberAsInt64(params.Get("EarlyChange"))
|
||||
if err == nil {
|
||||
enc.EarlyChange = int(earlyChange)
|
||||
}
|
||||
}
|
||||
|
||||
// Create a new LZW encoder/decoder from a stream object, getting all the encoding parameters
|
||||
// from the DecodeParms stream object dictionary entry.
|
||||
func newLZWEncoderFromStream(streamObj *PdfObjectStream, decodeParams *PdfObjectDictionary) (*LZWEncoder, error) {
|
||||
@ -825,6 +877,34 @@ func (enc *DCTEncoder) MakeStreamDict() *PdfObjectDictionary {
|
||||
return dict
|
||||
}
|
||||
|
||||
// UpdateParams updates the parameter values of the encoder.
|
||||
func (enc *DCTEncoder) UpdateParams(params *PdfObjectDictionary) {
|
||||
colorComponents, err := GetNumberAsInt64(params.Get("ColorComponents"))
|
||||
if err == nil {
|
||||
enc.ColorComponents = int(colorComponents)
|
||||
}
|
||||
|
||||
bpc, err := GetNumberAsInt64(params.Get("BitsPerComponent"))
|
||||
if err == nil {
|
||||
enc.BitsPerComponent = int(bpc)
|
||||
}
|
||||
|
||||
width, err := GetNumberAsInt64(params.Get("Width"))
|
||||
if err == nil {
|
||||
enc.Width = int(width)
|
||||
}
|
||||
|
||||
height, err := GetNumberAsInt64(params.Get("Height"))
|
||||
if err == nil {
|
||||
enc.Height = int(height)
|
||||
}
|
||||
|
||||
quality, err := GetNumberAsInt64(params.Get("Quality"))
|
||||
if err == nil {
|
||||
enc.Quality = int(quality)
|
||||
}
|
||||
}
|
||||
|
||||
// Create a new DCT encoder/decoder from a stream object, getting all the encoding parameters
|
||||
// from the stream object dictionary entry and the image data itself.
|
||||
// TODO: Support if used with other filters [ASCII85Decode FlateDecode DCTDecode]...
|
||||
@ -1240,6 +1320,10 @@ func (enc *RunLengthEncoder) MakeStreamDict() *PdfObjectDictionary {
|
||||
return dict
|
||||
}
|
||||
|
||||
// UpdateParams updates the parameter values of the encoder.
|
||||
func (enc *RunLengthEncoder) UpdateParams(params *PdfObjectDictionary) {
|
||||
}
|
||||
|
||||
// ASCIIHexEncoder implements ASCII hex encoder/decoder.
|
||||
type ASCIIHexEncoder struct {
|
||||
}
|
||||
@ -1265,6 +1349,10 @@ func (enc *ASCIIHexEncoder) MakeStreamDict() *PdfObjectDictionary {
|
||||
return dict
|
||||
}
|
||||
|
||||
// UpdateParams updates the parameter values of the encoder.
|
||||
func (enc *ASCIIHexEncoder) UpdateParams(params *PdfObjectDictionary) {
|
||||
}
|
||||
|
||||
func (enc *ASCIIHexEncoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
||||
bufReader := bytes.NewReader(encoded)
|
||||
var inb []byte
|
||||
@ -1339,6 +1427,10 @@ func (enc *ASCII85Encoder) MakeStreamDict() *PdfObjectDictionary {
|
||||
return dict
|
||||
}
|
||||
|
||||
// UpdateParams updates the parameter values of the encoder.
|
||||
func (enc *ASCII85Encoder) UpdateParams(params *PdfObjectDictionary) {
|
||||
}
|
||||
|
||||
// DecodeBytes decodes byte array with ASCII85. 5 ASCII characters -> 4 raw binary bytes
|
||||
func (enc *ASCII85Encoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
||||
var decoded []byte
|
||||
@ -1504,6 +1596,10 @@ func (enc *RawEncoder) MakeStreamDict() *PdfObjectDictionary {
|
||||
return MakeDict()
|
||||
}
|
||||
|
||||
// UpdateParams updates the parameter values of the encoder.
|
||||
func (enc *RawEncoder) UpdateParams(params *PdfObjectDictionary) {
|
||||
}
|
||||
|
||||
func (enc *RawEncoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
||||
return encoded, nil
|
||||
}
|
||||
@ -1537,6 +1633,10 @@ func (enc *CCITTFaxEncoder) MakeStreamDict() *PdfObjectDictionary {
|
||||
return MakeDict()
|
||||
}
|
||||
|
||||
// UpdateParams updates the parameter values of the encoder.
|
||||
func (enc *CCITTFaxEncoder) UpdateParams(params *PdfObjectDictionary) {
|
||||
}
|
||||
|
||||
func (enc *CCITTFaxEncoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
||||
common.Log.Debug("Error: Attempting to use unsupported encoding %s", enc.GetFilterName())
|
||||
return encoded, ErrNoCCITTFaxDecode
|
||||
@ -1573,6 +1673,10 @@ func (enc *JBIG2Encoder) MakeStreamDict() *PdfObjectDictionary {
|
||||
return MakeDict()
|
||||
}
|
||||
|
||||
// UpdateParams updates the parameter values of the encoder.
|
||||
func (enc *JBIG2Encoder) UpdateParams(params *PdfObjectDictionary) {
|
||||
}
|
||||
|
||||
func (enc *JBIG2Encoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
||||
common.Log.Debug("Error: Attempting to use unsupported encoding %s", enc.GetFilterName())
|
||||
return encoded, ErrNoJBIG2Decode
|
||||
@ -1609,6 +1713,10 @@ func (enc *JPXEncoder) MakeStreamDict() *PdfObjectDictionary {
|
||||
return MakeDict()
|
||||
}
|
||||
|
||||
// UpdateParams updates the parameter values of the encoder.
|
||||
func (enc *JPXEncoder) UpdateParams(params *PdfObjectDictionary) {
|
||||
}
|
||||
|
||||
func (enc *JPXEncoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
||||
common.Log.Debug("Error: Attempting to use unsupported encoding %s", enc.GetFilterName())
|
||||
return encoded, ErrNoJPXDecode
|
||||
@ -1807,6 +1915,13 @@ func (enc *MultiEncoder) MakeStreamDict() *PdfObjectDictionary {
|
||||
return dict
|
||||
}
|
||||
|
||||
// UpdateParams updates the parameter values of the encoder.
|
||||
func (enc *MultiEncoder) UpdateParams(params *PdfObjectDictionary) {
|
||||
for _, encoder := range enc.encoders {
|
||||
encoder.UpdateParams(params)
|
||||
}
|
||||
}
|
||||
|
||||
func (enc *MultiEncoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
||||
decoded := encoded
|
||||
var err error
|
||||
|
Loading…
x
Reference in New Issue
Block a user