diff --git a/pdf/core/encoding.go b/pdf/core/encoding.go index 64d7a955..d811578e 100644 --- a/pdf/core/encoding.go +++ b/pdf/core/encoding.go @@ -34,7 +34,7 @@ import ( lzw1 "golang.org/x/image/tiff/lzw" "github.com/unidoc/unidoc/common" - "github.com/unidoc/unidoc/pdf/core/ccittfaxdecode" + "github.com/unidoc/unidoc/pdf/internal/ccittfax" ) const ( @@ -1633,7 +1633,10 @@ type CCITTFaxEncoder struct { // NewCCITTFaxEncoder makes a new CCITTFax encoder. func NewCCITTFaxEncoder() *CCITTFaxEncoder { - return &CCITTFaxEncoder{} + return &CCITTFaxEncoder{ + Columns: 1728, + EndOfBlock: true, + } } // GetFilterName gets the filter name. @@ -1842,7 +1845,7 @@ func (enc *CCITTFaxEncoder) UpdateParams(params *PdfObjectDictionary) { // DecodeBytes decodes the CCITTFax encoded image data. func (enc *CCITTFaxEncoder) DecodeBytes(encoded []byte) ([]byte, error) { - encoder := &ccittfaxdecode.Encoder{ + encoder := &ccittfax.Encoder{ K: enc.K, Columns: enc.Columns, EndOfLine: enc.EndOfLine, @@ -1913,7 +1916,7 @@ func (enc *CCITTFaxEncoder) EncodeBytes(data []byte) ([]byte, error) { pixels = append(pixels, pixelsRow) } - encoder := &ccittfaxdecode.Encoder{ + encoder := &ccittfax.Encoder{ K: enc.K, Columns: enc.Columns, EndOfLine: enc.EndOfLine, diff --git a/pdf/creator/creator_test.go b/pdf/creator/creator_test.go index 9066330e..d122581d 100644 --- a/pdf/creator/creator_test.go +++ b/pdf/creator/creator_test.go @@ -59,6 +59,7 @@ const testImageFile2 = "./testdata/signature.png" const testRobotoRegularTTFFile = "./testdata/roboto/Roboto-Regular.ttf" const testRobotoBoldTTFFile = "./testdata/roboto/Roboto-Bold.ttf" const testWts11TTFFile = "./testdata/wts11.ttf" +const testImageFileCCITT = "./testdata/p3_0.png" // TODO(peterwilliams97): /tmp/2_p_multi.pdf which is created in this test gives an error message // when opened in Adobe Reader: The font FreeSans contains bad Widths. @@ -166,6 +167,58 @@ func TestImageWithEncoder(t *testing.T) { testWriteAndRender(t, creator, "1_dct.pdf") } +func TestImageWithCCITTFaxEncoder(t *testing.T) { + creator := New() + + file, err := os.Open(testImageFileCCITT) + if err != nil { + t.Errorf("Error opening test image file: %v\n", err) + return + } + + imgF, _, err := goimage.Decode(file) + if err != nil { + file.Close() + t.Errorf("Error decoding test image file: %v\n", err) + return + } + + file.Close() + + modelImg, err := model.ImageHandling.NewImageFromGoImage(imgF) + if err != nil { + t.Errorf("Error creating image from go image: %v\n", err) + return + } + + modelImg.BitsPerComponent = 1 + modelImg.ColorComponents = 1 + + img, err := creator.NewImage(modelImg) + if err != nil { + t.Errorf("Error creating image: %v\n", err) + return + } + + encoder := core.NewCCITTFaxEncoder() + encoder.Columns = int(img.Width()) + img.SetEncoder(encoder) + + img.SetPos(0, 0) + img.ScaleToWidth(612.0) + height := 612.0 * img.Height() / img.Width() + creator.SetPageSize(PageSize{612, height}) + creator.NewPage() + + err = creator.Draw(img) + if err != nil { + t.Errorf("Fail: %v\n", err) + return + } + + testWriteAndRender(t, creator, "1_ccitt.pdf") +} + func TestShapes1(t *testing.T) { creator := New() diff --git a/pdf/core/ccittfaxdecode/testdata/p3_0.png b/pdf/creator/testdata/p3_0.png similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/p3_0.png rename to pdf/creator/testdata/p3_0.png diff --git a/pdf/core/ccittfaxdecode/codes.go b/pdf/internal/ccittfax/codes.go similarity index 99% rename from pdf/core/ccittfaxdecode/codes.go rename to pdf/internal/ccittfax/codes.go index fd0a6ca8..929cad02 100644 --- a/pdf/core/ccittfaxdecode/codes.go +++ b/pdf/internal/ccittfax/codes.go @@ -3,9 +3,10 @@ * file 'LICENSE.md', which is part of this source code package. */ -package ccittfaxdecode +package ccittfax // map pixel run lengths to the encoded bit sequences +// all the bit sequences for all groups could be found here https://www.itu.int/rec/T-REC-T.6-198811-I/en var ( bTerms map[int]code wTerms map[int]code diff --git a/pdf/core/ccittfaxdecode/decode.go b/pdf/internal/ccittfax/decode.go similarity index 93% rename from pdf/core/ccittfaxdecode/decode.go rename to pdf/internal/ccittfax/decode.go index b3daf163..7121a507 100644 --- a/pdf/core/ccittfaxdecode/decode.go +++ b/pdf/internal/ccittfax/decode.go @@ -3,29 +3,31 @@ * file 'LICENSE.md', which is part of this source code package. */ -package ccittfaxdecode +package ccittfax import ( "errors" ) var ( - // ErrEOFBCorrupt is returned when the corrupt EOFB (end-of-block) code is found. - ErrEOFBCorrupt = errors.New("EOFB code is corrupted") - // ErrRTCCorrupt is returned when the corrupt RTC (return-the-carriage) code is found. - ErrRTCCorrupt = errors.New("RTC code is corrupted") - // ErrWrongCodeInHorizontalMode is returned when entered the horizontal mode and unknown bit + // errEOFBCorrupt is returned when the corrupt EOFB (end-of-block) code is found. + errEOFBCorrupt = errors.New("EOFB code is corrupted") + // errRTCCorrupt is returned when the corrupt RTC (return-the-carriage) code is found. + errRTCCorrupt = errors.New("RTC code is corrupted") + // errWrongCodeInHorizontalMode is returned when entered the horizontal mode and unknown bit // sequence met. - ErrWrongCodeInHorizontalMode = errors.New("wrong code in horizontal mode") - // ErrNoEOLFound is returned when the EndOfLine parameter is true in filter but no EOL (end-of-line) met. - ErrNoEOLFound = errors.New("no EOL found while the EndOfLine parameter is true") - // ErrInvalidEOL is returned when the EOL code is corrupt. - ErrInvalidEOL = errors.New("invalid EOL") - // ErrInvalid2DCode is returned when the invalid 2 dimensional code is met. 2 dimensional code + errWrongCodeInHorizontalMode = errors.New("wrong code in horizontal mode") + // errNoEOLFound is returned when the EndOfLine parameter is true in filter but no EOL (end-of-line) met. + errNoEOLFound = errors.New("no EOL found while the EndOfLine parameter is true") + // errInvalidEOL is returned when the EOL code is corrupt. + errInvalidEOL = errors.New("invalid EOL") + // errInvalid2DCode is returned when the invalid 2 dimensional code is met. 2 dimensional code // according to the CCITT reccommendations is one of the following: H, P, V0, V1L, V2L, V3L, V1R, V2R, V3R. - ErrInvalid2DCode = errors.New("invalid 2D code") + errInvalid2DCode = errors.New("invalid 2D code") +) - // trees represent the finite state machine for parsing bit sequences and fetching pixel run lengths +// trees represent the finite state machine for parsing bit sequences and fetching pixel run lengths +var ( whiteTree = &decodingTreeNode{ Val: 255, } @@ -112,7 +114,7 @@ func (e *Encoder) decodeG31D(encoded []byte) ([][]byte, error) { gotEOL, bitPos = tryFetchEOL(encoded, bitPos) if !gotEOL { if e.EndOfLine { - return nil, ErrNoEOLFound + return nil, errNoEOLFound } } else { // 5 EOLs left to fill RTC @@ -124,7 +126,7 @@ func (e *Encoder) decodeG31D(encoded []byte) ([][]byte, error) { break } - return nil, ErrInvalidEOL + return nil, errInvalidEOL } } @@ -176,7 +178,7 @@ byteLoop: if !gotEOL { if e.EndOfLine { - return nil, ErrNoEOLFound + return nil, errNoEOLFound } } @@ -212,7 +214,7 @@ byteLoop: break byteLoop } else { if e.EndOfLine { - return nil, ErrNoEOLFound + return nil, errNoEOLFound } } } @@ -238,31 +240,24 @@ byteLoop: } case v0: pixelsRow, a0 = decodeVerticalMode(pixels, pixelsRow, isWhite, a0, 0) - isWhite = !isWhite case v1r: pixelsRow, a0 = decodeVerticalMode(pixels, pixelsRow, isWhite, a0, 1) - isWhite = !isWhite case v2r: pixelsRow, a0 = decodeVerticalMode(pixels, pixelsRow, isWhite, a0, 2) - isWhite = !isWhite case v3r: pixelsRow, a0 = decodeVerticalMode(pixels, pixelsRow, isWhite, a0, 3) - isWhite = !isWhite case v1l: pixelsRow, a0 = decodeVerticalMode(pixels, pixelsRow, isWhite, a0, -1) - isWhite = !isWhite case v2l: pixelsRow, a0 = decodeVerticalMode(pixels, pixelsRow, isWhite, a0, -2) - isWhite = !isWhite case v3l: pixelsRow, a0 = decodeVerticalMode(pixels, pixelsRow, isWhite, a0, -3) - isWhite = !isWhite } @@ -327,7 +322,7 @@ func (e *Encoder) decodeG4(encoded []byte) ([][]byte, error) { for a0 < e.Columns { twoDimCode, bitPos, ok = fetchNext2DCode(encoded, bitPos) if !ok { - return nil, ErrInvalid2DCode + return nil, errInvalid2DCode } switch twoDimCode { @@ -342,31 +337,24 @@ func (e *Encoder) decodeG4(encoded []byte) ([][]byte, error) { } case v0: pixelsRow, a0 = decodeVerticalMode(pixels, pixelsRow, isWhite, a0, 0) - isWhite = !isWhite case v1r: pixelsRow, a0 = decodeVerticalMode(pixels, pixelsRow, isWhite, a0, 1) - isWhite = !isWhite case v2r: pixelsRow, a0 = decodeVerticalMode(pixels, pixelsRow, isWhite, a0, 2) - isWhite = !isWhite case v3r: pixelsRow, a0 = decodeVerticalMode(pixels, pixelsRow, isWhite, a0, 3) - isWhite = !isWhite case v1l: pixelsRow, a0 = decodeVerticalMode(pixels, pixelsRow, isWhite, a0, -1) - isWhite = !isWhite case v2l: pixelsRow, a0 = decodeVerticalMode(pixels, pixelsRow, isWhite, a0, -2) - isWhite = !isWhite case v3l: pixelsRow, a0 = decodeVerticalMode(pixels, pixelsRow, isWhite, a0, -3) - isWhite = !isWhite } @@ -456,7 +444,7 @@ func decodeHorizontalMode(encoded, pixelsRow []byte, bitPos int, isWhite bool, a // decodeNextRunLen decodes tries to decode the next part of data using the Group3 1-dimensional code. // Returns moved bit position and the pixels row filled with the decoded pixels. The returned bit position -// is not moved if the error occurs. Returns `ErrWrongCodeInHorizontalMode` if none of the 1-dimensional codes found. +// is not moved if the error occurs. Returns `errWrongCodeInHorizontalMode` if none of the 1-dimensional codes found. func decodeNextRunLen(encoded, pixelsRow []byte, bitPos int, isWhite bool) ([]byte, int, error) { startingBitPos := bitPos @@ -472,7 +460,7 @@ func decodeNextRunLen(encoded, pixelsRow []byte, bitPos int, isWhite bool) ([]by } if runLen == -1 { - return pixelsRow, startingBitPos, ErrWrongCodeInHorizontalMode + return pixelsRow, startingBitPos, errWrongCodeInHorizontalMode } return pixelsRow, bitPos, nil @@ -480,7 +468,7 @@ func decodeNextRunLen(encoded, pixelsRow []byte, bitPos int, isWhite bool) ([]by // tryFetchRTC2D tries to fetch the RTC code (0000000000011 X 6) for Group3 mixed (1D/2D) dimensional encoding from // the encoded data. Returns the moved bit position if the code was found. The other way returns the -// the original bit position. The `ErrRTCCorrupt` is returned if the RTC code is corrupt. The RTC code is considered +// the original bit position. The `errRTCCorrupt` is returned if the RTC code is corrupt. The RTC code is considered // corrupt if there are more than one EOL1 code (0000000000011) is met. func tryFetchRTC2D(encoded []byte, bitPos int) (bool, int, error) { startingBitPos := bitPos @@ -492,7 +480,7 @@ func tryFetchRTC2D(encoded []byte, bitPos int) (bool, int, error) { if !gotEOL { if i > 1 { - return false, startingBitPos, ErrRTCCorrupt + return false, startingBitPos, errRTCCorrupt } else { bitPos = startingBitPos @@ -506,7 +494,7 @@ func tryFetchRTC2D(encoded []byte, bitPos int) (bool, int, error) { // tryFetchEOFB tries to fetch the EOFB code (000000000001 X 2) for Group4 encoding from // the encoded data. Returns the moved bit position if the code was found. The other way returns the -// the original bit position. The `ErrEOFBCorrupt` is returned if the EOFB code is corrupt. The EOFB code is considered +// the original bit position. The `errEOFBCorrupt` is returned if the EOFB code is corrupt. The EOFB code is considered // corrupt if there is a single EOL code (000000000001). func tryFetchEOFB(encoded []byte, bitPos int) (bool, int, error) { startingBitPos := bitPos @@ -520,7 +508,7 @@ func tryFetchEOFB(encoded []byte, bitPos int) (bool, int, error) { if gotEOL { return true, bitPos, nil } else { - return false, startingBitPos, ErrEOFBCorrupt + return false, startingBitPos, errEOFBCorrupt } } diff --git a/pdf/core/ccittfaxdecode/decode_test.go b/pdf/internal/ccittfax/decode_test.go similarity index 97% rename from pdf/core/ccittfaxdecode/decode_test.go rename to pdf/internal/ccittfax/decode_test.go index bc614b09..59ce4d35 100644 --- a/pdf/core/ccittfaxdecode/decode_test.go +++ b/pdf/internal/ccittfax/decode_test.go @@ -3,7 +3,7 @@ * file 'LICENSE.md', which is part of this source code package. */ -package ccittfaxdecode +package ccittfax import ( "image" @@ -32,6 +32,7 @@ func TestDecodeNextRunLen(t *testing.T) { Want testResult } + // Calculated test data based on the reference documentation. tests := []testData{ { Encoded: []byte{1, 28, 2}, @@ -179,7 +180,7 @@ func TestDecodeNextRunLen(t *testing.T) { Want: testResult{ PixelsRow: nil, BitPos: 0, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -190,7 +191,7 @@ func TestDecodeNextRunLen(t *testing.T) { Want: testResult{ PixelsRow: nil, BitPos: 2, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -201,7 +202,7 @@ func TestDecodeNextRunLen(t *testing.T) { Want: testResult{ PixelsRow: nil, BitPos: 0, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -212,7 +213,7 @@ func TestDecodeNextRunLen(t *testing.T) { Want: testResult{ PixelsRow: nil, BitPos: 2, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -223,7 +224,7 @@ func TestDecodeNextRunLen(t *testing.T) { Want: testResult{ PixelsRow: nil, BitPos: 0, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -234,7 +235,7 @@ func TestDecodeNextRunLen(t *testing.T) { Want: testResult{ PixelsRow: nil, BitPos: 2, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -245,7 +246,7 @@ func TestDecodeNextRunLen(t *testing.T) { Want: testResult{ PixelsRow: nil, BitPos: 0, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -256,7 +257,7 @@ func TestDecodeNextRunLen(t *testing.T) { Want: testResult{ PixelsRow: nil, BitPos: 2, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -267,7 +268,7 @@ func TestDecodeNextRunLen(t *testing.T) { Want: testResult{ PixelsRow: nil, BitPos: 0, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -278,7 +279,7 @@ func TestDecodeNextRunLen(t *testing.T) { Want: testResult{ PixelsRow: nil, BitPos: 2, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -289,7 +290,7 @@ func TestDecodeNextRunLen(t *testing.T) { Want: testResult{ PixelsRow: nil, BitPos: 0, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -300,7 +301,7 @@ func TestDecodeNextRunLen(t *testing.T) { Want: testResult{ PixelsRow: nil, BitPos: 2, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, } @@ -415,7 +416,7 @@ func TestDecodeHorizontalMode(t *testing.T) { PixelsRow: nil, BitPos: 0, A0: 0, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -428,7 +429,7 @@ func TestDecodeHorizontalMode(t *testing.T) { PixelsRow: nil, BitPos: 2, A0: 120, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -441,7 +442,7 @@ func TestDecodeHorizontalMode(t *testing.T) { PixelsRow: nil, BitPos: 0, A0: 10, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -454,7 +455,7 @@ func TestDecodeHorizontalMode(t *testing.T) { PixelsRow: nil, BitPos: 2, A0: 13, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -467,7 +468,7 @@ func TestDecodeHorizontalMode(t *testing.T) { PixelsRow: nil, BitPos: 0, A0: 23, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -480,7 +481,7 @@ func TestDecodeHorizontalMode(t *testing.T) { PixelsRow: nil, BitPos: 2, A0: 34, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -493,7 +494,7 @@ func TestDecodeHorizontalMode(t *testing.T) { PixelsRow: nil, BitPos: 0, A0: 134, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -506,7 +507,7 @@ func TestDecodeHorizontalMode(t *testing.T) { PixelsRow: nil, BitPos: 2, A0: 35, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -519,7 +520,7 @@ func TestDecodeHorizontalMode(t *testing.T) { PixelsRow: nil, BitPos: 0, A0: 876, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -532,7 +533,7 @@ func TestDecodeHorizontalMode(t *testing.T) { PixelsRow: nil, BitPos: 2, A0: 738, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -545,7 +546,7 @@ func TestDecodeHorizontalMode(t *testing.T) { PixelsRow: nil, BitPos: 0, A0: 283, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -558,7 +559,7 @@ func TestDecodeHorizontalMode(t *testing.T) { PixelsRow: nil, BitPos: 2, A0: 29, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, { @@ -573,7 +574,7 @@ func TestDecodeHorizontalMode(t *testing.T) { white, white, white}, BitPos: 16, A0: 0, - Err: ErrWrongCodeInHorizontalMode, + Err: errWrongCodeInHorizontalMode, }, }, } @@ -2005,7 +2006,7 @@ func TestTryFetchEOFB(t *testing.T) { Want: testResult{ OK: false, BitPos: 0, - Err: ErrEOFBCorrupt, + Err: errEOFBCorrupt, }, }, { @@ -2099,7 +2100,7 @@ func TestTryFetchRTC2D(t *testing.T) { Want: testResult{ OK: false, BitPos: 0, - Err: ErrRTCCorrupt, + Err: errRTCCorrupt, }, }, { @@ -2108,7 +2109,7 @@ func TestTryFetchRTC2D(t *testing.T) { Want: testResult{ OK: false, BitPos: 2, - Err: ErrRTCCorrupt, + Err: errRTCCorrupt, }, }, { @@ -2117,7 +2118,7 @@ func TestTryFetchRTC2D(t *testing.T) { Want: testResult{ OK: false, BitPos: 0, - Err: ErrRTCCorrupt, + Err: errRTCCorrupt, }, }, { @@ -2126,7 +2127,7 @@ func TestTryFetchRTC2D(t *testing.T) { Want: testResult{ OK: false, BitPos: 2, - Err: ErrRTCCorrupt, + Err: errRTCCorrupt, }, }, { @@ -2135,7 +2136,7 @@ func TestTryFetchRTC2D(t *testing.T) { Want: testResult{ OK: false, BitPos: 0, - Err: ErrRTCCorrupt, + Err: errRTCCorrupt, }, }, { @@ -2144,7 +2145,7 @@ func TestTryFetchRTC2D(t *testing.T) { Want: testResult{ OK: false, BitPos: 2, - Err: ErrRTCCorrupt, + Err: errRTCCorrupt, }, }, { @@ -2153,7 +2154,7 @@ func TestTryFetchRTC2D(t *testing.T) { Want: testResult{ OK: false, BitPos: 0, - Err: ErrRTCCorrupt, + Err: errRTCCorrupt, }, }, { @@ -2162,7 +2163,7 @@ func TestTryFetchRTC2D(t *testing.T) { Want: testResult{ OK: false, BitPos: 2, - Err: ErrRTCCorrupt, + Err: errRTCCorrupt, }, }, { diff --git a/pdf/core/ccittfaxdecode/decoding_tree.go b/pdf/internal/ccittfax/decoding_tree.go similarity index 98% rename from pdf/core/ccittfaxdecode/decoding_tree.go rename to pdf/internal/ccittfax/decoding_tree.go index e7027660..f8f27909 100644 --- a/pdf/core/ccittfaxdecode/decoding_tree.go +++ b/pdf/internal/ccittfax/decoding_tree.go @@ -3,7 +3,7 @@ * file 'LICENSE.md', which is part of this source code package. */ -package ccittfaxdecode +package ccittfax // decodingTreeNode is a node of a tree which represents the finite state machine for // searching the decoded pixel run lengths having the bit sequence. `Val` is a single bit diff --git a/pdf/core/ccittfaxdecode/decoding_tree_test.go b/pdf/internal/ccittfax/decoding_tree_test.go similarity index 99% rename from pdf/core/ccittfaxdecode/decoding_tree_test.go rename to pdf/internal/ccittfax/decoding_tree_test.go index a7a6fdb7..082e4fab 100644 --- a/pdf/core/ccittfaxdecode/decoding_tree_test.go +++ b/pdf/internal/ccittfax/decoding_tree_test.go @@ -3,7 +3,7 @@ * file 'LICENSE.md', which is part of this source code package. */ -package ccittfaxdecode +package ccittfax import ( "testing" diff --git a/pdf/core/ccittfaxdecode/doc.go b/pdf/internal/ccittfax/doc.go similarity index 71% rename from pdf/core/ccittfaxdecode/doc.go rename to pdf/internal/ccittfax/doc.go index 73fc2a8e..29dbb42c 100644 --- a/pdf/core/ccittfaxdecode/doc.go +++ b/pdf/internal/ccittfax/doc.go @@ -3,7 +3,7 @@ * file 'LICENSE.md', which is part of this source code package. */ -// Package ccittfaxdecode defines and implements the Group3 and Group4 +// Package ccittfax defines and implements the Group3 and Group4 // facsimile (fax) encoding and decoding according to the CCITT recommendations // T.4 and T.6. -package ccittfaxdecode +package ccittfax diff --git a/pdf/core/ccittfaxdecode/encoder.go b/pdf/internal/ccittfax/encoder.go similarity index 99% rename from pdf/core/ccittfaxdecode/encoder.go rename to pdf/internal/ccittfax/encoder.go index c45de836..a8ac5e5e 100644 --- a/pdf/core/ccittfaxdecode/encoder.go +++ b/pdf/internal/ccittfax/encoder.go @@ -3,7 +3,7 @@ * file 'LICENSE.md', which is part of this source code package. */ -package ccittfaxdecode +package ccittfax import ( "math" @@ -68,7 +68,6 @@ func (e *Encoder) encodeG31D(pixels [][]byte) []byte { } encodedRow, bitPos := encodeRow1D(pixels[i], prevBitPos, eol) - encoded = e.appendEncodedRow(encoded, encodedRow, prevBitPos) if e.EncodedByteAlign { @@ -82,7 +81,6 @@ func (e *Encoder) encodeG31D(pixels [][]byte) []byte { if e.EndOfBlock { // put RTC encodedRTC, _ := encodeRTC(prevBitPos) - encoded = e.appendEncodedRow(encoded, encodedRTC, prevBitPos) } @@ -210,7 +208,6 @@ func (e *Encoder) encodeG4(pixelsToEncode [][]byte) []byte { } encoded = e.appendEncodedRow(encoded, encodedRow, prevBitPos) - if e.EncodedByteAlign { // align to byte border bitPos = 0 @@ -222,7 +219,6 @@ func (e *Encoder) encodeG4(pixelsToEncode [][]byte) []byte { if e.EndOfBlock { // put EOFB encodedEOFB, _ := encodeEOFB(prevBitPos) - encoded = e.appendEncodedRow(encoded, encodedEOFB, prevBitPos) } diff --git a/pdf/core/ccittfaxdecode/encoder_test.go b/pdf/internal/ccittfax/encoder_test.go similarity index 99% rename from pdf/core/ccittfaxdecode/encoder_test.go rename to pdf/internal/ccittfax/encoder_test.go index 79528ed9..09a61e5b 100644 --- a/pdf/core/ccittfaxdecode/encoder_test.go +++ b/pdf/internal/ccittfax/encoder_test.go @@ -3,11 +3,10 @@ * file 'LICENSE.md', which is part of this source code package. */ -package ccittfaxdecode +package ccittfax import ( - "image" - "image/png" + _ "image/png" "io/ioutil" "os" "testing" @@ -20,8 +19,6 @@ func TestEncode(t *testing.T) { WantFilePath string } - image.RegisterFormat("png", "png", png.Decode, png.DecodeConfig) - pixels, err := getPixels(testDataPath + "p3_0.png") if err != nil { t.Fatalf("Error getting pixels from image: %v\n", err) diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-Aligned-EOFB.gr4 b/pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-Aligned-EOFB.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-Aligned-EOFB.gr4 rename to pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-Aligned-EOFB.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-Aligned-Rows3295.gr4 b/pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-Aligned-Rows3295.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-Aligned-Rows3295.gr4 rename to pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-Aligned-Rows3295.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-EOFB.gr4 b/pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-EOFB.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-EOFB.gr4 rename to pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-EOFB.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-EOL-Aligned-EOFB.gr4 b/pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-EOL-Aligned-EOFB.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-EOL-Aligned-EOFB.gr4 rename to pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-EOL-Aligned-EOFB.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-EOL-Aligned-Rows3295.gr4 b/pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-EOL-Aligned-Rows3295.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-EOL-Aligned-Rows3295.gr4 rename to pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-EOL-Aligned-Rows3295.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-EOL-EOFB.gr4 b/pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-EOL-EOFB.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-EOL-EOFB.gr4 rename to pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-EOL-EOFB.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-EOL-Rows3295.gr4 b/pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-EOL-Rows3295.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-EOL-Rows3295.gr4 rename to pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-EOL-Rows3295.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-Rows3295.gr4 b/pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-Rows3295.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K-1-Columns2560-Rows3295.gr4 rename to pdf/internal/ccittfax/testdata/BlackIs1-K-1-Columns2560-Rows3295.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-Aligned-EOFB.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-Aligned-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-Aligned-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-Aligned-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-Aligned-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-Aligned-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-Aligned-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-Aligned-Rows3295.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-EOFB.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-EOL-Aligned-EOFB.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-EOL-Aligned-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-EOL-Aligned-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-EOL-Aligned-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-EOL-Aligned-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-EOL-Aligned-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-EOL-Aligned-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-EOL-Aligned-Rows3295.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-EOL-EOFB.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-EOL-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-EOL-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-EOL-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-EOL-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-EOL-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-EOL-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-EOL-Rows3295.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K0-Columns2560-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K0-Columns2560-Rows3295.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-Aligned-EOFB.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-Aligned-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-Aligned-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-Aligned-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-Aligned-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-Aligned-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-Aligned-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-Aligned-Rows3295.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-EOFB.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-EOL-Aligned-EOFB.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-EOL-Aligned-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-EOL-Aligned-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-EOL-Aligned-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-EOL-Aligned-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-EOL-Aligned-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-EOL-Aligned-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-EOL-Aligned-Rows3295.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-EOL-EOFB.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-EOL-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-EOL-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-EOL-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-EOL-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-EOL-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-EOL-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-EOL-Rows3295.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/BlackIs1-K4-Columns2560-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/BlackIs1-K4-Columns2560-Rows3295.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-Aligned-EOFB.gr4 b/pdf/internal/ccittfax/testdata/K-1-Columns2560-Aligned-EOFB.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-Aligned-EOFB.gr4 rename to pdf/internal/ccittfax/testdata/K-1-Columns2560-Aligned-EOFB.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-Aligned-Rows3295.gr4 b/pdf/internal/ccittfax/testdata/K-1-Columns2560-Aligned-Rows3295.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-Aligned-Rows3295.gr4 rename to pdf/internal/ccittfax/testdata/K-1-Columns2560-Aligned-Rows3295.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-EOFB.gr4 b/pdf/internal/ccittfax/testdata/K-1-Columns2560-EOFB.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-EOFB.gr4 rename to pdf/internal/ccittfax/testdata/K-1-Columns2560-EOFB.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-EOL-Aligned-EOFB.gr4 b/pdf/internal/ccittfax/testdata/K-1-Columns2560-EOL-Aligned-EOFB.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-EOL-Aligned-EOFB.gr4 rename to pdf/internal/ccittfax/testdata/K-1-Columns2560-EOL-Aligned-EOFB.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-EOL-Aligned-Rows3295.gr4 b/pdf/internal/ccittfax/testdata/K-1-Columns2560-EOL-Aligned-Rows3295.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-EOL-Aligned-Rows3295.gr4 rename to pdf/internal/ccittfax/testdata/K-1-Columns2560-EOL-Aligned-Rows3295.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-EOL-EOFB.gr4 b/pdf/internal/ccittfax/testdata/K-1-Columns2560-EOL-EOFB.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-EOL-EOFB.gr4 rename to pdf/internal/ccittfax/testdata/K-1-Columns2560-EOL-EOFB.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-EOL-Rows3295.gr4 b/pdf/internal/ccittfax/testdata/K-1-Columns2560-EOL-Rows3295.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-EOL-Rows3295.gr4 rename to pdf/internal/ccittfax/testdata/K-1-Columns2560-EOL-Rows3295.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-Rows3295.gr4 b/pdf/internal/ccittfax/testdata/K-1-Columns2560-Rows3295.gr4 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K-1-Columns2560-Rows3295.gr4 rename to pdf/internal/ccittfax/testdata/K-1-Columns2560-Rows3295.gr4 diff --git a/pdf/core/ccittfaxdecode/testdata/K0-Columns2560-Aligned-EOFB.gr3 b/pdf/internal/ccittfax/testdata/K0-Columns2560-Aligned-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K0-Columns2560-Aligned-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/K0-Columns2560-Aligned-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K0-Columns2560-Aligned-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/K0-Columns2560-Aligned-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K0-Columns2560-Aligned-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/K0-Columns2560-Aligned-Rows3295.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K0-Columns2560-EOFB.gr3 b/pdf/internal/ccittfax/testdata/K0-Columns2560-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K0-Columns2560-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/K0-Columns2560-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K0-Columns2560-EOL-Aligned-EOFB.gr3 b/pdf/internal/ccittfax/testdata/K0-Columns2560-EOL-Aligned-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K0-Columns2560-EOL-Aligned-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/K0-Columns2560-EOL-Aligned-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K0-Columns2560-EOL-Aligned-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/K0-Columns2560-EOL-Aligned-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K0-Columns2560-EOL-Aligned-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/K0-Columns2560-EOL-Aligned-Rows3295.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K0-Columns2560-EOL-EOFB.gr3 b/pdf/internal/ccittfax/testdata/K0-Columns2560-EOL-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K0-Columns2560-EOL-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/K0-Columns2560-EOL-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K0-Columns2560-EOL-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/K0-Columns2560-EOL-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K0-Columns2560-EOL-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/K0-Columns2560-EOL-Rows3295.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K0-Columns2560-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/K0-Columns2560-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K0-Columns2560-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/K0-Columns2560-Rows3295.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K4-Columns2560-Aligned-EOFB.gr3 b/pdf/internal/ccittfax/testdata/K4-Columns2560-Aligned-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K4-Columns2560-Aligned-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/K4-Columns2560-Aligned-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K4-Columns2560-Aligned-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/K4-Columns2560-Aligned-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K4-Columns2560-Aligned-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/K4-Columns2560-Aligned-Rows3295.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K4-Columns2560-EOFB.gr3 b/pdf/internal/ccittfax/testdata/K4-Columns2560-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K4-Columns2560-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/K4-Columns2560-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K4-Columns2560-EOL-Aligned-EOFB.gr3 b/pdf/internal/ccittfax/testdata/K4-Columns2560-EOL-Aligned-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K4-Columns2560-EOL-Aligned-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/K4-Columns2560-EOL-Aligned-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K4-Columns2560-EOL-Aligned-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/K4-Columns2560-EOL-Aligned-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K4-Columns2560-EOL-Aligned-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/K4-Columns2560-EOL-Aligned-Rows3295.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K4-Columns2560-EOL-EOFB.gr3 b/pdf/internal/ccittfax/testdata/K4-Columns2560-EOL-EOFB.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K4-Columns2560-EOL-EOFB.gr3 rename to pdf/internal/ccittfax/testdata/K4-Columns2560-EOL-EOFB.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K4-Columns2560-EOL-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/K4-Columns2560-EOL-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K4-Columns2560-EOL-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/K4-Columns2560-EOL-Rows3295.gr3 diff --git a/pdf/core/ccittfaxdecode/testdata/K4-Columns2560-Rows3295.gr3 b/pdf/internal/ccittfax/testdata/K4-Columns2560-Rows3295.gr3 similarity index 100% rename from pdf/core/ccittfaxdecode/testdata/K4-Columns2560-Rows3295.gr3 rename to pdf/internal/ccittfax/testdata/K4-Columns2560-Rows3295.gr3 diff --git a/pdf/internal/ccittfax/testdata/p3_0.png b/pdf/internal/ccittfax/testdata/p3_0.png new file mode 100644 index 00000000..58e3ff5f Binary files /dev/null and b/pdf/internal/ccittfax/testdata/p3_0.png differ