Skip to content

Шифрування

PDF Oxide підтримує шифрування PDF паролями та дозволами за допомогою стандартних алгоритмів. Ви можете встановити пароль користувача (необхідний для відкриття документа), пароль власника (необхідний для повного доступу) та детальні дозволи, що контролюють друк, копіювання та редагування.

Quick Start: Save with Encryption

Python

from pdf_oxide import PdfDocument

doc = PdfDocument("input.pdf")
doc.set_title("Confidential Report")

# Encrypt with user and owner passwords
doc.save_encrypted("protected.pdf", "user123", "owner456")

WASM

import { WasmPdfDocument } from "pdf-oxide-wasm";

const doc = new WasmPdfDocument(bytes);
doc.setTitle("Confidential Report");

// Encrypt with user and owner passwords (all permissions enabled)
const output = doc.saveEncryptedToBytes(
  "user123", "owner456", true, true, true, true
);
doc.free();

Rust

use pdf_oxide::api::Pdf;

let mut doc = Pdf::open("input.pdf")?;

// Simple encryption with user and owner passwords
doc.save_encrypted("protected.pdf", "user123", "owner456")?;

Encryption with Custom Permissions

Python

Метод save_encrypted приймає прапорці дозволів як іменовані аргументи.

from pdf_oxide import PdfDocument

doc = PdfDocument("input.pdf")

# View-only: no printing, copying, or modifying
doc.save_encrypted(
    "readonly.pdf",
    "viewpass",
    "adminpass",
    allow_print=False,
    allow_copy=False,
    allow_modify=False,
    allow_annotate=False,
)

# Allow only printing
doc.save_encrypted(
    "print-only.pdf",
    "",            # No open password required
    "adminpass",
    allow_print=True,
    allow_copy=False,
    allow_modify=False,
    allow_annotate=False,
)

Python save_encrypted Parameters

Параметр Тип За замовчуванням Опис
path str required Шлях вихідного файлу
user_password str required Password to open (empty = no open password)
owner_password str None Full-access password (defaults to user password)
allow_print bool True Дозволити друк
allow_copy bool True Дозволити копіювання text/graphics
allow_modify bool True Allow modifying the document
allow_annotate bool True Allow adding annotations

WASM

import { WasmPdfDocument } from "pdf-oxide-wasm";

const doc = new WasmPdfDocument(bytes);

// View-only: no printing, copying, or modifying
const readonly = doc.saveEncryptedToBytes(
  "viewpass", "adminpass", false, false, false, false
);

// Allow only printing (empty user password = no open password)
const printOnly = doc.saveEncryptedToBytes(
  "", "adminpass", true, false, false, false
);
doc.free();

Rust

Для повного контролю над налаштуваннями шифрування використовуйте EncryptionConfig та SaveOptions.

use pdf_oxide::api::Pdf;
use pdf_oxide::editor::{
    EncryptionConfig, EncryptionAlgorithm, Permissions, SaveOptions,
};

let mut doc = Pdf::open("input.pdf")?;

// Build permissions
let mut perms = Permissions::read_only();
perms.print = true;  // Дозволити друк only

// Build encryption config
let config = EncryptionConfig::new("user123", "owner456")
    .with_algorithm(EncryptionAlgorithm::Aes256)
    .with_permissions(perms);

// Зберегти із шифруванням
doc.save_with_encryption("protected.pdf", config)?;

EncryptionConfig

Структура EncryptionConfig контролює всі параметри шифрування.

use pdf_oxide::editor::{EncryptionConfig, EncryptionAlgorithm, Permissions};

let config = EncryptionConfig {
    user_password: "user123".to_string(),
    owner_password: "owner456".to_string(),
    algorithm: EncryptionAlgorithm::Aes256,
    permissions: Permissions::all(),
};

Or use the builder pattern:

let config = EncryptionConfig::new("user123", "owner456")
    .with_algorithm(EncryptionAlgorithm::Aes128)
    .with_permissions(Permissions::read_only());

EncryptionConfig Fields

Поле Тип Опис
user_password String Password required to open the document
owner_password String Password for full access and changing security
algorithm EncryptionAlgorithm Алгоритм шифрування to use
permissions Permissions Access control flags

Encryption Algorithms

Algorithm Description
EncryptionAlgorithm::Aes256 AES-256 (strongest, recommended)
EncryptionAlgorithm::Aes128 AES-128
EncryptionAlgorithm::Rc4_128 RC4 128-bit (legacy compatibility)
EncryptionAlgorithm::Rc4_40 RC4 40-bit (legacy, weak)

AES-256 використовується за замовчуванням при виклику save_encrypted() у Python або API Pdf.

