如何在Borb(PDF)中按指定角度旋转文本?
在Borb中实现任意角度文本旋转的简便方案
直接绕开LayoutElement的旋转限制,使用Canvas底层绘制来实现任意角度的文本旋转,步骤如下:
核心思路:利用Borb的Canvas API直接操作页面画布,通过平移+旋转的变换组合实现文本旋转,无需依赖LayoutElement的旋转支持。
代码示例:
from borb.pdf import Document, Page, PDF from borb.pdf.canvas.canvas import Canvas from borb.pdf.canvas.font.simple_font.true_type_font import TrueTypeFont import math # 创建PDF文档和页面 doc = Document() page = Page() doc.add_page(page) # 获取页面画布 canvas: Canvas = page.get_canvas() # 加载字体(替换为你的本地字体路径) canvas.set_font(TrueTypeFont.true_type_font_from_file_path("Arial.ttf"), 14) # 定义旋转参数 target_angle_deg = 27.33 angle_rad = math.radians(target_angle_deg) rotation_center_x = 300 # 旋转中心X坐标 rotation_center_y = 400 # 旋转中心Y坐标 # 保存当前画布状态,避免旋转操作影响后续绘制 canvas.save_state() # 平移画布到旋转中心 canvas.translate(rotation_center_x, rotation_center_y) # 旋转画布到目标角度 canvas.rotate(angle_rad) # 绘制文本(此时文本以旋转中心为原点,已旋转指定角度) canvas.draw_text("这是旋转27.33°的文本", 0, 0) # 恢复画布初始状态 canvas.restore_state() # 保存生成的PDF with open("rotated_text_output.pdf", "wb") as output_file: PDF.dumps(output_file, doc)
- 关键说明:
save_state()和restore_state()必须配对使用,用来隔离旋转操作对后续画布内容的影响。- 可通过修改
rotation_center_x和rotation_center_y调整旋转中心位置,文本绘制坐标(0,0)是相对于旋转中心的偏移量,可按需修改。 - 该方法支持任意角度,完全适配27.33°这类非标准角度需求。
如果需要绘制带格式的多行文本,可先将文本渲染为Paragraph获取其边界框,再通过Canvas将内容旋转绘制;简单场景下直接使用draw_text即可满足需求。
内容的提问来源于stack exchange,提问作者XIAA
相关产品推荐
相关产品推荐

