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;
}
相关推荐
专注VB编程开发20年7 小时前
AI 生成C# WinForm 窗体 = 目前就是垃圾
开发语言·人工智能·c#
z落落8 小时前
C# 泛型接口和泛型类+泛型约束
开发语言·c#
阿正的梦工坊8 小时前
【Rust】08-集合类型、字符串与迭代器入门
开发语言·rust·c#
FuckPatience8 小时前
C# 使用泛型协变将派生类类型替换为基类类型
开发语言·c#
guygg888 小时前
C# 生成中间带 Logo 头像的二维码
开发语言·c#
Java面试题总结9 小时前
C#12 中的 Using Alias
开发语言·windows·c#
加号39 小时前
【C#】 ASCII 码转字符串技术解析
开发语言·c#
2601_9618752410 小时前
高考真题word版下载|2025高考全科真题可编辑文档
c#·word·ar·vr·mr·高考·oneflow
阿正的梦工坊12 小时前
【Rust】09-泛型、Trait 与生命周期基础
开发语言·rust·c#
z落落12 小时前
C# 事件(Event)+自定义带参数事件例子
开发语言·分布式·c#