mirror of
https://github.com/unidoc/unipdf.git
synced 2025-04-27 13:48:51 +08:00
365 lines
7.0 KiB
Go
365 lines
7.0 KiB
Go
![]() |
/*
|
||
|
* This file is subject to the terms and conditions defined in
|
||
|
* file 'LICENSE.md', which is part of this source code package.
|
||
|
*/
|
||
|
|
||
|
package model
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/unidoc/unidoc/common"
|
||
|
"github.com/unidoc/unidoc/pdf/core"
|
||
|
)
|
||
|
|
||
|
// This test file contains multiple tests to generate PDFs from existing Pdf files. The outputs are written into /tmp as files. The files
|
||
|
// themselves need to be observed to check for correctness as we don't have a good way to automatically check
|
||
|
// if every detail is correct.
|
||
|
|
||
|
func init() {
|
||
|
common.SetLogger(common.NewConsoleLogger(common.LogLevelDebug))
|
||
|
}
|
||
|
|
||
|
const testPdfFile1 = "./testdata/minimal.pdf"
|
||
|
const testPdfLoremIpsumFile = "./testdata/lorem.pdf"
|
||
|
const testPdf3pages = "./testdata/pages3.pdf"
|
||
|
|
||
|
const imgPdfFile1 = "./testdata/img1-1.pdf"
|
||
|
const imgPdfFile2 = "./testdata/img1-2.pdf"
|
||
|
|
||
|
// source http://foersom.com/net/HowTo/data/OoPdfFormExample.pdf
|
||
|
const testPdfAcroFormFile1 = "./testdata/OoPdfFormExample.pdf"
|
||
|
|
||
|
func tempFile(name string) string {
|
||
|
return filepath.Join(os.TempDir(), name)
|
||
|
}
|
||
|
|
||
|
func TestAppenderAddPage(t *testing.T) {
|
||
|
f1, err := os.Open(testPdfLoremIpsumFile)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
defer f1.Close()
|
||
|
pdf1, err := NewPdfReader(f1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
f2, err := os.Open(testPdfFile1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
defer f2.Close()
|
||
|
pdf2, err := NewPdfReader(f2)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
appender, err := NewPdfAppender(pdf1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
appender.AddPages(pdf1.PageList...)
|
||
|
|
||
|
appender.AddPages(pdf2.PageList...)
|
||
|
appender.AddPages(pdf2.PageList...)
|
||
|
|
||
|
err = appender.WriteToFile(tempFile("appender_add_page_1.pdf"))
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestAppenderAddPage2(t *testing.T) {
|
||
|
f1, err := os.Open(testPdfLoremIpsumFile)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
defer f1.Close()
|
||
|
pdf1, err := NewPdfReader(f1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
f2, err := os.Open(testPdfAcroFormFile1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
defer f2.Close()
|
||
|
pdf2, err := NewPdfReader(f2)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
appender, err := NewPdfAppender(pdf1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
appender.AddPages(pdf2.PageList...)
|
||
|
|
||
|
appender.ReplaceAcroForm(pdf2.AcroForm)
|
||
|
|
||
|
err = appender.WriteToFile(tempFile("appender_add_page_2.pdf"))
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestAppenderRemovePage(t *testing.T) {
|
||
|
f1, err := os.Open(testPdf3pages)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
defer f1.Close()
|
||
|
pdf1, err := NewPdfReader(f1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
appender, err := NewPdfAppender(pdf1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
appender.RemovePage(1)
|
||
|
appender.RemovePage(2)
|
||
|
|
||
|
err = appender.WriteToFile(tempFile("appender_remove_page_1.pdf"))
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestAppenderReplacePage(t *testing.T) {
|
||
|
f1, err := os.Open(testPdf3pages)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
defer f1.Close()
|
||
|
pdf1, err := NewPdfReader(f1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
f2, err := os.Open(testPdfFile1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
defer f2.Close()
|
||
|
pdf2, err := NewPdfReader(f2)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
appender, err := NewPdfAppender(pdf1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
appender.ReplacePage(1, pdf1.PageList[1])
|
||
|
appender.ReplacePage(3, pdf2.PageList[0])
|
||
|
|
||
|
err = appender.WriteToFile(tempFile("appender_replace_page_1.pdf"))
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestAppenderAddAnnotation(t *testing.T) {
|
||
|
f1, err := os.Open(testPdf3pages)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
defer f1.Close()
|
||
|
pdf1, err := NewPdfReader(f1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
appender, err := NewPdfAppender(pdf1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
page := pdf1.PageList[0]
|
||
|
annotation := NewPdfAnnotationSquare()
|
||
|
rect := PdfRectangle{Ury: 250.0, Urx: 150.0, Lly: 50.0, Llx: 50.0}
|
||
|
annotation.Rect = rect.ToPdfObject()
|
||
|
annotation.IC = core.MakeArrayFromFloats([]float64{4.0, 0.0, 0.3})
|
||
|
annotation.CA = core.MakeFloat(0.5)
|
||
|
|
||
|
page.Annotations = append(page.Annotations, annotation.PdfAnnotation)
|
||
|
|
||
|
appender.ReplacePage(1, page)
|
||
|
|
||
|
err = appender.WriteToFile(tempFile("appender_add_annotation_1.pdf"))
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestAppenderMergePage(t *testing.T) {
|
||
|
f1, err := os.Open(testPdf3pages)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
defer f1.Close()
|
||
|
pdf1, err := NewPdfReader(f1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
f2, err := os.Open(testPdfFile1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
defer f2.Close()
|
||
|
pdf2, err := NewPdfReader(f2)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
appender, err := NewPdfAppender(pdf1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
err = appender.MergePageWith(1, pdf2.PageList[0])
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
err = appender.WriteToFile(tempFile("appender_merge_page_1.pdf"))
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestAppenderMergePage2(t *testing.T) {
|
||
|
f1, err := os.Open(imgPdfFile1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
defer f1.Close()
|
||
|
|
||
|
pdf1, err := NewPdfReader(f1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
f2, err := os.Open(imgPdfFile2)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
defer f2.Close()
|
||
|
|
||
|
pdf2, err := NewPdfReader(f2)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
appender, err := NewPdfAppender(pdf1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
err = appender.MergePageWith(1, pdf2.PageList[0])
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
appender.AddPages(pdf2.PageList...)
|
||
|
|
||
|
err = appender.WriteToFile(tempFile("appender_merge_page_2.pdf"))
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestAppenderMergePage3(t *testing.T) {
|
||
|
f1, err := os.Open(testPdfFile1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
defer f1.Close()
|
||
|
pdf1, err := NewPdfReader(f1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
f2, err := os.Open(testPdfLoremIpsumFile)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
defer f2.Close()
|
||
|
|
||
|
pdf2, err := NewPdfReader(f2)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
appender, err := NewPdfAppender(pdf1)
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
err = appender.MergePageWith(1, pdf2.PageList[0])
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
err = appender.WriteToFile(tempFile("appender_merge_page_3.pdf"))
|
||
|
if err != nil {
|
||
|
t.Errorf("Fail: %v\n", err)
|
||
|
return
|
||
|
}
|
||
|
}
|