Sample code for 30+ languages & platforms
Lua Requires Chilkat v11.7.0+

Extract Text from a Password-Protected PDF

See more PDF Text Extraction Examples

Demonstrates extracting text from a PDF that requires a password to open. The PDF loads without the password (its structure can be read), but the "text" operation fails because the content cannot be decrypted; "assess" reports that a password is required. With the UserPassword property set before loading, extraction works normally.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.

-- The PDF used in this example (user password: secret) is available at encrypted_user_password.pdf

local pdf = chilkat.Pdf.new()
local json = chilkat.JsonObject.new()
local jsonOut = chilkat.JsonObject.new()

-- The PDF loads without its password: the file's structure is readable, so properties such as
-- NumPages and the security settings are available...
local success = pdf:load_file("qa_data/pdf/encrypted_user_password.pdf")
if not success then
    print(pdf.last_error_text)
    return
end

-- ...but the content cannot be decrypted, so extracting text fails.
success = pdf:extract_text("text", json, jsonOut)
if not success then
    print("Cannot extract: " .. pdf.last_error_text)
end

-- "assess" still works: it reports that a password is required and nothing else.
success = pdf:extract_text("assess", json, jsonOut)
if not success then
    print(pdf.last_error_text)
    return
end

print("passwordRequired: " .. tostring(jsonOut:bool_of("quality.passwordRequired")))
print("rating: " .. jsonOut:string_of("quality.rating"))

-- Set the password and load again.
pdf.user_password = "secret"
success = pdf:load_file("qa_data/pdf/encrypted_user_password.pdf")
if not success then
    print(pdf.last_error_text)
    return
end

success = pdf:extract_text("text", json, jsonOut)
if not success then
    print(pdf.last_error_text)
    return
end

print(jsonOut:string_of("text"))

-- Sample output:

-- Cannot extract: ChilkatLog:
--   ExtractText:
--     ...
--       The PDF is encrypted and could not be opened (wrong or missing password); its text cannot be read.
--     ...
-- passwordRequired: true
-- rating: none
-- Board Minutes (Confidential)
--
-- The board met on 3 November 2026. Present: the chair, the treasurer and four members. The treasurer reported that spending for the season came in under budget.
--
-- The meeting closed at 8.45 p.m.