Seguridad

Encriptacion

gpdf soporta encriptacion AES-256 (ISO 32000-2, Rev 6) con contrasenas de propietario y usuario.

Solo contrasena de propietario

El PDF se puede abrir sin contrasena, pero la edicion esta restringida.

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

Contrasenas de usuario y propietario

Se requiere la contrasena de usuario para abrir el PDF.

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

Control de permisos

Restringe operaciones especificas como imprimir, copiar o modificar.

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

Permisos disponibles:

ConstantDescription
encrypt.PermPrintPermitir impresion
encrypt.PermModifyPermitir modificacion
encrypt.PermCopyPermitir copia de texto
encrypt.PermAnnotatePermitir anotaciones
encrypt.PermPrintHighResPermitir impresion de alta resolucion
encrypt.PermAllTodos los permisos (predeterminado)

Conformidad PDF/A

Genera PDFs de calidad de archivo que cumplen con los estandares 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 con metadatos

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

Firmas digitales

Firma PDFs con firmas digitales CMS/PKCS#7 usando claves RSA o ECDSA.

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

Con cadena de certificados y sellado de tiempo

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)Razon de la firma
signature.WithLocation(location)Ubicacion de la firma
signature.WithTimestamp(tsaURL)URL de autoridad de sellado de tiempo RFC 3161
signature.WithSignTime(t)Hora de firma explicita (predeterminado: ahora)