pdfium 矩阵
// Transform |page_object| by the given matrix.
//
// page_object - handle to a page object.
// a - matrix value.
// b - matrix value.
// c - matrix value.
// d - matrix value.
// e - matrix value.
// f - matrix value.
//
// The matrix is composed as:
// |a c e|
// |b d f|
// and can be used to scale, rotate, shear and translate the |page_object|.
DLLEXPORT void STDCALL FPDFPageObj_Transform(FPDF_PAGEOBJECT page_object,
double a,
double b,
double c,
double d,
double e,
double f);
DLLEXPORT void STDCALL FPDFPageObj_Transform(FPDF_PAGEOBJECT page_object,
double a,
double b,
double c,
double d,
double e,
double f) {
CPDF_PageObject* pPageObj = CPDFPageObjectFromFPDFPageObject(page_object);
if (!pPageObj)
return;
CFX_Matrix matrix((float)a, (float)b, (float)c, (float)d, (float)e, (float)f);
pPageObj->Transform(matrix);
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | class CPDF_PageObject : public CPDF_GraphicStates { public : enum Type { TEXT = 1, PATH, IMAGE, SHADING, FORM, }; CPDF_PageObject(); ~CPDF_PageObject() override; virtual Type GetType() const = 0; virtual void Transform( const CFX_Matrix& matrix) = 0; virtual bool IsText() const ; virtual bool IsPath() const ; virtual bool IsImage() const ; virtual bool IsShading() const ; virtual bool IsForm() const ; virtual CPDF_TextObject* AsText(); virtual const CPDF_TextObject* AsText() const ; virtual CPDF_PathObject* AsPath(); virtual const CPDF_PathObject* AsPath() const ; virtual CPDF_ImageObject* AsImage(); virtual const CPDF_ImageObject* AsImage() const ; virtual CPDF_ShadingObject* AsShading(); virtual const CPDF_ShadingObject* AsShading() const ; virtual CPDF_FormObject* AsForm(); virtual const CPDF_FormObject* AsForm() const ; void SetDirty( bool value) { m_bDirty = value; } bool IsDirty() const { return m_bDirty; } void TransformClipPath(CFX_Matrix& matrix); void TransformGeneralState(CFX_Matrix& matrix); CFX_FloatRect GetRect() const { return CFX_FloatRect(m_Left, m_Bottom, m_Right, m_Top); } FX_RECT GetBBox( const CFX_Matrix* pMatrix) const ; float m_Left; float m_Right; float m_Top; float m_Bottom; CPDF_ContentMark m_ContentMark; protected : void CopyData( const CPDF_PageObject* pSrcObject); private : CPDF_PageObject( const CPDF_PageObject& src) = delete ; void operator=( const CPDF_PageObject& src) = delete ; bool m_bDirty; }; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了