mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-11 19:29:40 +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
|
GetFilterName() string
|
||||||
MakeDecodeParams() PdfObject
|
MakeDecodeParams() PdfObject
|
||||||
MakeStreamDict() *PdfObjectDictionary
|
MakeStreamDict() *PdfObjectDictionary
|
||||||
|
UpdateParams(params *PdfObjectDictionary)
|
||||||
|
|
||||||
EncodeBytes(data []byte) ([]byte, error)
|
EncodeBytes(data []byte) ([]byte, error)
|
||||||
DecodeBytes(encoded []byte) ([]byte, error)
|
DecodeBytes(encoded []byte) ([]byte, error)
|
||||||
@ -137,6 +138,29 @@ func (enc *FlateEncoder) MakeStreamDict() *PdfObjectDictionary {
|
|||||||
return dict
|
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
|
// Create a new flate decoder from a stream object, getting all the encoding parameters
|
||||||
// from the DecodeParms stream object dictionary entry.
|
// from the DecodeParms stream object dictionary entry.
|
||||||
func newFlateEncoderFromStream(streamObj *PdfObjectStream, decodeParams *PdfObjectDictionary) (*FlateEncoder, error) {
|
func newFlateEncoderFromStream(streamObj *PdfObjectStream, decodeParams *PdfObjectDictionary) (*FlateEncoder, error) {
|
||||||
@ -508,6 +532,34 @@ func (enc *LZWEncoder) MakeStreamDict() *PdfObjectDictionary {
|
|||||||
return dict
|
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
|
// Create a new LZW encoder/decoder from a stream object, getting all the encoding parameters
|
||||||
// from the DecodeParms stream object dictionary entry.
|
// from the DecodeParms stream object dictionary entry.
|
||||||
func newLZWEncoderFromStream(streamObj *PdfObjectStream, decodeParams *PdfObjectDictionary) (*LZWEncoder, error) {
|
func newLZWEncoderFromStream(streamObj *PdfObjectStream, decodeParams *PdfObjectDictionary) (*LZWEncoder, error) {
|
||||||
@ -825,6 +877,34 @@ func (enc *DCTEncoder) MakeStreamDict() *PdfObjectDictionary {
|
|||||||
return dict
|
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
|
// 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.
|
// from the stream object dictionary entry and the image data itself.
|
||||||
// TODO: Support if used with other filters [ASCII85Decode FlateDecode DCTDecode]...
|
// TODO: Support if used with other filters [ASCII85Decode FlateDecode DCTDecode]...
|
||||||
@ -1240,6 +1320,10 @@ func (enc *RunLengthEncoder) MakeStreamDict() *PdfObjectDictionary {
|
|||||||
return dict
|
return dict
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateParams updates the parameter values of the encoder.
|
||||||
|
func (enc *RunLengthEncoder) UpdateParams(params *PdfObjectDictionary) {
|
||||||
|
}
|
||||||
|
|
||||||
// ASCIIHexEncoder implements ASCII hex encoder/decoder.
|
// ASCIIHexEncoder implements ASCII hex encoder/decoder.
|
||||||
type ASCIIHexEncoder struct {
|
type ASCIIHexEncoder struct {
|
||||||
}
|
}
|
||||||
@ -1265,6 +1349,10 @@ func (enc *ASCIIHexEncoder) MakeStreamDict() *PdfObjectDictionary {
|
|||||||
return dict
|
return dict
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateParams updates the parameter values of the encoder.
|
||||||
|
func (enc *ASCIIHexEncoder) UpdateParams(params *PdfObjectDictionary) {
|
||||||
|
}
|
||||||
|
|
||||||
func (enc *ASCIIHexEncoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
func (enc *ASCIIHexEncoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
||||||
bufReader := bytes.NewReader(encoded)
|
bufReader := bytes.NewReader(encoded)
|
||||||
var inb []byte
|
var inb []byte
|
||||||
@ -1339,6 +1427,10 @@ func (enc *ASCII85Encoder) MakeStreamDict() *PdfObjectDictionary {
|
|||||||
return dict
|
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
|
// DecodeBytes decodes byte array with ASCII85. 5 ASCII characters -> 4 raw binary bytes
|
||||||
func (enc *ASCII85Encoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
func (enc *ASCII85Encoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
||||||
var decoded []byte
|
var decoded []byte
|
||||||
@ -1504,6 +1596,10 @@ func (enc *RawEncoder) MakeStreamDict() *PdfObjectDictionary {
|
|||||||
return MakeDict()
|
return MakeDict()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateParams updates the parameter values of the encoder.
|
||||||
|
func (enc *RawEncoder) UpdateParams(params *PdfObjectDictionary) {
|
||||||
|
}
|
||||||
|
|
||||||
func (enc *RawEncoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
func (enc *RawEncoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
||||||
return encoded, nil
|
return encoded, nil
|
||||||
}
|
}
|
||||||
@ -1537,6 +1633,10 @@ func (enc *CCITTFaxEncoder) MakeStreamDict() *PdfObjectDictionary {
|
|||||||
return MakeDict()
|
return MakeDict()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateParams updates the parameter values of the encoder.
|
||||||
|
func (enc *CCITTFaxEncoder) UpdateParams(params *PdfObjectDictionary) {
|
||||||
|
}
|
||||||
|
|
||||||
func (enc *CCITTFaxEncoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
func (enc *CCITTFaxEncoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
||||||
common.Log.Debug("Error: Attempting to use unsupported encoding %s", enc.GetFilterName())
|
common.Log.Debug("Error: Attempting to use unsupported encoding %s", enc.GetFilterName())
|
||||||
return encoded, ErrNoCCITTFaxDecode
|
return encoded, ErrNoCCITTFaxDecode
|
||||||
@ -1573,6 +1673,10 @@ func (enc *JBIG2Encoder) MakeStreamDict() *PdfObjectDictionary {
|
|||||||
return MakeDict()
|
return MakeDict()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateParams updates the parameter values of the encoder.
|
||||||
|
func (enc *JBIG2Encoder) UpdateParams(params *PdfObjectDictionary) {
|
||||||
|
}
|
||||||
|
|
||||||
func (enc *JBIG2Encoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
func (enc *JBIG2Encoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
||||||
common.Log.Debug("Error: Attempting to use unsupported encoding %s", enc.GetFilterName())
|
common.Log.Debug("Error: Attempting to use unsupported encoding %s", enc.GetFilterName())
|
||||||
return encoded, ErrNoJBIG2Decode
|
return encoded, ErrNoJBIG2Decode
|
||||||
@ -1609,6 +1713,10 @@ func (enc *JPXEncoder) MakeStreamDict() *PdfObjectDictionary {
|
|||||||
return MakeDict()
|
return MakeDict()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UpdateParams updates the parameter values of the encoder.
|
||||||
|
func (enc *JPXEncoder) UpdateParams(params *PdfObjectDictionary) {
|
||||||
|
}
|
||||||
|
|
||||||
func (enc *JPXEncoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
func (enc *JPXEncoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
||||||
common.Log.Debug("Error: Attempting to use unsupported encoding %s", enc.GetFilterName())
|
common.Log.Debug("Error: Attempting to use unsupported encoding %s", enc.GetFilterName())
|
||||||
return encoded, ErrNoJPXDecode
|
return encoded, ErrNoJPXDecode
|
||||||
@ -1807,6 +1915,13 @@ func (enc *MultiEncoder) MakeStreamDict() *PdfObjectDictionary {
|
|||||||
return dict
|
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) {
|
func (enc *MultiEncoder) DecodeBytes(encoded []byte) ([]byte, error) {
|
||||||
decoded := encoded
|
decoded := encoded
|
||||||
var err error
|
var err error
|
||||||
|
Loading…
x
Reference in New Issue
Block a user