настройка имени по умолчанию страницы при сохранении её в PDF-файл из печати страницы в Oracle Apex

Вопрос или проблема

Я работаю над страницей печати счёта в Oracle Apex. Эта страница – динамическое содержимое PLSQL. У неё есть кнопка печати, и когда вы на неё нажимаете, открывается страница предварительного просмотра печати. Когда вы выбираете сохранить как PDF вместо печати страницы, я хочу изменить имя по умолчанию на номер счёта, который я сохраняю. Я пытался сделать это, используя код JavaScript на странице, но это не работает. Вот код, который я использовал:
htp.p(‘
Просмотр счёта

// Функция для динамического построения URL с inv_code
function openInvoicePage(inv_code) {
    // Создать новый URL с inv_code
    var baseUrl="https://hekalit.oracleapexservices.com/apexdbl/r/hekalit22/ite-i-com-erp-for-emaar159/invoicepage/P48_INV_CODE";
    var session = '&APP_SESSION.';
    var fullUrl = baseUrl + :P48_INV_CODE + '?session=' + session;

    // Перенаправить на созданный URL
    window.location.href = fullUrl;
}
</script>
 '); ```
Может кто-нибудь помочь мне?

Ответ или решение

Как изменить имя PDF-файла при сохранении из страницы печати в Oracle APEX

Работа с печатью и экспортом документов в Oracle APEX может быть довольно сложной задачей, особенно когда дело касается настройки имени файла PDF. Давайте разберем, как изменить имя PDF-файла, сохраняемого со страницы печати, чтобы оно отражало номер счета (invoice number).

1. Понимание проблемы

Ваша задача состоит в том, чтобы задать имя PDF-файлу, соответствующее номеру счета, когда пользователь выбирает опцию «Сохранить как PDF» на странице предпросмотра печати. Вы уже пробовали использовать JavaScript для генерирования URL для этой задачи, но, к сожалению, это не сработало.

2. Стандартный подход

Oracle APEX использует механизм, встроенный в браузер для обработки печати и сохранения файлов. При сохранении PDF нейминг обычно управляется сервером и настройками документа, а не клиентским кодом. Однако мы можем использовать метод программирования для достижения необходимого результата.

3. Настройка имени файла PDF

Чтобы изменить имя файла при его загрузке, вам необходимо установить правильный заголовок в PL/SQL-коде, который генерирует PDF-документ. Это можно сделать следующим образом:

Пример кода

  1. Создание PL/SQL-процедуры для генерации PDF:

    DECLARE
       l_output_file BLOB;
       l_file_name   VARCHAR2(100);
    BEGIN
       -- Получение номера счета
       l_file_name := 'Invoice_' || :P48_INV_CODE || '.pdf';
    
       -- Генерация PDF из PLSQL Dynamic Content
       -- (Предположим, что генерация BLOB происходит здесь)
    
       -- Установка заголовка для корректного имени файла
       OWA_UTIL.mime_header('application/pdf', FALSE);
       HTP.p('Content-Disposition: attachment; filename="' || l_file_name || '"');
       HTP.p('Content-Length: ' || DBMS_LOB.getlength(l_output_file));
       HTP.p('');  -- Пустая строка для разделения заголовка и содержимого
    
       -- Отправка файла
       WTP.write(l_output_file);
    END;
  2. Обновление кода на странице:
    Убедитесь, что ваша кнопка «Печать» вызывает эту процедуру. Например:

    <button onclick="openInvoicePage(:P48_INV_CODE)">Показать счет</button>

4. Исправление JavaScript

Ваш JavaScript код для переключения на нужную страницу выглядит корректно, но убедитесь, что URL правильно формируется и что ваша переменная с номером счета (:P48_INV_CODE) передается в функцию. Если это не так, попробуйте следующий код:

function openInvoicePage(inv_code) {
    var baseUrl = "https://hekalit.oracleapexservices.com/apexdbl/r/hekalit22/ite-i-com-erp-for-emaar159/invoicepage/P48_INV_CODE";
    var session = "&APP_SESSION=" + encodeURIComponent(document.cookie.split('; ').find(row => row.startsWith('APEX'))?.split('=')[1]);
    var fullUrl = baseUrl + inv_code + session;

    window.location.href = fullUrl;
}

5. Тестирование решения

После внедрения изменений обязательно протестируйте функцию, чтобы удостовериться, что новое имя файла корректно устанавливается и файл генерируется без ошибок. Убедитесь, что все переменные определены и переданы правильно.

Заключение

С изменением имени файла PDF при его сохранении в Oracle APEX можно справиться с помощью настройки серверной части кода PL/SQL. Этот подход позволяет установить имя файла, основанное на значении переменной, предоставленной пользователем. Как всегда, тестируйте изменения в безопасной среде, прежде чем обновлять производственный сайт, чтобы избежать непредвиденных ошибок.

Оцените материал
Добавить комментарий

Капча загружается...