diff --git a/internal/commons/generated.go b/internal/commons/generated.go index ffacb3af..f5adeebb 100644 --- a/internal/commons/generated.go +++ b/internal/commons/generated.go @@ -226,6 +226,7 @@ type Pdfium interface { FPDFPageObj_GetLineCap(*requests.FPDFPageObj_GetLineCap) (*responses.FPDFPageObj_GetLineCap, error) FPDFPageObj_GetLineJoin(*requests.FPDFPageObj_GetLineJoin) (*responses.FPDFPageObj_GetLineJoin, error) FPDFPageObj_GetMark(*requests.FPDFPageObj_GetMark) (*responses.FPDFPageObj_GetMark, error) + FPDFPageObj_GetMarkedContentID(*requests.FPDFPageObj_GetMarkedContentID) (*responses.FPDFPageObj_GetMarkedContentID, error) FPDFPageObj_GetMatrix(*requests.FPDFPageObj_GetMatrix) (*responses.FPDFPageObj_GetMatrix, error) FPDFPageObj_GetRotatedBounds(*requests.FPDFPageObj_GetRotatedBounds) (*responses.FPDFPageObj_GetRotatedBounds, error) FPDFPageObj_GetStrokeColor(*requests.FPDFPageObj_GetStrokeColor) (*responses.FPDFPageObj_GetStrokeColor, error) @@ -246,6 +247,7 @@ type Pdfium interface { FPDFPageObj_SetStrokeWidth(*requests.FPDFPageObj_SetStrokeWidth) (*responses.FPDFPageObj_SetStrokeWidth, error) FPDFPageObj_Transform(*requests.FPDFPageObj_Transform) (*responses.FPDFPageObj_Transform, error) FPDFPageObj_TransformClipPath(*requests.FPDFPageObj_TransformClipPath) (*responses.FPDFPageObj_TransformClipPath, error) + FPDFPageObj_TransformF(*requests.FPDFPageObj_TransformF) (*responses.FPDFPageObj_TransformF, error) FPDFPage_CloseAnnot(*requests.FPDFPage_CloseAnnot) (*responses.FPDFPage_CloseAnnot, error) FPDFPage_CountObjects(*requests.FPDFPage_CountObjects) (*responses.FPDFPage_CountObjects, error) FPDFPage_CreateAnnot(*requests.FPDFPage_CreateAnnot) (*responses.FPDFPage_CreateAnnot, error) @@ -2604,6 +2606,16 @@ func (g *PdfiumRPC) FPDFPageObj_GetMark(request *requests.FPDFPageObj_GetMark) ( return resp, nil } +func (g *PdfiumRPC) FPDFPageObj_GetMarkedContentID(request *requests.FPDFPageObj_GetMarkedContentID) (*responses.FPDFPageObj_GetMarkedContentID, error) { + resp := &responses.FPDFPageObj_GetMarkedContentID{} + err := g.client.Call("Plugin.FPDFPageObj_GetMarkedContentID", request, resp) + if err != nil { + return nil, err + } + + return resp, nil +} + func (g *PdfiumRPC) FPDFPageObj_GetMatrix(request *requests.FPDFPageObj_GetMatrix) (*responses.FPDFPageObj_GetMatrix, error) { resp := &responses.FPDFPageObj_GetMatrix{} err := g.client.Call("Plugin.FPDFPageObj_GetMatrix", request, resp) @@ -2804,6 +2816,16 @@ func (g *PdfiumRPC) FPDFPageObj_TransformClipPath(request *requests.FPDFPageObj_ return resp, nil } +func (g *PdfiumRPC) FPDFPageObj_TransformF(request *requests.FPDFPageObj_TransformF) (*responses.FPDFPageObj_TransformF, error) { + resp := &responses.FPDFPageObj_TransformF{} + err := g.client.Call("Plugin.FPDFPageObj_TransformF", request, resp) + if err != nil { + return nil, err + } + + return resp, nil +} + func (g *PdfiumRPC) FPDFPage_CloseAnnot(request *requests.FPDFPage_CloseAnnot) (*responses.FPDFPage_CloseAnnot, error) { resp := &responses.FPDFPage_CloseAnnot{} err := g.client.Call("Plugin.FPDFPage_CloseAnnot", request, resp) @@ -8806,6 +8828,24 @@ func (s *PdfiumRPCServer) FPDFPageObj_GetMark(request *requests.FPDFPageObj_GetM return nil } +func (s *PdfiumRPCServer) FPDFPageObj_GetMarkedContentID(request *requests.FPDFPageObj_GetMarkedContentID, resp *responses.FPDFPageObj_GetMarkedContentID) (err error) { + defer func() { + if panicError := recover(); panicError != nil { + err = fmt.Errorf("panic occurred in %s: %v", "FPDFPageObj_GetMarkedContentID", panicError) + } + }() + + implResp, err := s.Impl.FPDFPageObj_GetMarkedContentID(request) + if err != nil { + return err + } + + // Overwrite the target address of resp to the target address of implResp. + *resp = *implResp + + return nil +} + func (s *PdfiumRPCServer) FPDFPageObj_GetMatrix(request *requests.FPDFPageObj_GetMatrix, resp *responses.FPDFPageObj_GetMatrix) (err error) { defer func() { if panicError := recover(); panicError != nil { @@ -9166,6 +9206,24 @@ func (s *PdfiumRPCServer) FPDFPageObj_TransformClipPath(request *requests.FPDFPa return nil } +func (s *PdfiumRPCServer) FPDFPageObj_TransformF(request *requests.FPDFPageObj_TransformF, resp *responses.FPDFPageObj_TransformF) (err error) { + defer func() { + if panicError := recover(); panicError != nil { + err = fmt.Errorf("panic occurred in %s: %v", "FPDFPageObj_TransformF", panicError) + } + }() + + implResp, err := s.Impl.FPDFPageObj_TransformF(request) + if err != nil { + return err + } + + // Overwrite the target address of resp to the target address of implResp. + *resp = *implResp + + return nil +} + func (s *PdfiumRPCServer) FPDFPage_CloseAnnot(request *requests.FPDFPage_CloseAnnot, resp *responses.FPDFPage_CloseAnnot) (err error) { defer func() { if panicError := recover(); panicError != nil { diff --git a/internal/implementation_cgo/fpdf_edit_experimental.go b/internal/implementation_cgo/fpdf_edit_experimental.go index e5a50e52..6e8681c0 100644 --- a/internal/implementation_cgo/fpdf_edit_experimental.go +++ b/internal/implementation_cgo/fpdf_edit_experimental.go @@ -43,6 +43,39 @@ func (p *PdfiumImplementation) FPDFPage_RemoveObject(request *requests.FPDFPage_ return &responses.FPDFPage_RemoveObject{}, nil } +// FPDFPageObj_TransformF transforms the page object by the given matrix. +// The matrix is composed as: +// +// |a c e| +// |b d f| +// +// and can be used to scale, rotate, shear and translate the page object. +// Experimental API. +func (p *PdfiumImplementation) FPDFPageObj_TransformF(request *requests.FPDFPageObj_TransformF) (*responses.FPDFPageObj_TransformF, error) { + p.Lock() + defer p.Unlock() + + pageObjectHandle, err := p.getPageObjectHandle(request.PageObject) + if err != nil { + return nil, err + } + + matrix := C.FS_MATRIX{} + matrix.a = C.float(request.Transform.A) + matrix.b = C.float(request.Transform.B) + matrix.c = C.float(request.Transform.C) + matrix.d = C.float(request.Transform.D) + matrix.e = C.float(request.Transform.E) + matrix.f = C.float(request.Transform.F) + + success := C.FPDFPageObj_TransformF(pageObjectHandle.handle, &matrix) + if int(success) == 0 { + return nil, errors.New("could not transform object") + } + + return &responses.FPDFPageObj_TransformF{}, nil +} + // FPDFPageObj_GetMatrix returns the transform matrix of a page object. // The matrix is composed as: // @@ -112,6 +145,24 @@ func (p *PdfiumImplementation) FPDFPageObj_SetMatrix(request *requests.FPDFPageO return &responses.FPDFPageObj_SetMatrix{}, nil } +// FPDFPageObj_GetMarkedContentID returns the marked content ID of a page object. +// Experimental API. +func (p *PdfiumImplementation) FPDFPageObj_GetMarkedContentID(request *requests.FPDFPageObj_GetMarkedContentID) (*responses.FPDFPageObj_GetMarkedContentID, error) { + p.Lock() + defer p.Unlock() + + pageObjectHandle, err := p.getPageObjectHandle(request.PageObject) + if err != nil { + return nil, err + } + + markedContentID := C.FPDFPageObj_GetMarkedContentID(pageObjectHandle.handle) + + return &responses.FPDFPageObj_GetMarkedContentID{ + MarkedContentID: int(markedContentID), + }, nil +} + // FPDFPageObj_CountMarks returns the count of content marks in a page object. // Experimental API. func (p *PdfiumImplementation) FPDFPageObj_CountMarks(request *requests.FPDFPageObj_CountMarks) (*responses.FPDFPageObj_CountMarks, error) { diff --git a/internal/implementation_cgo/fpdf_edit_no_experimental.go b/internal/implementation_cgo/fpdf_edit_no_experimental.go index 41ffb862..b8cfe740 100644 --- a/internal/implementation_cgo/fpdf_edit_no_experimental.go +++ b/internal/implementation_cgo/fpdf_edit_no_experimental.go @@ -17,6 +17,30 @@ func (p *PdfiumImplementation) FPDFPage_RemoveObject(request *requests.FPDFPage_ return nil, pdfium_errors.ErrExperimentalUnsupported } +// FPDFPageObj_TransformF transforms the page object by the given matrix. +// The matrix is composed as: +// +// |a c e| +// |b d f| +// +// and can be used to scale, rotate, shear and translate the page object. +// Experimental API. +func (p *PdfiumImplementation) FPDFPageObj_TransformF(request *requests.FPDFPageObj_TransformF) (*responses.FPDFPageObj_TransformF, error) { + return nil, pdfium_errors.ErrExperimentalUnsupported +} + +// FPDFPageObj_SetMatrix sets the transform matrix on a page object. +// The matrix is composed as: +// +// |a c e| +// |b d f| +// +// and can be used to scale, rotate, shear and translate the page object. +// Experimental API. +func (p *PdfiumImplementation) FPDFPageObj_SetMatrix(request *requests.FPDFPageObj_SetMatrix) (*responses.FPDFPageObj_SetMatrix, error) { + return nil, pdfium_errors.ErrExperimentalUnsupported +} + // FPDFPageObj_GetMatrix returns the transform matrix of a page object. // The matrix is composed as: // @@ -41,6 +65,12 @@ func (p *PdfiumImplementation) FPDFPageObj_SetMatrix(request *requests.FPDFPageO return nil, pdfium_errors.ErrExperimentalUnsupported } +// FPDFPageObj_GetMarkedContentID returns the marked content ID of a page object. +// Experimental API. +func (p *PdfiumImplementation) FPDFPageObj_GetMarkedContentID(request *requests.FPDFPageObj_GetMarkedContentID) (*responses.FPDFPageObj_GetMarkedContentID, error) { + return nil, pdfium_errors.ErrExperimentalUnsupported +} + // FPDFPageObj_CountMarks returns the count of content marks in a page object. // Experimental API. func (p *PdfiumImplementation) FPDFPageObj_CountMarks(request *requests.FPDFPageObj_CountMarks) (*responses.FPDFPageObj_CountMarks, error) { diff --git a/internal/implementation_webassembly/fpdf_edit.go b/internal/implementation_webassembly/fpdf_edit.go index a55f6a2c..57059769 100644 --- a/internal/implementation_webassembly/fpdf_edit.go +++ b/internal/implementation_webassembly/fpdf_edit.go @@ -2059,6 +2059,44 @@ func (p *PdfiumImplementation) FPDFPage_RemoveObject(request *requests.FPDFPage_ return &responses.FPDFPage_RemoveObject{}, nil } +// FPDFPageObj_TransformF transforms the page object by the given matrix. +// The matrix is composed as: +// +// |a c e| +// |b d f| +// +// and can be used to scale, rotate, shear and translate the page object. +// Experimental API. +func (p *PdfiumImplementation) FPDFPageObj_TransformF(request *requests.FPDFPageObj_TransformF) (*responses.FPDFPageObj_TransformF, error) { + p.Lock() + defer p.Unlock() + + pageObjectHandle, err := p.getPageObjectHandle(request.PageObject) + if err != nil { + return nil, err + } + + matrixPointer, _, err := p.CStructFS_MATRIX(&request.Transform) + if err != nil { + return nil, err + } + defer p.Free(matrixPointer) + + res, err := p.Module.ExportedFunction("FPDFPageObj_TransformF").Call(p.Context, *pageObjectHandle.handle, matrixPointer) + if err != nil { + return nil, err + } + + success := *(*int32)(unsafe.Pointer(&res[0])) + if int(success) == 0 { + if int(success) == 0 { + return nil, errors.New("could not transform object") + } + } + + return &responses.FPDFPageObj_TransformF{}, nil +} + // FPDFPageObj_GetMatrix returns the transform matrix of a page object. // The matrix is composed as: // @@ -2145,6 +2183,29 @@ func (p *PdfiumImplementation) FPDFPageObj_SetMatrix(request *requests.FPDFPageO return &responses.FPDFPageObj_SetMatrix{}, nil } +// FPDFPageObj_GetMarkedContentID returns the marked content ID of a page object. +// Experimental API. +func (p *PdfiumImplementation) FPDFPageObj_GetMarkedContentID(request *requests.FPDFPageObj_GetMarkedContentID) (*responses.FPDFPageObj_GetMarkedContentID, error) { + p.Lock() + defer p.Unlock() + + pageObjectHandle, err := p.getPageObjectHandle(request.PageObject) + if err != nil { + return nil, err + } + + res, err := p.Module.ExportedFunction("FPDFPageObj_GetMarkedContentID").Call(p.Context, *pageObjectHandle.handle) + if err != nil { + return nil, err + } + + markedContentID := *(*int32)(unsafe.Pointer(&res[0])) + + return &responses.FPDFPageObj_GetMarkedContentID{ + MarkedContentID: int(markedContentID), + }, nil +} + // FPDFPageObj_CountMarks returns the count of content marks in a page object. // Experimental API. func (p *PdfiumImplementation) FPDFPageObj_CountMarks(request *requests.FPDFPageObj_CountMarks) (*responses.FPDFPageObj_CountMarks, error) { diff --git a/multi_threaded/generated.go b/multi_threaded/generated.go index 7079ebc6..e377904b 100644 --- a/multi_threaded/generated.go +++ b/multi_threaded/generated.go @@ -1691,6 +1691,14 @@ func (i *pdfiumInstance) FPDFPageObj_GetMark(request *requests.FPDFPageObj_GetMa return i.worker.plugin.FPDFPageObj_GetMark(request) } +func (i *pdfiumInstance) FPDFPageObj_GetMarkedContentID(request *requests.FPDFPageObj_GetMarkedContentID) (*responses.FPDFPageObj_GetMarkedContentID, error) { + if i.closed { + return nil, errors.New("instance is closed") + } + + return i.worker.plugin.FPDFPageObj_GetMarkedContentID(request) +} + func (i *pdfiumInstance) FPDFPageObj_GetMatrix(request *requests.FPDFPageObj_GetMatrix) (*responses.FPDFPageObj_GetMatrix, error) { if i.closed { return nil, errors.New("instance is closed") @@ -1851,6 +1859,14 @@ func (i *pdfiumInstance) FPDFPageObj_TransformClipPath(request *requests.FPDFPag return i.worker.plugin.FPDFPageObj_TransformClipPath(request) } +func (i *pdfiumInstance) FPDFPageObj_TransformF(request *requests.FPDFPageObj_TransformF) (*responses.FPDFPageObj_TransformF, error) { + if i.closed { + return nil, errors.New("instance is closed") + } + + return i.worker.plugin.FPDFPageObj_TransformF(request) +} + func (i *pdfiumInstance) FPDFPage_CloseAnnot(request *requests.FPDFPage_CloseAnnot) (*responses.FPDFPage_CloseAnnot, error) { if i.closed { return nil, errors.New("instance is closed") diff --git a/pdfium.go b/pdfium.go index ae1dd22f..9aca4fb7 100644 --- a/pdfium.go +++ b/pdfium.go @@ -434,6 +434,14 @@ type Pdfium interface { // and can be used to scale, rotate, shear and translate the page object. FPDFPageObj_Transform(request *requests.FPDFPageObj_Transform) (*responses.FPDFPageObj_Transform, error) + // FPDFPageObj_TransformF transforms the page object by the given matrix. + // The matrix is composed as: + // |a c e| + // |b d f| + // and can be used to scale, rotate, shear and translate the page object. + // Experimental API. + FPDFPageObj_TransformF(request *requests.FPDFPageObj_TransformF) (*responses.FPDFPageObj_TransformF, error) + // FPDFPageObj_GetMatrix returns the transform matrix of a page object. // The matrix is composed as: // |a c e| @@ -460,6 +468,10 @@ type Pdfium interface { // FPDFPageObj_NewImageObj creates a new image object. FPDFPageObj_NewImageObj(request *requests.FPDFPageObj_NewImageObj) (*responses.FPDFPageObj_NewImageObj, error) + // FPDFPageObj_GetMarkedContentID returns the marked content ID of a page object. + // Experimental API. + FPDFPageObj_GetMarkedContentID(request *requests.FPDFPageObj_GetMarkedContentID) (*responses.FPDFPageObj_GetMarkedContentID, error) + // FPDFPageObj_CountMarks returns the count of content marks in a page object. // Experimental API. FPDFPageObj_CountMarks(request *requests.FPDFPageObj_CountMarks) (*responses.FPDFPageObj_CountMarks, error) diff --git a/requests/fpdf_edit.go b/requests/fpdf_edit.go index fe41fbd6..b9af33cc 100644 --- a/requests/fpdf_edit.go +++ b/requests/fpdf_edit.go @@ -96,6 +96,11 @@ type FPDFPageObj_Transform struct { Transform structs.FPDF_FS_MATRIX } +type FPDFPageObj_TransformF struct { + PageObject references.FPDF_PAGEOBJECT + Transform structs.FPDF_FS_MATRIX +} + type FPDFPageObj_GetMatrix struct { PageObject references.FPDF_PAGEOBJECT } @@ -114,6 +119,10 @@ type FPDFPageObj_NewImageObj struct { Document references.FPDF_DOCUMENT } +type FPDFPageObj_GetMarkedContentID struct { + PageObject references.FPDF_PAGEOBJECT +} + type FPDFPageObj_CountMarks struct { PageObject references.FPDF_PAGEOBJECT } diff --git a/responses/fpdf_edit.go b/responses/fpdf_edit.go index 0ad4804b..7a5d6ae2 100644 --- a/responses/fpdf_edit.go +++ b/responses/fpdf_edit.go @@ -56,6 +56,8 @@ type FPDFPageObj_GetType struct { type FPDFPageObj_Transform struct{} +type FPDFPageObj_TransformF struct{} + type FPDFPageObj_GetMatrix struct { Matrix structs.FPDF_FS_MATRIX } @@ -68,6 +70,10 @@ type FPDFPageObj_NewImageObj struct { PageObject references.FPDF_PAGEOBJECT } +type FPDFPageObj_GetMarkedContentID struct { + MarkedContentID int +} + type FPDFPageObj_CountMarks struct { Count int } diff --git a/shared_tests/fpdf_edit_experimental.go b/shared_tests/fpdf_edit_experimental.go index cea605d4..4e200972 100644 --- a/shared_tests/fpdf_edit_experimental.go +++ b/shared_tests/fpdf_edit_experimental.go @@ -190,6 +190,18 @@ var _ = Describe("fpdf_edit", func() { Expect(err).To(MatchError("pageObject not given")) Expect(FPDFImageObj_GetImagePixelSize).To(BeNil()) }) + + It("returns an error when calling FPDFPageObj_GetMarkedContentID", func() { + FPDFPageObj_GetMarkedContentID, err := PdfiumInstance.FPDFPageObj_GetMarkedContentID(&requests.FPDFPageObj_GetMarkedContentID{}) + Expect(err).To(MatchError("pageObject not given")) + Expect(FPDFPageObj_GetMarkedContentID).To(BeNil()) + }) + + It("returns an error when calling FPDFPageObj_TransformF", func() { + FPDFPageObj_TransformF, err := PdfiumInstance.FPDFPageObj_TransformF(&requests.FPDFPageObj_TransformF{}) + Expect(err).To(MatchError("pageObject not given")) + Expect(FPDFPageObj_TransformF).To(BeNil()) + }) }) }) @@ -1487,4 +1499,201 @@ end }) }) }) + + Context("a PDF file with marks", func() { + var doc references.FPDF_DOCUMENT + + BeforeEach(func() { + pdfData, err := ioutil.ReadFile(TestDataPath + "/testdata/tagged_marked_content.pdf") + Expect(err).To(BeNil()) + + newDoc, err := PdfiumInstance.FPDF_LoadMemDocument(&requests.FPDF_LoadMemDocument{ + Data: &pdfData, + }) + Expect(err).To(BeNil()) + + doc = newDoc.Document + }) + + AfterEach(func() { + FPDF_CloseDocument, err := PdfiumInstance.FPDF_CloseDocument(&requests.FPDF_CloseDocument{ + Document: doc, + }) + Expect(err).To(BeNil()) + Expect(FPDF_CloseDocument).To(Not(BeNil())) + }) + + When("is opened", func() { + When("a page object is opened", func() { + It("returns the correct marks", func() { + By("loading the page object") + + By("getting the mark count") + FPDFPage_CountObjects, err := PdfiumInstance.FPDFPage_CountObjects(&requests.FPDFPage_CountObjects{ + Page: requests.Page{ + ByIndex: &requests.PageByIndex{ + Document: doc, + Index: 0, + }, + }, + }) + Expect(err).To(BeNil()) + Expect(FPDFPage_CountObjects).To(Equal(&responses.FPDFPage_CountObjects{ + Count: 4, + })) + + By("loading mark 1") + FPDFPage_GetObject, err := PdfiumInstance.FPDFPage_GetObject(&requests.FPDFPage_GetObject{ + Page: requests.Page{ + ByIndex: &requests.PageByIndex{ + Document: doc, + Index: 0, + }, + }, + Index: 0, + }) + Expect(err).To(BeNil()) + Expect(FPDFPage_GetObject).To(Not(BeNil())) + Expect(FPDFPage_GetObject.PageObject).To(Not(BeEmpty())) + + FPDFPageObj_GetMarkedContentID, err := PdfiumInstance.FPDFPageObj_GetMarkedContentID(&requests.FPDFPageObj_GetMarkedContentID{ + PageObject: FPDFPage_GetObject.PageObject, + }) + Expect(err).To(BeNil()) + Expect(FPDFPageObj_GetMarkedContentID).To(Equal(&responses.FPDFPageObj_GetMarkedContentID{ + MarkedContentID: 0, + })) + + By("loading mark 2") + FPDFPage_GetObject, err = PdfiumInstance.FPDFPage_GetObject(&requests.FPDFPage_GetObject{ + Page: requests.Page{ + ByIndex: &requests.PageByIndex{ + Document: doc, + Index: 0, + }, + }, + Index: 1, + }) + Expect(err).To(BeNil()) + Expect(FPDFPage_GetObject).To(Not(BeNil())) + Expect(FPDFPage_GetObject.PageObject).To(Not(BeEmpty())) + + FPDFPageObj_GetMarkedContentID, err = PdfiumInstance.FPDFPageObj_GetMarkedContentID(&requests.FPDFPageObj_GetMarkedContentID{ + PageObject: FPDFPage_GetObject.PageObject, + }) + Expect(err).To(BeNil()) + Expect(FPDFPageObj_GetMarkedContentID).To(Equal(&responses.FPDFPageObj_GetMarkedContentID{ + MarkedContentID: 1, + })) + + By("loading mark 3") + FPDFPage_GetObject, err = PdfiumInstance.FPDFPage_GetObject(&requests.FPDFPage_GetObject{ + Page: requests.Page{ + ByIndex: &requests.PageByIndex{ + Document: doc, + Index: 0, + }, + }, + Index: 2, + }) + Expect(err).To(BeNil()) + Expect(FPDFPage_GetObject).To(Not(BeNil())) + Expect(FPDFPage_GetObject.PageObject).To(Not(BeEmpty())) + + FPDFPageObj_GetMarkedContentID, err = PdfiumInstance.FPDFPageObj_GetMarkedContentID(&requests.FPDFPageObj_GetMarkedContentID{ + PageObject: FPDFPage_GetObject.PageObject, + }) + Expect(err).To(BeNil()) + Expect(FPDFPageObj_GetMarkedContentID).To(Equal(&responses.FPDFPageObj_GetMarkedContentID{ + MarkedContentID: 2, + })) + + By("loading mark 4") + FPDFPage_GetObject, err = PdfiumInstance.FPDFPage_GetObject(&requests.FPDFPage_GetObject{ + Page: requests.Page{ + ByIndex: &requests.PageByIndex{ + Document: doc, + Index: 0, + }, + }, + Index: 3, + }) + Expect(err).To(BeNil()) + Expect(FPDFPage_GetObject).To(Not(BeNil())) + Expect(FPDFPage_GetObject.PageObject).To(Not(BeEmpty())) + + FPDFPageObj_GetMarkedContentID, err = PdfiumInstance.FPDFPageObj_GetMarkedContentID(&requests.FPDFPageObj_GetMarkedContentID{ + PageObject: FPDFPage_GetObject.PageObject, + }) + Expect(err).To(BeNil()) + Expect(FPDFPageObj_GetMarkedContentID).To(Equal(&responses.FPDFPageObj_GetMarkedContentID{ + MarkedContentID: 3, + })) + }) + }) + }) + }) + + Context("a normal PDF file", func() { + var doc references.FPDF_DOCUMENT + + BeforeEach(func() { + pdfData, err := ioutil.ReadFile(TestDataPath + "/testdata/test.pdf") + Expect(err).To(BeNil()) + + newDoc, err := PdfiumInstance.FPDF_LoadMemDocument(&requests.FPDF_LoadMemDocument{ + Data: &pdfData, + }) + Expect(err).To(BeNil()) + + doc = newDoc.Document + }) + + AfterEach(func() { + FPDF_CloseDocument, err := PdfiumInstance.FPDF_CloseDocument(&requests.FPDF_CloseDocument{ + Document: doc, + }) + Expect(err).To(BeNil()) + Expect(FPDF_CloseDocument).To(Not(BeNil())) + }) + + When("is opened", func() { + Context("when a page object is loaded", func() { + var pageObject references.FPDF_PAGEOBJECT + + BeforeEach(func() { + FPDFPage_GetObject, err := PdfiumInstance.FPDFPage_GetObject(&requests.FPDFPage_GetObject{ + Page: requests.Page{ + ByIndex: &requests.PageByIndex{ + Document: doc, + Index: 0, + }, + }, + Index: 2, + }) + Expect(err).To(BeNil()) + Expect(FPDFPage_GetObject).To(Not(BeNil())) + Expect(FPDFPage_GetObject.PageObject).To(Not(BeEmpty())) + pageObject = FPDFPage_GetObject.PageObject + }) + + It("allows us to add transformations to a page object", func() { + FPDFPageObj_TransformF, err := PdfiumInstance.FPDFPageObj_TransformF(&requests.FPDFPageObj_TransformF{ + PageObject: pageObject, + Transform: structs.FPDF_FS_MATRIX{ + A: 1, + B: 0, + C: 0, + D: 1, + E: 50, + F: 200, + }, + }) + Expect(err).To(BeNil()) + Expect(FPDFPageObj_TransformF).To(Not(BeNil())) + Expect(FPDFPageObj_TransformF).To(Equal(&responses.FPDFPageObj_TransformF{})) + }) + }) + }) + }) }) diff --git a/single_threaded/generated.go b/single_threaded/generated.go index 1ceed0d2..089e6879 100644 --- a/single_threaded/generated.go +++ b/single_threaded/generated.go @@ -3007,6 +3007,20 @@ func (i *pdfiumInstance) FPDFPageObj_GetMark(request *requests.FPDFPageObj_GetMa return i.pdfium.FPDFPageObj_GetMark(request) } +func (i *pdfiumInstance) FPDFPageObj_GetMarkedContentID(request *requests.FPDFPageObj_GetMarkedContentID) (resp *responses.FPDFPageObj_GetMarkedContentID, err error) { + if i.closed { + return nil, errors.New("instance is closed") + } + + defer func() { + if panicError := recover(); panicError != nil { + err = fmt.Errorf("panic occurred in %s: %v", "FPDFPageObj_GetMarkedContentID", panicError) + } + }() + + return i.pdfium.FPDFPageObj_GetMarkedContentID(request) +} + func (i *pdfiumInstance) FPDFPageObj_GetMatrix(request *requests.FPDFPageObj_GetMatrix) (resp *responses.FPDFPageObj_GetMatrix, err error) { if i.closed { return nil, errors.New("instance is closed") @@ -3287,6 +3301,20 @@ func (i *pdfiumInstance) FPDFPageObj_TransformClipPath(request *requests.FPDFPag return i.pdfium.FPDFPageObj_TransformClipPath(request) } +func (i *pdfiumInstance) FPDFPageObj_TransformF(request *requests.FPDFPageObj_TransformF) (resp *responses.FPDFPageObj_TransformF, err error) { + if i.closed { + return nil, errors.New("instance is closed") + } + + defer func() { + if panicError := recover(); panicError != nil { + err = fmt.Errorf("panic occurred in %s: %v", "FPDFPageObj_TransformF", panicError) + } + }() + + return i.pdfium.FPDFPageObj_TransformF(request) +} + func (i *pdfiumInstance) FPDFPage_CloseAnnot(request *requests.FPDFPage_CloseAnnot) (resp *responses.FPDFPage_CloseAnnot, err error) { if i.closed { return nil, errors.New("instance is closed") diff --git a/webassembly/generated.go b/webassembly/generated.go index b68080e9..05baa435 100644 --- a/webassembly/generated.go +++ b/webassembly/generated.go @@ -3007,6 +3007,20 @@ func (i *pdfiumInstance) FPDFPageObj_GetMark(request *requests.FPDFPageObj_GetMa return i.worker.Instance.FPDFPageObj_GetMark(request) } +func (i *pdfiumInstance) FPDFPageObj_GetMarkedContentID(request *requests.FPDFPageObj_GetMarkedContentID) (resp *responses.FPDFPageObj_GetMarkedContentID, err error) { + if i.closed { + return nil, errors.New("instance is closed") + } + + defer func() { + if panicError := recover(); panicError != nil { + err = fmt.Errorf("panic occurred in %s: %v", "FPDFPageObj_GetMarkedContentID", panicError) + } + }() + + return i.worker.Instance.FPDFPageObj_GetMarkedContentID(request) +} + func (i *pdfiumInstance) FPDFPageObj_GetMatrix(request *requests.FPDFPageObj_GetMatrix) (resp *responses.FPDFPageObj_GetMatrix, err error) { if i.closed { return nil, errors.New("instance is closed") @@ -3287,6 +3301,20 @@ func (i *pdfiumInstance) FPDFPageObj_TransformClipPath(request *requests.FPDFPag return i.worker.Instance.FPDFPageObj_TransformClipPath(request) } +func (i *pdfiumInstance) FPDFPageObj_TransformF(request *requests.FPDFPageObj_TransformF) (resp *responses.FPDFPageObj_TransformF, err error) { + if i.closed { + return nil, errors.New("instance is closed") + } + + defer func() { + if panicError := recover(); panicError != nil { + err = fmt.Errorf("panic occurred in %s: %v", "FPDFPageObj_TransformF", panicError) + } + }() + + return i.worker.Instance.FPDFPageObj_TransformF(request) +} + func (i *pdfiumInstance) FPDFPage_CloseAnnot(request *requests.FPDFPage_CloseAnnot) (resp *responses.FPDFPage_CloseAnnot, err error) { if i.closed { return nil, errors.New("instance is closed")