보안
암호화
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),
),
)
사용 가능한 권한:
| Constant | Description |
|---|---|
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",
}),
),
)
| Level | Standard | Description |
|---|---|---|
pdfa.LevelA1b | ISO 19005-1 | PDF/A-1b (기본값) |
pdfa.LevelA2b | ISO 19005-2 | PDF/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"),
)
| Option | Description |
|---|---|
signature.WithReason(reason) | 서명 이유 |
signature.WithLocation(location) | 서명 장소 |
signature.WithTimestamp(tsaURL) | RFC 3161 타임스탬프 기관 URL |
signature.WithSignTime(t) | 명시적 서명 시간 (기본값: 현재 시간) |