SearchAndReplaceTextInContentEx

提取、Unicode、内容编辑

描述

使用精确的源字节范围与经过验证的字体映射,替换受支持页面文本中每一处不重叠的查询匹配

该方法保留周围文本、既有 TJ 数值调整与原始的后续文本锚点;空替换只删除匹配到的字符

所有选定命中都会在页面内容提交之前完成规划与重写;无法表示的文本、不完整的字体映射或不受支持的源位置会拒绝请求,且不替换任何所选页面文本

语法

Delphi

Function TPDFlib.SearchAndReplaceTextInContentEx(Const Query, Replacement: WideString; Options: TPDFlibSearchOptions; Const PageRange: WideString; ReplacementFontID: Integer): Integer;

DLL

Function DLSearchAndReplaceTextInContentEx(InstanceID: Integer; Query: PWideChar; Replacement: PWideChar; Options: Integer; PageRange: PWideChar; ReplacementFontID: Integer): Integer; Stdcall;
Function DLSearchAndReplaceTextInContentExA(InstanceID: Integer; Query: PAnsiChar; Replacement: PAnsiChar; Options: Integer; PageRange: PAnsiChar; ReplacementFontID: Integer): Integer; Stdcall;

ActiveX

Function PDFlib::SearchAndReplaceTextInContentEx(Query: WideString; Replacement: WideString; Options: Integer; PageRange: WideString; ReplacementFontID: Integer): Integer;

参数

ReplacementFontID 为 0 时使用原字体;正值必须标识所选文档中具有完整已验证编码的字体

替换字体只用于替换的文本段,未触及的后缀会恢复原字体;此方法不会自动选择或安装字体

DLL 与 ActiveX 的 Options 按枚举顺序把搜索标志用作位 1、2、4、8、16、32、64 与 128;soAcrossLines 是位 16,在此不受支持;未知位会被这些门面拒绝

DLL A 输入字符串按实例的 ANSI 到宽字符转换配置解码;要独立于该配置传入 Unicode,请使用宽字符入口点

返回值

返回被替换的匹配数,无匹配或请求被拒绝时返回 0;请检查 GetLastUnicodeReplacementDiagnostics 来区分这两种结果

LastErrorCode 535 表示输入无效或捕获超限;537 表示编辑或编码不受支持;有效搜索但无匹配会报告 completed 且 replacedHits 为 0

备注

映射来自完全受支持的 ToUnicode CMap 或经过验证的简单字体编码,包括受支持的 Differences 字形名;不使用系统代码页转换或猜测的字形编码

简单字体必须提供有效的 PDF Widths、FirstChar 与 LastChar,或使用不带 Widths 的精确标准十四种 Type1 字体名;系统字体回退与宽松名称匹配不能授权精确步进

命名的 UseCMap 继承、未解析的映射、Type3 字体步进、竖排文本、嵌套 Form 文本、合成字符、ActualText 替换、转码字符串、跨层匹配与不完整的连字簇都会报告为不受支持

连字簇在其原始字节与 Unicode 映射均经过验证时可以整体替换;其前缀与后缀保留原字体

搜索选项保留其既有含义,包括大小写、全词、通配符、变音符、规范等价与字位约束;soAcrossLines 与在打开的 API 作用域内的调用会被拒绝

规划最多支持 4096 个匹配;捕获的源快照限制为每流 64 MiB、总计 512 MiB,捕获的源位置记录限制为 64 MiB;字体映射解析器同样施加有界的 token 与 code-space 限制,事务总量为 262144 个映射与 8 Mi 个 UTF-16 目标单元

这些限制约束的是保留的捕获与规划数据;既有的页面加载与渲染有各自的分配,因此它们不保证绝对峰值内存用量

共享的内容流与资源字典会为选定页面复制;文档选择会被还原,过期的文本块列表在编辑成功后必须重新提取

此操作会改动活动页面内容,并不是安全擦除 API:已脱离的对象或更早的增量修订版本可能保留原始字节

另请参阅

SearchAndReplaceTextInContent、SearchAndReplaceTextInContentEx、GetLastUnicodeReplacementDiagnostics、SearchText