React中Adobe PDF Embed API协作设置失效,用户身份始终为Guest
问题排查与修复方案
你的核心问题是未触发用户身份回调的注册逻辑,导致Adobe PDF Embed SDK无法获取自定义用户信息,因此默认显示为"Guest"。以下是具体问题点和修复步骤:
1. 核心问题:未调用用户身份注册方法
在loadPDF函数中,你创建了ViewSDKClient实例并完成了PDF预览,但从未调用registerEventsHandler方法——而这个方法里才注册了GET_USER_PROFILE_API回调,用于向SDK提供用户身份信息。
2. 修复步骤
步骤1:在PDF预览成功后注册用户身份回调
修改Index.js中的loadPDF函数,在previewFile的Promise完成后调用registerEventsHandler,确保adobeDCView已完全初始化:
const loadPDF = (url = "/WriterModule.pdf") => { const viewSDKClient = new ViewSDKClient(); viewSDKClient.ready().then(() => { viewSDKClient.previewFile( "pdfDiv", { showAnnotationTools: true, showLeftHandPanel: false, showPageControls: true, showDownloadPDF: true, showPrintPDF: false, showDisabledSaveButton: false, // 开启协作功能需添加此配置(根据Adobe官方要求) enableCollaboration: true, }, url ).then(() => { // 预览成功后注册用户身份回调 viewSDKClient.registerEventsHandler(); }).catch(err => { console.error("PDF预览失败:", err); }); }); };
步骤2:修正React事件绑定逻辑
你的onDocumentLoad={loadPDF(url)}会导致组件渲染时立即执行loadPDF,而非在文档加载时触发。改为函数形式避免立即执行:
<div className="filePreview full-window-div col-md-8" id="pdfDiv" onDocumentLoad={() => loadPDF(url)} ></div>
步骤3:验证用户信息结构(可选)
确认registerEventsHandler中的用户信息结构符合Adobe SDK要求,当前你的结构是正确的:
const profile = { userProfile: { name: "John Doe", firstName: "John", lastName: "Doe", email: "gg@gg.com" } };
3. 额外检查项
- 确认
REACT_APP_CLIENT_ID环境变量配置正确,且对应的Adobe应用已启用协作功能 - 确保在
public/index.html中正确引入了Adobe View SDK脚本:<script src="https://documentcloud.adobe.com/view-sdk/main.js"></script>
内容的提问来源于stack exchange,提问作者Gourav Ghosal
相关产品推荐
相关产品推荐

