Oracle Apex PDF Viewer - PullRequest
       13

Oracle Apex PDF Viewer

0 голосов
/ 26 октября 2018

Я новичок в Oracle-Apex. Мне нужна помощь, чтобы показать PDF в Oracle APEX. У меня есть вопрос: я загрузил PDF в базу данных. Я сохраняю PDF как блоб в базе данных. После этого я показал название PDF в Классическом отчете. Когда я нажимаю на имя, я хочу увидеть предварительный просмотр загруженного PDF. Сейчас я ищу способ показать PDF с кодом. Может ли кто-нибудь помочь?

Мне нужна предыдущая и следующая кнопка.

Как мне показать этот PDF-файл в регионе? вот моя страница

1 Ответ

0 голосов
/ 27 октября 2018

Вот пример, который я быстро набрал, используя APEX_APPLICATION_TEMP_FILES. Надеюсь, это то, что вы пытаетесь достичь. https://apex.oracle.com/pls/apex/f?p=34781

Имя пользователя: демо
Пароль: демо

Используется проект PDF.js от Mozilla. Вот быстрый рецепт того, что вам может понадобиться.

  1. Создайте элемент страницы File Browse и установите тип хранилища на Table APEX_APPLICATION_TEMP_FILES.
  2. Создайте кнопку страницы для отправки страницы.
  3. Создайте область классического отчета и введите следующий запрос:

    select
        id
        , filename
    from apex_application_temp_files
    where application_id = :APP_ID
    
  4. Добавить виртуальный столбец и установить выражение HTML:

    <button type="button" class="btn-preview-pdf" data-id="#ID#">Preview</button>
    
  5. Создайте регион и введите в Источник следующее:

    <canvas id="preview-pane"></canvas> 
    
  6. Создать динамическое действие Click.

    а. Установите тип выбора на jQuery Selector.

    б. Введите jQuery Selector .btn-preview-pdf.

  7. Добавьте действие Execute JavaScript Code со следующим JS-кодом (см. Примеры на веб-сайте PDF.js для получения более подробной информации о том, что делает код):

    var fileId = $(this.triggeringElement).data('id');
    var docUrl = 'f?p=&APP_ID.:0:&APP_SESSION.:APPLICATION_PROCESS=DOWNLOADPDF:::FILE_ID:' + fileId;
    var previewPane = this.affectedElements[0];
    
    // from PDF.js examples
    pdfjsLib.getDocument(docUrl).then(function(pdf) {
        var pageNumber = 1;
        pdf.getPage(pageNumber).then(function(page) {
            console.log('Page loaded');
    
            var scale = 1.5;
            var viewport = page.getViewport(scale);
    
            // Prepare canvas using PDF page dimensions
            var canvas = previewPane;
            var context = canvas.getContext('2d');
            canvas.height = viewport.height;
            canvas.width = viewport.width;
    
            // Render PDF page into canvas context
            var renderContext = {
                canvasContext: context,
                viewport: viewport
            };
            var renderTask = page.render(renderContext);
            renderTask.then(function () {
                console.log('Page rendered');
            });
        })
    }, function(reason) {
        console.error(reason);
    });
    
  8. Для действия также установите Затронутые элементы:

    а. Тип выбора: jQuery Selector

    б. JQuery Selector: #preview-pane

  9. Следуйте посту Джоэля Каллмана * при создании ссылки для загрузки файла. Вам понадобится прикладной процесс (DOWNLOADPDF) и элемент приложения (FILE_ID). Модифицированный код для прикладного процесса DOWNLOADPDF выглядит следующим образом:

    begin
        for file in (select *
                    from apex_application_temp_files
                    where id = :FILE_ID) loop
            --
            sys.htp.init;
            sys.owa_util.mime_header( file.mime_type, FALSE );
            sys.htp.p('Content-length: ' || sys.dbms_lob.getlength( file.blob_content));
            sys.htp.p('Content-Disposition: attachment; filename="' || file.filename || '"' );
            sys.htp.p('Cache-Control: max-age=3600');  -- tell the browser to cache for one hour, adjust as necessary
            sys.owa_util.http_header_close;
            sys.wpg_docload.download_file( file.blob_content );
    
            apex_application.stop_apex_engine;
        end loop;
    end;
    
  10. Почти пропустил это. На странице Атрибуты задайте URL-адрес файла JavaScript для любого из CDN , перечисленных . Например:

    // cdnjs.cloudflare.com/ajax/libs/pdf.js/2.0.550/pdf.min.js

Обратите внимание, что это очень простой прототип. Предварительный просмотр позволяет только просматривать первую страницу. Вам нужно будет выяснить API , а затем сделать все необходимое, чтобы разрешить многостраничный просмотр. Я оставлю тебя, чтобы понять это.

Так и должно быть. Дайте мне знать, если это не сработает для вас.

...