보안

암호화

gpdf는 소유자 비밀번호와 사용자 비밀번호를 사용한 AES-256 암호화(ISO 32000-2, Rev 6)를 지원합니다.

소유자 비밀번호만 설정

비밀번호 없이 PDF를 열 수 있지만 편집은 제한됩니다.

import (
    "github.com/gpdf-dev/gpdf"
    "github.com/gpdf-dev/gpdf/encrypt"
)

doc := gpdf.NewDocument(
    gpdf.WithPageSize(gpdf.A4),
    gpdf.WithEncryption(
        encrypt.WithOwnerPassword("owner-secret-123"),
    ),
)

사용자 비밀번호와 소유자 비밀번호

PDF를 열려면 사용자 비밀번호가 필요합니다.

doc := gpdf.NewDocument(
    gpdf.WithPageSize(gpdf.A4),
    gpdf.WithEncryption(
        encrypt.WithOwnerPassword("owner-pass"),
        encrypt.WithUserPassword("user-pass"),
    ),
)

권한 제어

인쇄, 복사, 수정 등 특정 작업을 제한합니다.

doc := gpdf.NewDocument(
    gpdf.WithPageSize(gpdf.A4),
    gpdf.WithEncryption(
        encrypt.WithOwnerPassword("owner"),
        encrypt.WithUserPassword("user"),
        encrypt.WithPermissions(encrypt.PermPrint|encrypt.PermCopy|encrypt.PermPrintHighRes),
    ),
)

사용 가능한 권한:

ConstantDescription
encrypt.PermPrint인쇄 허용
encrypt.PermModify수정 허용
encrypt.PermCopy텍스트 복사 허용
encrypt.PermAnnotate주석 허용
encrypt.PermPrintHighRes고해상도 인쇄 허용
encrypt.PermAll모든 권한 (기본값)

PDF/A 준수

PDF/A 표준을 준수하는 아카이브 품질의 PDF를 생성합니다.

PDF/A-1b

import (
    "github.com/gpdf-dev/gpdf"
    "github.com/gpdf-dev/gpdf/pdfa"
)

doc := gpdf.NewDocument(
    gpdf.WithPageSize(gpdf.A4),
    gpdf.WithPDFA(), // defaults to PDF/A-1b
)

메타데이터 포함 PDF/A-2b

doc := gpdf.NewDocument(
    gpdf.WithPageSize(gpdf.A4),
    gpdf.WithPDFA(
        pdfa.WithLevel(pdfa.LevelA2b),
        pdfa.WithMetadata(pdfa.MetadataInfo{
            Title:      "Annual Report 2026",
            Author:     "ACME Corp",
            Subject:    "Financial Report",
            Creator:    "gpdf",
            CreateDate: "2026-01-15T10:30:00+09:00",
            ModifyDate: "2026-01-15T10:30:00+09:00",
        }),
    ),
)
LevelStandardDescription
pdfa.LevelA1bISO 19005-1PDF/A-1b (기본값)
pdfa.LevelA2bISO 19005-2PDF/A-2b

디지털 서명

RSA 또는 ECDSA 키를 사용하여 CMS/PKCS#7 디지털 서명으로 PDF에 서명합니다.

기본 서명

import (
    "github.com/gpdf-dev/gpdf"
    "github.com/gpdf-dev/gpdf/signature"
)

// Generate the PDF first
data, _ := doc.Generate()

// Sign it
signed, err := gpdf.SignDocument(data, signature.Signer{
    Certificate: cert,
    PrivateKey:  key,
},
    signature.WithReason("Approved"),
    signature.WithLocation("Tokyo"),
)

인증서 체인 및 타임스탬프 포함

signed, err := gpdf.SignDocument(data, signature.Signer{
    Certificate: cert,
    PrivateKey:  key,
    Chain:       []*x509.Certificate{intermediateCert},
},
    signature.WithReason("Contract signed"),
    signature.WithLocation("New York"),
    signature.WithTimestamp("http://tsa.example.com"),
)
OptionDescription
signature.WithReason(reason)서명 이유
signature.WithLocation(location)서명 장소
signature.WithTimestamp(tsaURL)RFC 3161 타임스탬프 기관 URL
signature.WithSignTime(t)명시적 서명 시간 (기본값: 현재 시간)