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

Find Out Whether a PDF Needs a Password Before Loading It

See more PDF Protection Examples

Demonstrates PreLoadCheck, which examines a PDF file without loading it and without any password. It reports whether the file is encrypted, by which method and algorithm, whether a password is needed to open it, and what its permissions are. An application uses it to decide whether to ask for a password, or which certificate it needs, before calling LoadFile. PreLoadCheckBd does the same for a PDF held in memory.

Chilkat SQL Server Downloads

SQL Server
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
    DECLARE @hr int
    DECLARE @iTmp0 int
    DECLARE @sTmp0 nvarchar(4000)
    DECLARE @success int
    SELECT @success = 0

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

    --  The PDF used in this example is available at two_page_memo.pdf

    --  The PDF used in this example is available at encrypted_user_password.pdf

    --  The PDF used in this example is available at no_copy_permission.pdf

    DECLARE @pdf int
    EXEC @hr = sp_OACreate 'Chilkat.Pdf', @pdf OUT
    IF @hr <> 0
    BEGIN
        PRINT 'Failed to create ActiveX component'
        RETURN
    END

    DECLARE @info int
    EXEC @hr = sp_OACreate 'Chilkat.JsonObject', @info OUT

    --  A PDF that is not encrypted.  Nothing but "encrypted" is reported for it.
    EXEC sp_OAMethod @pdf, 'PreLoadCheck', @success OUT, 'qa_data/pdf/two_page_memo.pdf', @info
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @pdf, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @pdf
        EXEC @hr = sp_OADestroy @info
        RETURN
      END

    PRINT 'two_page_memo.pdf'

    EXEC sp_OAMethod @info, 'BoolOf', @iTmp0 OUT, 'encrypted'
    PRINT '  encrypted: ' + @iTmp0

    --  A PDF that needs a password to open.
    EXEC sp_OAMethod @pdf, 'PreLoadCheck', @success OUT, 'qa_data/pdf/encrypted_user_password.pdf', @info
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @pdf, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @pdf
        EXEC @hr = sp_OADestroy @info
        RETURN
      END

    PRINT 'encrypted_user_password.pdf'

    EXEC sp_OAMethod @info, 'BoolOf', @iTmp0 OUT, 'encrypted'
    PRINT '  encrypted: ' + @iTmp0

    EXEC sp_OAMethod @info, 'StringOf', @sTmp0 OUT, 'method'
    PRINT '  method: ' + @sTmp0

    EXEC sp_OAMethod @info, 'StringOf', @sTmp0 OUT, 'algorithm'
    PRINT '  algorithm: ' + @sTmp0

    EXEC sp_OAMethod @info, 'BoolOf', @iTmp0 OUT, 'openPasswordRequired'
    PRINT '  openPasswordRequired: ' + @iTmp0

    --  A PDF that opens without a password but is restricted.  The permissions are readable without
    --  any password.
    EXEC sp_OAMethod @pdf, 'PreLoadCheck', @success OUT, 'qa_data/pdf/no_copy_permission.pdf', @info
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @pdf, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @pdf
        EXEC @hr = sp_OADestroy @info
        RETURN
      END

    PRINT 'no_copy_permission.pdf'

    EXEC sp_OAMethod @info, 'BoolOf', @iTmp0 OUT, 'encrypted'
    PRINT '  encrypted: ' + @iTmp0

    EXEC sp_OAMethod @info, 'BoolOf', @iTmp0 OUT, 'openPasswordRequired'
    PRINT '  openPasswordRequired: ' + @iTmp0

    EXEC sp_OAMethod @info, 'BoolOf', @iTmp0 OUT, 'permissions.copy'
    PRINT '  may copy: ' + @iTmp0

    --  The typical use: ask for a password only when one is needed, then load.
    EXEC sp_OAMethod @pdf, 'PreLoadCheck', @success OUT, 'qa_data/pdf/encrypted_user_password.pdf', @info
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @pdf, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @pdf
        EXEC @hr = sp_OADestroy @info
        RETURN
      END
    EXEC sp_OAMethod @info, 'BoolOf', @iTmp0 OUT, 'openPasswordRequired'
    IF @iTmp0 = 1
      BEGIN
        --  An application would prompt for the password here.
        EXEC sp_OASetProperty @pdf, 'UserPassword', 'secret'
      END
    EXEC sp_OAMethod @pdf, 'LoadFile', @success OUT, 'qa_data/pdf/encrypted_user_password.pdf'
    IF @success = 0
      BEGIN
        EXEC sp_OAGetProperty @pdf, 'LastErrorText', @sTmp0 OUT
        PRINT @sTmp0
        EXEC @hr = sp_OADestroy @pdf
        EXEC @hr = sp_OADestroy @info
        RETURN
      END

    EXEC sp_OAGetProperty @pdf, 'NumPages', @iTmp0 OUT
    PRINT 'loaded, pages: ' + @iTmp0

    --  Sample output:

    --  two_page_memo.pdf
    --    encrypted: False
    --  encrypted_user_password.pdf
    --    encrypted: True
    --    method: password
    --    algorithm: rc4-128
    --    openPasswordRequired: True
    --  no_copy_permission.pdf
    --    encrypted: True
    --    openPasswordRequired: False
    --    may copy: False
    --  loaded, pages: 1

    EXEC @hr = sp_OADestroy @pdf
    EXEC @hr = sp_OADestroy @info


END
GO