UWP下PSPDFKit读取PDF时注释功能时有时无问题求助
UWP下PSPDFKit注释功能不稳定问题排查与解决
我在UWP中使用PSPDFKit读取多个PDF文件时,遇到注释功能时有时无的问题,无法稳定显示注释工具。
状态截图说明
- 注释功能正常显示状态
- 注释功能未显示状态
- 注释功能正常显示状态
现有代码
XAML代码
<ui:PdfView x:Name="pdfViewer" Grid.Row="0" License="{StaticResource PSPDFKitLicense}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" ShowAnnotations="True"/>
后台C#代码
var document = DocumentSource.CreateFromStorageFile(file); await pdfViewer.Controller.ShowDocumentAsync(document); var toolbarItems = pdfViewer.GetToolbarItems(); toolbarItems.RemoveAt(toolbarItems.IndexOf(new PanToolbarItem())); toolbarItems.RemoveAt(toolbarItems.IndexOf(new PrintToolbarItem())); toolbarItems.RemoveAt(toolbarItems.IndexOf(new DocumentEditorToolbarItem())); await pdfViewer.SetToolbarItemsAsync(toolbarItems); await pdfViewer.Controller.SetZoomModeAsync(ZoomMode.FitToViewPort);
问题
如何让PDF读取时注释功能始终显示?
排查与解决步骤
- 修正工具项移除逻辑,避免误删注释工具
原代码中用new PanToolbarItem()匹配集合内的项,会因为实例不相等导致匹配失败,进而可能误删其他工具(包括注释工具)。改用类型匹配的方式更可靠:
var toolbarItems = pdfViewer.GetToolbarItems(); // 精准移除目标工具项 var panItem = toolbarItems.FirstOrDefault(item => item is PanToolbarItem); if (panItem != null) toolbarItems.Remove(panItem); var printItem = toolbarItems.FirstOrDefault(item => item is PrintToolbarItem); if (printItem != null) toolbarItems.Remove(printItem); var editorItem = toolbarItems.FirstOrDefault(item => item is DocumentEditorToolbarItem); if (editorItem != null) toolbarItems.Remove(editorItem); await pdfViewer.SetToolbarItemsAsync(toolbarItems);
- 延迟工具条修改,等待文档完全加载
文档未加载完成就修改工具条,可能导致注释工具初始化异常。把工具条操作放到文档加载完成事件中:
pdfViewer.Controller.DocumentLoaded += async (s, e) => { var toolbarItems = pdfViewer.GetToolbarItems(); // 执行工具项移除操作 var panItem = toolbarItems.FirstOrDefault(item => item is PanToolbarItem); if (panItem != null) toolbarItems.Remove(panItem); var printItem = toolbarItems.FirstOrDefault(item => item is PrintToolbarItem); if (printItem != null) toolbarItems.Remove(printItem); var editorItem = toolbarItems.FirstOrDefault(item => item is DocumentEditorToolbarItem); if (editorItem != null) toolbarItems.Remove(editorItem); await pdfViewer.SetToolbarItemsAsync(toolbarItems); await pdfViewer.Controller.SetZoomModeAsync(ZoomMode.FitToViewPort); }; var document = DocumentSource.CreateFromStorageFile(file); await pdfViewer.Controller.ShowDocumentAsync(document);
- 手动添加注释工具项(如果缺失)
如果确认工具条中没有注释工具,可以手动添加:
var toolbarItems = pdfViewer.GetToolbarItems(); // 移除不需要的项后,检查并添加注释工具 if (!toolbarItems.Any(item => item is AnnotationToolbarItem)) { toolbarItems.Add(new AnnotationToolbarItem()); } await pdfViewer.SetToolbarItemsAsync(toolbarItems);
- 检查PDF文档的注释权限
部分PDF可能设置了禁止注释的权限,导致工具无法显示。可以通过代码验证:
var document = DocumentSource.CreateFromStorageFile(file); var loadedDoc = await document.LoadDocumentAsync(); var canAnnotate = loadedDoc.SecurityInfo.Permissions.CanAnnotate; // 输出权限状态,排查是否被限制 Debug.WriteLine($"文档允许注释:{canAnnotate}");
内容的提问来源于stack exchange,提问作者cielo
相关产品推荐
相关产品推荐

