You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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读取时注释功能始终显示?


排查与解决步骤

  1. 修正工具项移除逻辑,避免误删注释工具
    原代码中用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);
  1. 延迟工具条修改,等待文档完全加载
    文档未加载完成就修改工具条,可能导致注释工具初始化异常。把工具条操作放到文档加载完成事件中:
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);
  1. 手动添加注释工具项(如果缺失)
    如果确认工具条中没有注释工具,可以手动添加:
var toolbarItems = pdfViewer.GetToolbarItems();
// 移除不需要的项后,检查并添加注释工具
if (!toolbarItems.Any(item => item is AnnotationToolbarItem))
{
    toolbarItems.Add(new AnnotationToolbarItem());
}
await pdfViewer.SetToolbarItemsAsync(toolbarItems);
  1. 检查PDF文档的注释权限
    部分PDF可能设置了禁止注释的权限,导致工具无法显示。可以通过代码验证:
var document = DocumentSource.CreateFromStorageFile(file);
var loadedDoc = await document.LoadDocumentAsync();
var canAnnotate = loadedDoc.SecurityInfo.Permissions.CanAnnotate;
// 输出权限状态,排查是否被限制
Debug.WriteLine($"文档允许注释:{canAnnotate}");

内容的提问来源于stack exchange,提问作者cielo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 04:37:40