PDF с шифрованием пароля с использованием oracle / PLSQL

#oracle #plsql #pdf-generation

#Oracle #plsql #pdf-генерация

Вопрос:

Есть ли какой-либо способ создать PDF-файл с паролем, спроектированный с помощью PL / SQL, без стороннего jar

Комментарии:

1. Нет. PL / SQL не может изначально создавать файлы PDF без использования какого-либо стороннего программного обеспечения / дополнений.

2. ОК. Доступен ли какой-либо бесплатный пакет, такой как as_pdf3?

3. Вы пробовали as_pdf3? Похоже, что это было какое-то время, но, насколько я могу судить, не обновлялось в последнее время. Я понятия не имею, работает ли он с текущими версиями Oracle или поддерживает ли он защиту паролем (хотя я не вижу никаких доказательств того, что это так).

4. Да, я работаю над этим проектом, используя as_pdf3. Но я пробовал с другим пакетом plpdf, который работает нормально, но это пробная версия. Имя процедуры пакета — plpdf.SetProtection(…). Спасибо за ваш ответ.

Ответ №1:

Вы можете достичь этого также с помощью другого коммерческого пакета OraPdfProtect

Пример кода ниже:

 DECLARE 
  -- input PDF BLOB read handle
  pdf_file_handle BFILE;
  -- input PDF BLOB
  pdf_blob BLOB;  
  -- output encrypted PDF BLOB
  encrypted_pdf_blob BLOB;
 
  -- PDF permissions and password
  user_password VARCHAR2(200);
  owner_password VARCHAR2(200);
  pdf_permissions INTEGER;  
BEGIN
    DBMS_LOB.createtemporary(pdf_blob, TRUE);
    pdf_file_handle := BFILENAME('SSH_KEYS_DIR', '1.pdf'); -- directory name must be Upper case
 
    -- load the data into a BLOB
    DBMS_LOB.OPEN(pdf_file_handle, DBMS_LOB.LOB_READONLY);
    DBMS_LOB.LoadFromFile( pdf_blob, pdf_file_handle, DBMS_LOB.GETLENGTH(pdf_file_handle) );
    DBMS_LOB.CLOSE(pdf_file_handle);
 
    user_password := 'test123';
    owner_password := 'my password';
    pdf_permissions := ORA_PDF_PROTECT.NOCOPY   
                              ORA_PDF_PROTECT.NOASSEMBLY  
                              ORA_PDF_PROTECT.NOMODIFYCONTENTS;
 
    encrypted_pdf_blob := ORA_PDF_PROTECT.ENCRYPT_PDF(pdf_blob, user_password, owner_password, pdf_permissions);
END;
/