mirror of
https://github.com/unidoc/unipdf.git
synced 2025-04-29 13:48:54 +08:00
104 lines
2.0 KiB
Go
104 lines
2.0 KiB
Go
![]() |
package extractor
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/unidoc/unidoc/pdf/model"
|
||
|
)
|
||
|
|
||
|
// TODO(gunnsth): Create test cases, specifically:
|
||
|
// 1. Basic test (one XObject image at specific position).
|
||
|
// 2. Test transform matrix handling (nested cms).
|
||
|
// 3. Inline image extraction.
|
||
|
// 4. Check caching.
|
||
|
// 5. Benchmark.
|
||
|
|
||
|
func loadPageFromPDFFile(filePath string, pageNum int) (*model.PdfPage, error) {
|
||
|
f, err := os.Open(filePath)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
defer f.Close()
|
||
|
|
||
|
pdfReader, err := model.NewPdfReader(f)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return pdfReader.GetPage(pageNum)
|
||
|
}
|
||
|
|
||
|
func TestImageExtractionBasic(t *testing.T) {
|
||
|
type expectedImage struct {
|
||
|
X float64
|
||
|
Y float64
|
||
|
Width float64
|
||
|
Height float64
|
||
|
Angle int
|
||
|
}
|
||
|
|
||
|
testcases := []struct {
|
||
|
Name string
|
||
|
PageNum int
|
||
|
Path string
|
||
|
Expected []ImageMark
|
||
|
}{
|
||
|
{
|
||
|
"basic xobject",
|
||
|
1,
|
||
|
"./testdata/basic_xobject.pdf",
|
||
|
[]ImageMark{
|
||
|
{
|
||
|
Image: nil,
|
||
|
X: 0,
|
||
|
Y: 294.865385,
|
||
|
Width: 612,
|
||
|
Height: 197.134615,
|
||
|
Angle: 0,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, tcase := range testcases {
|
||
|
page, err := loadPageFromPDFFile(tcase.Path, tcase.PageNum)
|
||
|
if err != nil {
|
||
|
t.Fatalf("Error: %v", err)
|
||
|
}
|
||
|
pageExtractor, err := New(page)
|
||
|
if err != nil {
|
||
|
t.Fatalf("Error: %v", err)
|
||
|
}
|
||
|
pageImages, err := pageExtractor.ExtractPageImages()
|
||
|
if err != nil {
|
||
|
t.Fatalf("Error: %v", err)
|
||
|
}
|
||
|
|
||
|
if len(pageImages.Images) != len(tcase.Expected) {
|
||
|
t.Fatalf("%d != %d", len(pageImages.Images), len(tcase.Expected))
|
||
|
}
|
||
|
|
||
|
for i, img := range pageImages.Images {
|
||
|
img.Image = nil // Discard image data.
|
||
|
if !reflect.DeepEqual(img, tcase.Expected[i]) {
|
||
|
t.Fatalf("i: %d - %#v != %#v", i, img, tcase.Expected[i])
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Test position extraction with nest transform matrices.
|
||
|
func TestImageExtractionNestedCM(t *testing.T) {
|
||
|
}
|
||
|
|
||
|
func TestImageExtractionInline(t *testing.T) {
|
||
|
}
|
||
|
|
||
|
func TestImageExtractionCaching(t *testing.T) {
|
||
|
}
|
||
|
|
||
|
func BenchmarkImageExtraction(b *testing.B) {
|
||
|
}
|