PdfiumViewer使用权限控制期操作按钮(PdfViewer其实也可以完整兼容)

如果是 还用 方法都在这里

var pdfViewer = new PdfiumViewer.PdfViewer();

在 wpf下使用嵌入view 的方法 :

"通过 NuGet 安装核心包和原生依赖:

csharp 复制代码
Install-Package PdfiumViewer
Install-Package PdfiumViewer.Native.x86_64.v8-xfa(或者根据你的目标平台选择 x86)

在 WPF 的 XAML 中使用 WindowsFormsHost 承载:

csharp 复制代码
<Grid>
    <WindowsFormsHost x:Name="pdfHost" />
</Grid>

把相关控件放到指定winform控件内:

csharp 复制代码
var pdfViewer = new PdfiumViewer.PdfViewer();
pdfViewer.Document = PdfiumViewer.PdfDocument.Load("你的文件路径.pdf");
pdfHost.Child = pdfViewer;
  1. 限制界面上的打印按钮(UI 层面)
    如果你使用的是 PdfiumViewer 自带的 PdfViewer 控件,无法直接隐藏或禁用工具栏上的打印按钮。因为 PdfViewer 是一个封装好的"开箱即用"控件,其工具栏功能是内置且受限的,不支持直接修改或隐藏特定按钮。
    💡 解决方案:使用底层 PdfRenderer 控件自定义界面
    如果你希望完全控制工具栏(例如去掉打印按钮),建议放弃直接使用 PdfViewer,转而使用更底层的 PdfRenderer 控件。PdfRenderer 只负责 PDF 的渲染,不包含默认工具栏,你可以自己编写 WPF 或 WinForms 的 UI 来搭配它。
    实现思路:
    在 WindowsFormsHost 中承载 PdfRenderer 控件。
    在 WPF 中自己绘制工具栏(添加缩放、翻页等按钮,但不添加打印按钮)。
    通过代码将 PdfRenderer 与你的自定义按钮绑定。

// 后台代码示例:加载文档到 PdfRenderer(没有默认打印按钮)

csharp 复制代码
var document = PdfiumViewer.PdfDocument.Load("你的文件路径.pdf");
pdfRenderer1.Document = document;//如果此段有问题未找到这个属性 咱们可以用另一种方式:  _pdfViewer.Load(_pdfDocument);

这样,界面上就彻底没有了打印按钮,用户无法通过 UI 触发打印。

  1. 限制 PDF 文件本身的打印权限(文件安全层面)

仅仅隐藏界面上的打印按钮是不够的,用户依然可以通过快捷键(如 Ctrl + P)或者通过其他 PDF 阅读器打开文件来打印。如果你想从根本上限制打印,需要对 PDF 文件本身设置安全权限。

使用PdfRenderer 的操作方法是:(其实与上面PdfViewer操作相同)

csharp 复制代码
// 放大按钮点击事件
private void BtnZoomIn_Click(object sender, RoutedEventArgs e)
{
    pdfRenderer.ZoomMode = PdfViewerZoomMode.Custom; // 切换到自定义模式
    pdfRenderer.Zoom += 0.1; // 每次点击放大 10%
}

// 缩小按钮点击事件
private void BtnZoomOut_Click(object sender, RoutedEventArgs e)
{
    pdfRenderer.ZoomMode = PdfViewerZoomMode.Custom;
    if (pdfRenderer.Zoom > 0.2) // 设置一个最小缩放限制
    {
        pdfRenderer.Zoom -= 0.1; // 每次点击缩小 10%
    }
}

// 适应宽度按钮点击事件
private void BtnFitWidth_Click(object sender, RoutedEventArgs e)
{
    pdfRenderer.ZoomMode = PdfViewerZoomMode.FitToWidth;
}
相关推荐
张小俊_2 小时前
WPF 跨线程 UI 更新与硬编码赋值引发的 Bug 排查
c#·bug·wpf
無斜2 小时前
【CAPL实用开发】--- CAPL调用 .NET DLL
开发语言·c#·capl·canoe
puamac3 小时前
UcTabWindow 布局多tab,加载编辑器和资源管理器等自定义控件
c#·编辑器·datagridview
唐青枫3 小时前
别再把增删改查写成一锅粥!C#.NET CQRS 从原理到实战
c#·.net
czhc114007566312 小时前
C# 428 线程、异步
开发语言·c#
唐青枫13 小时前
C#.NET ThreadLocal 深入解析:线程独享数据、性能收益与实战边界
c#·.net
烟话620 小时前
实际内存条,虚拟内存,堆,栈
c#
归途醉染20 小时前
Swifter.Json
c#·json·swifter.json
伽蓝_游戏21 小时前
第一章:解构游戏资源
游戏·unity·性能优化·c#·游戏引擎·游戏程序·assetbundle