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

如何使用QRPDFDocumentFilter生成不可修改的受保护PDF文件?

关于用TQRPDFDocumentFilter生成受保护PDF的解决方案

默认情况下,TQRPDFDocumentFilter本身并不直接支持生成带保护的PDF,但有两种可靠的方式实现你“创建无法被修改的PDF”的目标:

方案一:利用新版QuickReport的内置加密属性(推荐)

如果你的QuickReport版本是6.0及以上,官方已经给TQRPDFDocumentFilter添加了加密和权限控制的属性,可以直接在导出时设置:

try
  lPdfFilter := TQRPDFDocumentFilter.Create(nomefile);
  // (可选)设置打开PDF需要的密码
  lPdfFilter.Password := 'your_open_password';
  // 设置权限密码(用于控制修改权限,必须设置才能限制修改)
  lPdfFilter.PermissionPassword := 'your_permission_password';
  // 配置权限:只保留打印和复制权限,禁用所有修改相关权限
  lPdfFilter.Permissions := [prPrint, prCopy];
  // 执行导出
  TQuickRep(MainForm.QRPreview1.QRPrinter.ParentReport).ExportToFilter(lPdfFilter);
finally
  FreeAndNil(lPDFFilter);
end;

这里的TPDFPermission枚举里,prModify、prModifyAnnotations、prAssembleDocument这些都是和修改相关的权限,一定要从Permissions集合里排除,只保留你允许的操作。

方案二:先导出普通PDF,再用第三方库加密

如果你的QuickReport版本比较旧,没有内置加密功能,可以先导出无保护的PDF,再用开源/第三方PDF处理库给文件添加权限限制。比如用免费开源的SynPDF库:

示例代码:

uses SynPDF;

// 封装一个加密PDF的函数
procedure EncryptPDF(const InputFile, OutputFile, OpenPassword, PermissionPassword: string);
var
  PDFDoc: TPDFDocument;
begin
  PDFDoc := TPDFDocument.Create(nil);
  try
    PDFDoc.LoadFromFile(InputFile);
    // 设置密码和权限:禁止修改,允许打印、复制
    PDFDoc.Encryption.SetPassword(OpenPassword, PermissionPassword);
    PDFDoc.Encryption.Permissions := epAllowPrinting or epAllowCopy;
    // 保存加密后的PDF
    PDFDoc.SaveToFile(OutputFile);
  finally
    PDFDoc.Free;
  end;
end;

// 主流程:先导出普通PDF,再加密
try
  // 先生成临时无保护PDF
  lPdfFilter := TQRPDFDocumentFilter.Create('temp_unprotected.pdf');
  TQuickRep(MainForm.QRPreview1.QRPrinter.ParentReport).ExportToFilter(lPdfFilter);
finally
  FreeAndNil(lPDFFilter);
end;
// 加密生成最终受保护的PDF(可以留空OpenPassword,只设权限密码)
EncryptPDF('temp_unprotected.pdf', nomefile, '', 'your_permission_pass');

注意事项:

  • 权限限制并非绝对:虽然设置权限后普通用户无法直接修改,但专业的PDF工具仍可能绕过限制,不过足以应对绝大多数场景下的修改需求。
  • 权限密码是核心:如果只需要阻止修改,不需要设置打开密码,仅设置权限密码并禁用修改权限即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:01:46