github.com/signintech/pdft@v0.5.0/minigopdf/encryption_obj.go (about)

     1  package gopdf
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"strings"
     7  )
     8  
     9  // EncryptionObj  encryption object res
    10  type EncryptionObj struct {
    11  	buffer bytes.Buffer
    12  	uValue []byte //U entry in pdf document
    13  	oValue []byte //O entry in pdf document
    14  	pValue int    //P entry in pdf document
    15  }
    16  
    17  func (e *EncryptionObj) init(func() *GoPdf) {
    18  
    19  }
    20  
    21  func (e *EncryptionObj) getType() string {
    22  	return "Encryption"
    23  }
    24  
    25  func (e *EncryptionObj) getObjBuff() *bytes.Buffer {
    26  	return &e.buffer
    27  }
    28  
    29  func (e *EncryptionObj) build(objID int) error {
    30  	e.buffer.WriteString("<<\n")
    31  	e.buffer.WriteString("/Filter /Standard\n")
    32  	e.buffer.WriteString("/V 1\n")
    33  	e.buffer.WriteString("/R 2\n")
    34  	e.buffer.WriteString(fmt.Sprintf("/O (%s)\n", e.escape(e.oValue)))
    35  	e.buffer.WriteString(fmt.Sprintf("/U (%s)\n", e.escape(e.uValue)))
    36  	e.buffer.WriteString(fmt.Sprintf("/P %d\n", e.pValue))
    37  	e.buffer.WriteString(">>\n")
    38  	return nil
    39  }
    40  
    41  func (e *EncryptionObj) escape(b []byte) string {
    42  	s := string(b)
    43  	s = strings.Replace(s, "\\", "\\\\", -1)
    44  	s = strings.Replace(s, "(", "\\(", -1)
    45  	s = strings.Replace(s, ")", "\\)", -1)
    46  	s = strings.Replace(s, "\r", "\\r", -1)
    47  	return s
    48  }
    49  
    50  // GetObjBuff get buffer
    51  func (e *EncryptionObj) GetObjBuff() *bytes.Buffer {
    52  	return e.getObjBuff()
    53  }
    54  
    55  // Build build buffer
    56  func (e *EncryptionObj) Build(objID int) error {
    57  	return e.build(objID)
    58  }