import PDFString from 'src/core/objects/PDFString' ; import PDFHexString from 'src/core/objects/PDFHexString' ; import PDFContext from 'src/core/PDFContext' ; import PDFRef from 'src/core/objects/PDFRef' ; /**
 * From the PDF-A3 specification, section **3.1. Requirements - General**.
 * See:
 * * https://www.pdfa.org/wp-content/uploads/2018/10/PDF20_AN002-AF.pdf
 */ export enum AFRelationship { Source = 'Source' , Data = 'Data' , Alternative = 'Alternative' , Supplement = 'Supplement' , EncryptedPayload = 'EncryptedPayload' , FormData = 'EncryptedPayload' , Schema = 'Schema' , Unspecified = 'Unspecified' } export interface EmbeddedFileOptions { mimeType ? : string ; description ? : string ; creationDate ? : Date ; modificationDate ? : Date ; afRelationship ? : AFRelationship ; } class FileEmbedder { static for ( bytes , fileName , options = { } ) { return new FileEmbedder ( bytes , fileName , options ) ; } private readonly fileData : Uint8Array ; readonly fileName : string ; readonly options : EmbeddedFileOptions ; private constructor ( fileData , fileName , options = { } ) { this . fileData = fileData ; this . fileName = fileName ; this . options = options ; } async embedIntoContext ( context , ref ? ) { const { mimeType , description , creationDate , modificationDate , afRelationship , } = this . options ; const embeddedFileStream = context . flateStream ( this . fileData , { Type : 'EmbeddedFile' , Subtype : mimeType ?? undefined , Params : { Size : this . fileData . length , CreationDate : creationDate ? PDFString . fromDate ( creationDate ) : undefined , ModDate : modificationDate ? PDFString . fromDate ( modificationDate ) : undefined , } , } ) ; const embeddedFileStreamRef = context . register ( embeddedFileStream ) ; const fileSpecDict = context . obj ( { Type : 'Filespec' , F : PDFString . of ( this . fileName ) , UF : PDFHexString . fromText ( this . fileName ) , EF : { F : embeddedFileStreamRef } , Desc : description ? PDFHexString . fromText ( description ) : undefined , AFRelationship : afRelationship ?? undefined , } ) ; if ( ref ) { context . assign ( ref , fileSpecDict ) ; return ref ; } else { return context . register ( fileSpecDict ) ; } } } export default FileEmbedder ;