Permissions

Структура Permissions контролює, які операції дозволені при відкритті документа з паролем користувача.

use pdf_oxide::editor::Permissions;

// Allow everything
let all = Permissions::all();

// Restrict everything
let readonly = Permissions::read_only();

Permissions Fields

Field Type Default (all) Default (read_only) Description
print bool true false Дозволити друк
print_high_quality bool true false Allow high-quality printing
modify bool true false Allow modifying content
copy bool true false Дозволити копіювання text/graphics
annotate bool true false Allow adding annotations
fill_forms bool true false Allow filling form fields
accessibility bool true true Allow accessibility extraction
assemble bool true false Allow page assembly operations

Custom Permissions

let mut perms = Permissions::read_only();
perms.print = true;          // Дозволити друк
perms.fill_forms = true;     // Allow filling forms
perms.accessibility = true;  // Always allow for compliance

SaveOptions

Використовуйте SaveOptions для повного контролю над тим, як документ записується.

use pdf_oxide::editor::{SaveOptions, EncryptionConfig};

// Full rewrite (default)
let opts = SaveOptions::full_rewrite();

// Incremental update (faster, preserves structure)
let opts = SaveOptions::incremental();

// With encryption
let config = EncryptionConfig::new("user", "owner");
let opts = SaveOptions::with_encryption(config);

Opening Encrypted PDFs

Python

Pass the password when opening the document.

from pdf_oxide import PdfDocument

doc = PdfDocument("protected.pdf", password="user123")
text = doc.extract_text(0)
print(text)

Rust

use pdf_oxide::PdfDocument;

let doc = PdfDocument::open_with_password("protected.pdf", "user123")?;
let text = doc.extract_text(0)?;
println!("{}", text);

Complete Encryption Workflow

Python

from pdf_oxide import PdfDocument

# Open and modify
doc = PdfDocument("report.pdf")
doc.set_title("Confidential Report")
doc.set_author("Finance Team")

# Save with view-only restrictions
doc.save_encrypted(
    "report-protected.pdf",
    "",            # No password to open
    "admin2025",   # Пароль власника for full access
    allow_print=True,
    allow_copy=False,
    allow_modify=False,
)

WASM

import { WasmPdfDocument } from "pdf-oxide-wasm";

const doc = new WasmPdfDocument(bytes);
doc.setTitle("Confidential Report");
doc.setAuthor("Finance Team");

// Save with view-only restrictions (no open password, print allowed)
const output = doc.saveEncryptedToBytes(
  "", "admin2025", true, false, false, false
);
doc.free();

Rust

use pdf_oxide::api::Pdf;
use pdf_oxide::editor::{
    DocumentEditor, EditableDocument,
    EncryptionConfig, EncryptionAlgorithm, Permissions, SaveOptions,
};

// Open and modify
let mut doc = Pdf::open("report.pdf")?;
{
    let editor = doc.editor().unwrap();
    editor.set_title("Confidential Report");
    editor.set_author("Finance Team");
}

// Configure encryption
let permissions = Permissions {
    print: true,
    print_high_quality: true,
    modify: false,
    copy: false,
    annotate: false,
    fill_forms: true,
    accessibility: true,
    assemble: false,
};

let config = EncryptionConfig::new("", "admin2025")
    .with_algorithm(EncryptionAlgorithm::Aes256)
    .with_permissions(permissions);

doc.save_with_encryption("report-protected.pdf", config)?;

Re-encrypt with Different Settings

Rust

use pdf_oxide::editor::{DocumentEditor, EditableDocument, EncryptionConfig, SaveOptions};

// Open with current password
let mut editor = DocumentEditor::open("old-protected.pdf")?;

// Save with new encryption
let config = EncryptionConfig::new("newuser", "newowner");
let options = SaveOptions::with_encryption(config);
editor.save_with_options("re-encrypted.pdf", options)?;

Full API Reference

Pdf Methods

Метод Повертає Опис
save_encrypted(path, user_pw, owner_pw) Result<()> Save with AES-256 and full permissions
save_with_encryption(path, config) Result<()> Save with custom encryption config

DocumentEditor / EditableDocument Methods

Метод Повертає Опис
save(path) Result<()> Save with full rewrite (no encryption)
save_with_options(path, options) Result<()> Save with custom options

Configuration Types

Type Description
EncryptionConfig User/owner passwords, algorithm, permissions
EncryptionAlgorithm Aes256, Aes128, Rc4_128, Rc4_40
Permissions Fine-grained access control flags
SaveOptions Full rewrite, incremental, or encrypted save

Пов’язані сторінки