mirror of
https://github.com/unidoc/unipdf.git
synced 2025-05-05 19:30:30 +08:00
46 lines
11 KiB
Go
46 lines
11 KiB
Go
//
|
|
// Copyright 2020 FoxyUtils ehf. All rights reserved.
|
|
//
|
|
// This is a commercial product and requires a license to operate.
|
|
// A trial license can be obtained at https://unidoc.io
|
|
//
|
|
// DO NOT EDIT: generated by unitwist Go source code obfuscator.
|
|
//
|
|
// Use of this source code is governed by the UniDoc End User License Agreement
|
|
// terms that can be accessed at https://unidoc.io/eula/
|
|
|
|
package docutil ;import (_ef "errors";_a "fmt";_b "github.com/unidoc/unipdf/v3/common";_ag "github.com/unidoc/unipdf/v3/core";_d "github.com/unidoc/unipdf/v3/internal/xmp";);func _daa (_dcfa _ag .PdfObject )(_ag .PdfObjectName ,error ){var _fd *_ag .PdfObjectName ;
|
|
var _ggd *_ag .PdfObjectArray ;if _ggf ,_eab :=_dcfa .(*_ag .PdfIndirectObject );_eab {if _aaae ,_gb :=_ggf .PdfObject .(*_ag .PdfObjectArray );_gb {_ggd =_aaae ;}else if _gad ,_ebe :=_ggf .PdfObject .(*_ag .PdfObjectName );_ebe {_fd =_gad ;};}else if _ec ,_eed :=_dcfa .(*_ag .PdfObjectArray );
|
|
_eed {_ggd =_ec ;}else if _gaa ,_fca :=_dcfa .(*_ag .PdfObjectName );_fca {_fd =_gaa ;};if _fd !=nil {switch *_fd {case "\u0044\u0065\u0076\u0069\u0063\u0065\u0047\u0072\u0061\u0079","\u0044e\u0076\u0069\u0063\u0065\u0052\u0047B","\u0044\u0065\u0076\u0069\u0063\u0065\u0043\u004d\u0059\u004b":return *_fd ,nil ;
|
|
case "\u0050a\u0074\u0074\u0065\u0072\u006e":return *_fd ,nil ;};};if _ggd !=nil &&_ggd .Len ()> 0{if _gef ,_geb :=_ggd .Get (0).(*_ag .PdfObjectName );_geb {switch *_gef {case "\u0044\u0065\u0076\u0069\u0063\u0065\u0047\u0072\u0061\u0079","\u0044e\u0076\u0069\u0063\u0065\u0052\u0047B","\u0044\u0065\u0076\u0069\u0063\u0065\u0043\u004d\u0059\u004b":if _ggd .Len ()==1{return *_gef ,nil ;
|
|
};case "\u0043a\u006c\u0047\u0072\u0061\u0079","\u0043\u0061\u006c\u0052\u0047\u0042","\u004c\u0061\u0062":return *_gef ,nil ;case "\u0049\u0043\u0043\u0042\u0061\u0073\u0065\u0064","\u0050a\u0074\u0074\u0065\u0072\u006e","\u0049n\u0064\u0065\u0078\u0065\u0064":return *_gef ,nil ;
|
|
case "\u0053\u0065\u0070\u0061\u0072\u0061\u0074\u0069\u006f\u006e","\u0044e\u0076\u0069\u0063\u0065\u004e":return *_gef ,nil ;};};};return "",nil ;};func (_bd Page )GetResourcesXObject ()(*_ag .PdfObjectDictionary ,bool ){_ffa ,_eae :=_bd .GetResources ();
|
|
if !_eae {return nil ,false ;};return _ag .GetDict (_ffa .Get ("\u0058O\u0062\u006a\u0065\u0063\u0074"));};func (_cce *OutputIntents )Add (oi _ag .PdfObject )error {_cda ,_ff :=oi .(*_ag .PdfObjectDictionary );if !_ff {return _ef .New ("\u0069\u006e\u0070\u0075\u0074\u0020\u006f\u0075\u0074\u0070\u0075\u0074\u0020\u0069\u006e\u0074\u0065\u006et\u0020\u0073\u0068\u006f\u0075\u006c\u0064 \u0062\u0065\u0020\u0061\u006e\u0020\u006f\u0062\u006a\u0065\u0063t\u0020\u0064\u0069\u0063\u0074\u0069\u006f\u006e\u0061\u0072\u0079");
|
|
};if _abd ,_db :=_ag .GetStream (_cda .Get ("\u0044\u0065\u0073\u0074\u004f\u0075\u0074\u0070\u0075\u0074\u0050\u0072o\u0066\u0069\u006c\u0065"));_db {_cce ._abb .Objects =append (_cce ._abb .Objects ,_abd );};_dcf ,_ea :=oi .(*_ag .PdfIndirectObject );
|
|
if !_ea {_dcf =_ag .MakeIndirectObject (oi );};if _cce ._ga ==nil {_cce ._ga =_ag .MakeArray (_dcf );}else {_cce ._ga .Append (_dcf );};_cce ._abb .Objects =append (_cce ._abb .Objects ,_dcf );return nil ;};func (_aag *Catalog )NewOutputIntents ()*OutputIntents {return &OutputIntents {_abb :_aag ._c }};
|
|
type OutputIntents struct{_ga *_ag .PdfObjectArray ;_abb *Document ;_abc *_ag .PdfIndirectObject ;};func (_ab *Catalog )SetOutputIntents (outputIntents *OutputIntents ){if _be :=_ab .Object .Get ("\u004f\u0075\u0074\u0070\u0075\u0074\u0049\u006e\u0074\u0065\u006e\u0074\u0073");
|
|
_be !=nil {for _adg ,_gg :=range _ab ._c .Objects {if _gg ==_be {if outputIntents ._abc ==_be {return ;};_ab ._c .Objects =append (_ab ._c .Objects [:_adg ],_ab ._c .Objects [_adg +1:]...);break ;};};};_ede :=outputIntents ._abc ;if _ede ==nil {_ede =_ag .MakeIndirectObject (outputIntents ._ga );
|
|
};_ab .Object .Set ("\u004f\u0075\u0074\u0070\u0075\u0074\u0049\u006e\u0074\u0065\u006e\u0074\u0073",_ede );_ab ._c .Objects =append (_ab ._c .Objects ,_ede );};func (_cb *Document )GetPages ()([]Page ,bool ){_cg ,_dcff :=_cb .FindCatalog ();if !_dcff {return nil ,false ;
|
|
};return _cg .GetPages ();};type Document struct{ID [2]string ;Version _ag .Version ;Objects []_ag .PdfObject ;Info _ag .PdfObject ;Crypt *_ag .PdfCrypt ;UseHashBasedID bool ;};func (_bg *OutputIntents )Get (i int )(OutputIntent ,bool ){if _bg ._ga ==nil {return OutputIntent {},false ;
|
|
};if i >=_bg ._ga .Len (){return OutputIntent {},false ;};_bf :=_bg ._ga .Get (i );_aea ,_gc :=_ag .GetIndirect (_bf );if !_gc {_dgd ,_cfd :=_ag .GetDict (_bf );return OutputIntent {Object :_dgd },_cfd ;};_edc ,_cfdg :=_ag .GetDict (_aea .PdfObject );return OutputIntent {Object :_edc },_cfdg ;
|
|
};type Image struct{Name string ;Width int ;Height int ;Colorspace _ag .PdfObjectName ;ColorComponents int ;BitsPerComponent int ;SMask *ImageSMask ;Stream *_ag .PdfObjectStream ;};func (_de *Catalog )SetVersion (){_de .Object .Set ("\u0056e\u0072\u0073\u0069\u006f\u006e",_ag .MakeName (_a .Sprintf ("\u0025\u0064\u002e%\u0064",_de ._c .Version .Major ,_de ._c .Version .Minor )));
|
|
};type ImageSMask struct{Image *Image ;Stream *_ag .PdfObjectStream ;};type OutputIntent struct{Object *_ag .PdfObjectDictionary ;};func (_eg *Catalog )HasMetadata ()bool {_bb :=_eg .Object .Get ("\u004d\u0065\u0074\u0061\u0064\u0061\u0074\u0061");return _bb !=nil ;
|
|
};func (_dd *OutputIntents )Len ()int {return _dd ._ga .Len ()};func (_gd *Document )AddIndirectObject (indirect *_ag .PdfIndirectObject ){for _ ,_aaa :=range _gd .Objects {if _aaa ==indirect {return ;};};_gd .Objects =append (_gd .Objects ,indirect );
|
|
};func (_bgc Page )GetResources ()(*_ag .PdfObjectDictionary ,bool ){return _ag .GetDict (_bgc .Object .Get ("\u0052e\u0073\u006f\u0075\u0072\u0063\u0065s"));};func (_ca Page )GetContents ()([]Content ,bool ){_aba ,_dce :=_ag .GetArray (_ca .Object .Get ("\u0043\u006f\u006e\u0074\u0065\u006e\u0074\u0073"));
|
|
if !_dce {return nil ,false ;};_ggdg :=make ([]Content ,_aba .Len ());for _aeg ,_dgf :=range _aba .Elements (){_ggdg [_aeg ]=Content {Object :_dgf };};return _ggdg ,true ;};func (_ffe Page )FindXObjectImages ()([]*Image ,error ){_gbd ,_bbc :=_ffe .GetResourcesXObject ();
|
|
if !_bbc {return nil ,nil ;};var _edd []*Image ;var _cddg error ;_efa :=map[*_ag .PdfObjectStream ]int {};_fce :=map[*_ag .PdfObjectStream ]struct{}{};var _fe int ;for _ ,_dge :=range _gbd .Keys (){_egg ,_cab :=_ag .GetStream (_gbd .Get (_dge ));if !_cab {continue ;
|
|
};if _ ,_bag :=_efa [_egg ];_bag {continue ;};_fa ,_aebc :=_ag .GetName (_egg .Get ("\u0053u\u0062\u0074\u0079\u0070\u0065"));if !_aebc ||_fa .String ()!="\u0049\u006d\u0061g\u0065"{continue ;};_gefa :=Image {BitsPerComponent :8,Stream :_egg ,Name :string (_dge )};
|
|
if _gefa .Colorspace ,_cddg =_daa (_egg .PdfObjectDictionary .Get ("\u0043\u006f\u006c\u006f\u0072\u0053\u0070\u0061\u0063\u0065"));_cddg !=nil {_b .Log .Error ("\u0045\u0072\u0072\u006f\u0072\u0020\u0064\u0065\u0074\u0065r\u006d\u0069\u006e\u0065\u0020\u0063\u006fl\u006f\u0072\u0020\u0073\u0070\u0061\u0063\u0065\u0020\u0025\u0073",_cddg );
|
|
continue ;};if _baf ,_dcb :=_ag .GetIntVal (_egg .PdfObjectDictionary .Get ("\u0042\u0069t\u0073\u0050\u0065r\u0043\u006f\u006d\u0070\u006f\u006e\u0065\u006e\u0074"));_dcb {_gefa .BitsPerComponent =_baf ;};if _ffaa ,_ece :=_ag .GetIntVal (_egg .PdfObjectDictionary .Get ("\u0057\u0069\u0064t\u0068"));
|
|
_ece {_gefa .Width =_ffaa ;};if _cgb ,_aeaf :=_ag .GetIntVal (_egg .PdfObjectDictionary .Get ("\u0048\u0065\u0069\u0067\u0068\u0074"));_aeaf {_gefa .Height =_cgb ;};if _dag ,_ccc :=_ag .GetStream (_egg .Get ("\u0053\u004d\u0061s\u006b"));_ccc {_gefa .SMask =&ImageSMask {Image :&_gefa ,Stream :_dag };
|
|
_fce [_dag ]=struct{}{};};switch _gefa .Colorspace {case "\u0044e\u0076\u0069\u0063\u0065\u0052\u0047B":_gefa .ColorComponents =3;case "\u0044\u0065\u0076\u0069\u0063\u0065\u0047\u0072\u0061\u0079":_gefa .ColorComponents =1;case "\u0044\u0065\u0076\u0069\u0063\u0065\u0043\u004d\u0059\u004b":_gefa .ColorComponents =4;
|
|
default:_gefa .ColorComponents =-1;};_efa [_egg ]=_fe ;_edd =append (_edd ,&_gefa );_fe ++;};var _bde []int ;for _ ,_dagf :=range _edd {if _dagf .SMask !=nil {_def ,_efg :=_efa [_dagf .SMask .Stream ];if _efg {_bde =append (_bde ,_def );};};};_ebf :=make ([]*Image ,len (_edd )-len (_bde ));
|
|
_fe =0;_dac :for _aed ,_fac :=range _edd {for _ ,_gbdg :=range _bde {if _aed ==_gbdg {continue _dac ;};};_ebf [_fe ]=_fac ;_fe ++;};return _edd ,nil ;};func (_ce *Document )FindCatalog ()(*Catalog ,bool ){var _gf *_ag .PdfObjectDictionary ;for _ ,_dba :=range _ce .Objects {_ge ,_df :=_ag .GetDict (_dba );
|
|
if !_df {continue ;};if _bgf ,_ggb :=_ag .GetName (_ge .Get ("\u0054\u0079\u0070\u0065"));_ggb &&*_bgf =="\u0043a\u0074\u0061\u006c\u006f\u0067"{_gf =_ge ;break ;};};if _gf ==nil {return nil ,false ;};return &Catalog {Object :_gf ,_c :_ce },true ;};func (_af *Page )Number ()int {return _af ._eea };
|
|
func (_ead *Document )AddStream (stream *_ag .PdfObjectStream ){for _ ,_ee :=range _ead .Objects {if _ee ==stream {return ;};};_ead .Objects =append (_ead .Objects ,stream );};type Catalog struct{Object *_ag .PdfObjectDictionary ;_c *Document ;};func (_eb *Catalog )GetPages ()([]Page ,bool ){_f ,_cc :=_ag .GetDict (_eb .Object .Get ("\u0050\u0061\u0067e\u0073"));
|
|
if !_cc {return nil ,false ;};_fc ,_cd :=_ag .GetArray (_f .Get ("\u004b\u0069\u0064\u0073"));if !_cd {return nil ,false ;};_fg :=make ([]Page ,_fc .Len ());for _aa ,_cdg :=range _fc .Elements (){_ed ,_g :=_ag .GetDict (_cdg );if !_g {continue ;};_fg [_aa ]=Page {Object :_ed ,_eea :_aa +1,_add :_eb ._c };
|
|
};return _fg ,true ;};func (_dea *Catalog )SetMetadata (meta _d .Metadata )error {_ad ,_dc :=meta .MarshalXMP ();if _dc !=nil {return _dc ;};_ac ,_dc :=_ag .MakeStream (_ad ,nil );if _dc !=nil {return _dc ;};_ac .Set ("\u0054\u0079\u0070\u0065",_ag .MakeName ("\u004d\u0065\u0074\u0061\u0064\u0061\u0074\u0061"));
|
|
_ac .Set ("\u0053u\u0062\u0074\u0079\u0070\u0065",_ag .MakeName ("\u0058\u004d\u004c"));_dea .Object .Set ("\u004d\u0065\u0074\u0061\u0064\u0061\u0074\u0061",_ac );_dea ._c .Objects =append (_dea ._c .Objects ,_ac );return nil ;};type Content struct{Object _ag .PdfObject ;
|
|
};type Page struct{_eea int ;Object *_ag .PdfObjectDictionary ;_add *Document ;};func (_cf *Catalog )GetOutputIntents ()(*OutputIntents ,bool ){_cdb :=_cf .Object .Get ("\u004f\u0075\u0074\u0070\u0075\u0074\u0049\u006e\u0074\u0065\u006e\u0074\u0073");if _cdb ==nil {return nil ,false ;
|
|
};_ae ,_dg :=_ag .GetIndirect (_cdb );if !_dg {return nil ,false ;};_cdd ,_cca :=_ag .GetArray (_ae .PdfObject );if !_cca {return nil ,false ;};return &OutputIntents {_abc :_ae ,_ga :_cdd ,_abb :_cf ._c },true ;};func (_cgg Content )GetData ()([]byte ,error ){_gbe ,_acb :=_ag .GetStream (_cgg .Object );
|
|
if !_acb {return nil ,nil ;};_ebc ,_afd :=_ag .NewEncoderFromStream (_gbe );if _afd !=nil {return nil ,_afd ;};_bfa ,_afd :=_ebc .DecodeStream (_gbe );if _afd !=nil {return nil ,_afd ;};return _bfa ,nil ;}; |