0

我使用 Adob​​e PDF Embed API ( https://www.adobe.io/apis/documentcloud/dcsdk/docs.html?view=view ) 在我的网站上的模态框内显示 pdf。因为我希望模态只改变一个微小的细节(那里显示的 pdf 的文件 URL),所以我想动态使用文件名。所以我这样做了:

       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,模式打开正确。该变量确实可以正确打印在模态的其他元素中,但在 Adob​​e embed-thing 中结果为空。我确实对代码和文件使用相同的域,并且我的 API 密钥是有效的。一旦我输入一个静态 URL(与控制台上打印的基本相同),pdf 就会正确显示。

为什么会这样,我需要解决什么问题?

4

1 回答 1

0

这是一个时间问题。加载我们的库后,您在上面的代码将立即运行。相反,您想要的是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.

于 2021-07-30T13:04:28.870 回答