Как использовать переменную в 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#">
С уважением