Adobe Embed API保存失效求助:嵌入PDF修改后无法保存
问题:Adobe Embed API嵌入PDF后保存操作无效
我使用Adobe Embed API在网页中嵌入PDF,支持添加批注、标记等操作,所有文件存储在DigitalOcean Spaces。目前遇到的问题是:修改PDF后点击「保存」按钮,实际并未完成保存。
解决方向
- 完善Save API回调的实际保存逻辑:当前的Save回调仅直接返回成功状态,但没有执行将修改后的PDF上传至DigitalOcean Spaces的核心操作。回调函数的
content参数包含了修改后的PDF二进制数据,需要在Promise内部完成上传流程,成功后再调用resolve,失败则调用reject。 - 确认DigitalOcean Spaces的权限与上传路径:确保你的服务具备向Spaces写入文件的权限,可通过后端接口中转上传(更安全),或配置Spaces的CORS规则与签名机制支持前端直接上传。
- 验证Save回调是否触发:在Save回调函数内添加
console.log(metadata, content),查看浏览器控制台是否有输出,确认点击保存时回调是否被正确调用。 - 调整回调注册与previewFile的顺序:建议先完成所有回调的注册,再调用
adobeDCView.previewFile(),确保SDK初始化时已绑定好回调逻辑。 - 检查只读权限配置:确认
metaData中的hasReadOnlyAccess值为false,如果read_only变量在编辑场景下被设为true,会直接禁止保存操作。
相关代码
JS代码(adobe-embed.js)
document.addEventListener("adobe_dc_view_sdk.ready", function() { var adobeDCView = new AdobeDC.View({ clientId: adobe_key, divId: "adobe-dc-view" }); // 先注册回调,再预览文件 adobeDCView.registerCallback( AdobeDC.View.Enum.CallbackType.SAVE_API, function(metadata, content, options) { return new Promise((resolve, reject) => { // 示例:通过后端接口中转上传至DigitalOcean Spaces fetch('/api/upload-modified-pdf', { method: 'POST', body: content, headers: { 'Content-Type': 'application/pdf', 'X-File-Name': metadata.fileName } }) .then(response => { if (response.ok) { resolve({ code: AdobeDC.View.Enum.ApiResponseCode.SUCCESS, data: { metaData: metadata } }); } else { reject({ code: AdobeDC.View.Enum.ApiResponseCode.FAIL, data: { message: '保存失败,请重试' } }); } }) .catch(error => { reject({ code: AdobeDC.View.Enum.ApiResponseCode.FAIL, data: { message: error.message } }); }); }); }, saveOptions ); adobeDCView.registerCallback( AdobeDC.View.Enum.CallbackType.GET_USER_PROFILE_API, function() { return new Promise((resolve, reject) => { resolve({ code: AdobeDC.View.Enum.ApiResponseCode.SUCCESS, data: profile }); }); }, ); adobeDCView.previewFile({ content: { location: { url: document_url } }, metaData: { fileName: file_name, hasReadOnlyAccess: read_only } }); });
HTML渲染代码
<!DOCTYPE html> {% load static %} <html lang="en"> <head> <meta charset="utf-8"/> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> <meta id="viewport" name="viewport" content="width=device-width, initial-scale=1"/> <link rel="shortcut icon" href="{% static 'assets/images/favicon.png' %}" /> </head> <body style="margin: 0px"> <div id="adobe-dc-view"></div> <script src="https://documentcloud.adobe.com/view-sdk/viewer.js"></script> <script type="text/javascript"> var document_url = '{{ url }}'; var file_name = '{{ filename }}'; var read_only = {{ read_only }}; var adobe_key = '{{ adobe_embed_key }}'; const profile = { userProfile: { name: '{{ user.name }}', firstName: '{{ user.fname }}', lastName: '{{ user.lname }}', email: '{{ user.email }}' } }; const saveOptions = { autoSaveFrequency: 0, enableFocusPolling: false, showSaveButton: true }; </script> <script type="text/javascript" src="{% static 'assets/js/htw/adobe-embed.js' %}"></script> </body> </html>
内容的提问来源于stack exchange,提问作者joro
相关产品推荐
相关产品推荐

