Seguranca

Criptografia

gpdf suporta criptografia AES-256 (ISO 32000-2, Rev 6) com senhas de proprietario e usuario.

Apenas senha do proprietario

O PDF pode ser aberto sem senha, mas a edicao e restrita.

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"),
    ),
)

Senhas de usuario e proprietario

A senha do usuario e necessaria para abrir o PDF.

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

Controle de permissoes

Restringe operacoes especificas como impressao, copia ou modificacao.

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

Permissoes disponiveis:

ConstantDescription
encrypt.PermPrintPermitir impressao
encrypt.PermModifyPermitir modificacao
encrypt.PermCopyPermitir copia de texto
encrypt.PermAnnotatePermitir anotacoes
encrypt.PermPrintHighResPermitir impressao de alta resolucao
encrypt.PermAllTodas as permissoes (padrao)

Conformidade PDF/A

Gera PDFs de qualidade de arquivo em conformidade com os padroes PDF/A.

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 com metadados

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 (padrao)
pdfa.LevelA2bISO 19005-2PDF/A-2b

Assinaturas digitais

Assine PDFs com assinaturas digitais CMS/PKCS#7 usando chaves RSA ou ECDSA.

Assinatura basica

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"),
)

Com cadeia de certificados e carimbo de tempo

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)Motivo da assinatura
signature.WithLocation(location)Local da assinatura
signature.WithTimestamp(tsaURL)URL da autoridade de carimbo de tempo RFC 3161
signature.WithSignTime(t)Hora de assinatura explicita (padrao: agora)