PDFium Delphi Component 文件

TPdfMatrix 类

单元: FPdfMatrix
围绕 PDFium FS_MATRIX 的可变面向对象包装器,用于组合 PDF 用户空间变换

语法

type TPdfMatrix = class ... end;

相关类型

类型说明
TPdfPointArrayFS_POINTF 值的动态数组,用于批量点操作
TPdfRectArrayFS_RECTF 值的动态数组,用于批量矩形操作
TPdfMatrixFitMode矩形映射的 pmfStretch、pmfContain 或 pmfCover 适配策略
TPdfMatrixDecomposition由 TryDecompose 返回的平移、带符号缩放、顺时针旋转、剪切、行列式和反射诊断,位于字段 TranslationX、TranslationY、ScaleX、ScaleY、RotationDegrees、ShearDegrees、Determinant 和 IsReflected 中

方法

成员说明
Create创建单位矩阵、六值矩阵,或从 FS_MATRIX 创建防御性副本
NewTranslation创建新的平移矩阵
NewScale创建新的非均匀缩放矩阵
NewRotation以角度或弧度创建顺时针或逆时针旋转矩阵
NewSkew创建具有独立 X 和 Y 剪切角度的矩阵
NewRectMapping创建在目标矩形内拉伸、包含或覆盖源矩形的矩阵
TryCreateRectMapping返回 FS_MATRIX 映射,并在不分配对象的情况下拒绝零尺寸、非有限或溢出的输入
Reset将矩阵重置为单位矩阵
SetElements一次调用替换全部六个矩阵元素
Assign把另一个 TPdfMatrix 或原始 FS_MATRIX 复制到此实例
Clone创建独立的对象副本
Determinant返回线性 2x2 分量的行列式
IsFinite报告每个元素是否都是有限的 Single 值
IsIdentity使用调用方可选的容差测试单位矩阵
IsInvertible在不计算逆矩阵的情况下测试有限且考虑缩放的可逆性
IsTranslationOnly测试线性分量是否为单位矩阵
IsAxisAligned测试矩形是否保持轴对齐,包括容差内的四分之一圈布局
NearlyEquals使用容差与 TPdfMatrix 或 FS_MATRIX 比较
GetTranslation同时读取 X 和 Y 平移元素
SetTranslation在保留线性分量的同时替换 X 和 Y 平移
ClearTranslation把两个平移元素都设为零
TryDecompose当矩阵非奇异时提取平移、带符号缩放、顺时针旋转、剪切、行列式和反射状态
Multiply右乘另一个 TPdfMatrix 或显式的 a 到 f 值
PreMultiply左乘另一个 TPdfMatrix 或显式的六值矩阵
PreTranslate在矩阵的本地输入空间前置一个平移
PreScale前置独立的 X 和 Y 缩放因子
PreRotate前置顺时针或逆时针旋转
PreSkew前置独立的 X 和 Y 剪切角度
Translate按 deltaX 和 deltaY 追加一个平移
Scale追加独立的 X 和 Y 缩放因子
Rotate以角度或弧度追加顺时针或逆时针旋转
HorizontalFlip追加 X 轴翻转
VerticalFlip追加 Y 轴翻转
CentralFlip追加两个轴的翻转,等效于无需三角函数的 180 度旋转
Skew追加独立的 X 和 Y 剪切角度
RotateAt围绕保持固定的枢轴追加旋转
ScaleAt围绕保持固定的枢轴追加缩放
SkewAt围绕保持固定的枢轴追加剪切
HorizontalFlipAt围绕调用方选择的 X 坐标追加水平翻转
VerticalFlipAt围绕调用方选择的 Y 坐标追加垂直翻转
CentralFlipAt围绕调用方选择的枢轴追加两个翻转
MapRectToRect在归一化矩形之间追加拉伸、包含或覆盖映射
Invert用逆矩阵替换该矩阵,奇异时引发 EPdfMatrixError
TryInvert用逆矩阵替换该矩阵,奇异或接近奇异时返回 False 且不做修改
TryGetInverse在不修改此实例的情况下计算逆 FS_MATRIX
InverseCopy创建独立的逆矩阵,奇异时引发 EPdfMatrixError
TransformPoint使用 PDF 行向量约定通过仿射变换映射坐标
TransformVector仅通过线性分量映射方向,因此忽略平移
TryInverseTransformPoint在不分配矩阵的情况下通过逆变换映射点,并将奇异变换报告为 False
InverseTransformPoint通过逆变换映射点,奇异时引发 EPdfMatrixError
TransformQuad映射 FS_QUADPOINTSF 值的全部四个点
TransformPoints用一次结果分配映射点数组
TransformPointsInPlace在调用方拥有的存储中映射点数组,而不分配另一个数组
TryTransformBounds一遍累积变换后的点边界,空输入返回 False
TransformBounds一遍累积变换后的点边界,空输入引发 EPdfMatrixError
TransformRect通过精确的轴对齐快速路径或紧凑四角边界归一化并映射矩形
TransformRects用一次结果分配映射矩形数组
TransformRectsInPlace在调用方拥有的存储中映射矩形数组,而不分配另一个数组

属性

属性类型说明
aSingle只读的第一个矩阵元素
bSingle只读的第二个矩阵元素
cSingle只读的第三个矩阵元素
dSingle只读的第四个矩阵元素
eSingle只读的平移 X 元素
fSingle只读的平移 Y 元素
HandleFS_MATRIX供接受 FS_MATRIX 或 PFS_MATRIX 的 PDFium API 使用的原始矩阵值

说明

TPdfMatrix 使用 PDF 仿射布局 a b c d e f 并对每个操作右乘,因此调用顺序与应用于点的变换顺序一致

PreMultiply 和 Pre* 辅助方法在当前变换之前添加操作,而枢轴辅助方法追加平移-操作-平移序列,使选定的枢轴保持固定

pmfContain 保留完整的源矩形并居中留出未使用空间,pmfCover 以居中的溢出填充目标,而 pmfStretch 允许独立的 X 和 Y 缩放

批量点和矩形方法分配一个输出数组,其就地变体不分配任何数组,而 TryTransformBounds 扫描变换后的点而不构建中间数组

在 FPDFPageObj_SetMatrix、FPDFPageObj_Transform 和 FPDFText_SetMatrix 等 API 中使用 Handle

示例

var
  Matrix: TPdfMatrix;
begin
  Matrix := TPdfMatrix.Create;
  Matrix.ScaleAt(0.5, 0.5, 144, 144);
  Matrix.RotateAt(15, 144, 144);
  Matrix.Translate(72, 72);
  FPDFPageObj_SetMatrix(ObjectHandle, @Matrix.Handle);
end;

参见

TPdf.CreateXObjectFromPage, TPdf.InsertFormObjectFromXObject