Как использовать переменную в API встраивания PDF-файлов Adobes в качестве значения URL?

Я использую ADOBE pdf embed API (https://www.adobe.io/apis/documentcloud/dcsdk/docs.html?view=view) для отображения PDF-файлов в модальных окнах на моем сайте. Поскольку я хочу, чтобы модальные окна менялись только в одной крошечной детали (URL-адрес файла pdf, отображаемый там), я хотел использовать имя файла динамически. Так я и сделал:

             document.addEventListener("adobe_dc_view_sdk.ready", function() {
                                var adobeDCView = new AdobeDC.View({
                                    clientId: "xyz",
                                    divId: "adobe-dc-view"
                                });
                                adobeDCView.previewFile({
                                    content: {
                                        location: {
                                            var model_filename_chosen = "https://www.URL.com/files/" +
                                                var model_filename;
                                           // Does get printed correctly
                                            console.log(model_filename_chosen);
                                          //doesn't get parsed at all
                                            url: model_filename_chosen
                                        }
                                    },
                                    metaData: {
                                        fileName: "Something"
                                    }
                                }, {

                                });
                            });

И что в шапке перед ним

      function openFahrzeugModal(data) {
        x = new bootstrap.Modal(document.getElementById("modalFahrzeug"));
        x.toggle();
        $('#input_model_hidden').val(data);
        var model_filename = data;
        console.log(data);
    }

И триггер для них выглядит примерно так:

      <a onclick="openFahrzeugModal('myfile1.pdf')">
   

Таким образом, любой журнал печатается правильно, но PDF-файл вообще не отображается, модальное окно открывается правильно. Переменная правильно печатается в других элементах модального окна, но внутри Adobe embed-thing результат пустой. Я использую один и тот же домен для кода и файла, и мой ключ API действителен. Как только я ввожу статический URL-адрес (такой же, как тот, который печатается на консоли), PDF-файл отображается правильно.

Почему это так и что мне нужно исправить?

2 ответа

Это вопрос времени. Код, который у вас есть наверху, будет запущен, как только наша библиотека будет загружена. Вместо этого вы хотите previewFileкод для запуска только при вводе пользователем. Я бы изменил openFahrzeugModalтак что он будет запускать эту часть. Что-то вроде этого:

      function openFahrzeugModal(data) {
   x = new bootstrap.Modal(document.getElementById("modalFahrzeug"));
   x.toggle();
   $('#input_model_hidden').val(data);
   var model_filename = data;
   var model_filename_chosen = "https://www.URL.com/files/" +  model_filename;

   adobeDCView.previewFile({
      content: {
         location: {
           url: model_filename_chosen
         }
      },
      metaData: {
         fileName: "Something"
      }
   }, {
   });
 }

Я напечатал это вручную, так что он может быть не идеальным. Однако знайте, что вы не хотите запускать событие щелчка, пока библиотека не будет готова. Обычно я назначаю обработчик кликов в JS, а не HTML, и делаю это внутри обработчика событий для adobe_dc_view_sdk.ready.

Спасибо Рэймонд, очень хорошо помог с этим сценарием.

копирую и исправляю

      function OpenPdf(data) {
    let adobeDCView = new AdobeDC.View({clientId: ADOBE_KEY, divId: "pdfDisplay" });
   var model_filename = data;
   var model_filename_chosen = "your URL" +  model_filename;
   adobeDCView.previewFile({
     content: {location: {url: model_filename_chosen}},
     metaData: {fileName: "yournamefile.pdf" }
   });
 }

Я разработчик Coldfusion, и у меня есть массив json, а в этом файле есть имя файла pdf.

Я сделал этот цикл с вызовом функции

      <p id="navLinks" style="display:none">
<cfloop index="i" from="1" to="#arrayLen(res.contracts)#"> 

     <cfoutput>
        Periodo: #res.contratos[i].period#> -- <button onclick="OpenPdf('#res.contracts[i].document#')">Open contract</button><br> 
     </cfoutput>
</cfloop> 
</p>    

<div id="pdfDisplay"></div>

Но в другом json у меня есть поле, где у меня есть файл pdf в формате base64. PDF API может читать двоичные переменные? Или я должен сначала записать его на диск, а затем передать URL-адрес PDF? Я хотел бы скрыть URL-адрес PDF по соображениям безопасности.

На самом деле у меня есть это, и я открываю файл в браузере с новой вкладкой, но я хочу использовать PDF API.

      <cfset myPDF = ToBinary(cfData.content)>
<cfcontent type="application/pdf" variable="#myPDF#">

С уважением

Другие вопросы по тегам