在 Python 中使用矢量图形
Aspose.PDF for Python via .NET 提供 GraphicsAbsorber 用于访问和操作已存在于 PDF 页面中的矢量图形的类。调用它的 visit 在任何页面上使用方法提取路径、形状和其他图形操作符,然后根据需要移动、删除或复制这些元素。
当您需要检查或修改嵌入在现有 PDF 中的矢量绘图元素,而不是从零开始绘制新形状时,请使用此页面。
提取图形
提取是所有矢量图形任务的起点。 GraphicsAbsorber 读取页面的内容流,并公开每个图形元素及其页面引用、位置和原始操作符。
- 打开 PDF 文档。
- 创建一个 GraphicsAbsorber 实例。
- 调用
visit在目标页面上填充elements. - 遍历
elements检查位置和运算符计数。
import aspose.pdf as ap
import sys
from os import path
def using_graphics_absorber(infile: str):
with ap.Document(infile) as document:
with ap.vector.GraphicsAbsorber() as graphics_absorber:
page = document.pages[1]
graphics_absorber.visit(page)
for element in graphics_absorber.elements:
print(f"Page Number: {element.source_page.number}")
print(f"Position: ({element.position.x}, {element.position.y})")
print(f"Number of Operators: {element.operators.length}")
GraphicsAbsorber 是…的一部分 aspose.pdf.vector 命名空间,专门用于与 PDF 内容流中的矢量图形交互。
动态图形
提取后,设置一个新的 position 对每个元素进行操作以将其重新定位到同一页面。将更新包装在 suppress_update / resume_update 调用将内容流写入批处理为单个操作,并避免冗余的重新绘制。
- 打开 PDF 文档。
- 创建一个
GraphicsAbsorber并调用visit在目标页面上。 - 调用
suppress_update暂停内容流写入。 - 更新
position每个元素的 - 调用
resume_update一次性提交所有更改。 - 保存修改后的文档。
import aspose.pdf as ap
import sys
from os import path
def move_graphics(infile: str, outfile: str):
with ap.Document(infile) as document:
with ap.vector.GraphicsAbsorber() as graphics_absorber:
page = document.pages[1]
graphics_absorber.visit(page)
graphics_absorber.suppress_update()
for element in graphics_absorber.elements:
position = element.position
element.position = ap.Point(position.x + 150, position.y - 10)
graphics_absorber.resume_update()
document.save(outfile)
删除图形
要从页面中删除特定的矢量元素,请按位置或边界矩形过滤,然后将其删除。Aspose.PDF for Python 提供了两种方法,取决于您是想内联删除元素还是先收集它们。
方法1:使用矩形边界删除内联
此方法检查每个元素相对于矩形的位置并调用 element.remove() 直接在循环内部使用。当你想要简洁的代码且不需要在之后检查已删除的集合时使用它。
- 打开 PDF 文档。
- 创建一个
GraphicsAbsorber并调用visit在目标页面上。 - 定义目标 矩形.
- 调用
suppress_update暂停内容流写入。 - 迭代
elements,调用remove()对每个位置位于矩形内的元素。 - 调用
resume_update提交删除。 - 保存修改后的文档。
import aspose.pdf as ap
import sys
from os import path
def remove_graphics_method_1(infile: str, outfile: str):
with ap.Document(infile) as document:
with ap.vector.GraphicsAbsorber() as graphics_absorber:
page = document.pages[1]
graphics_absorber.visit(page)
rectangle = ap.Rectangle(70, 248, 170, 252, True)
graphics_absorber.suppress_update()
for element in graphics_absorber.elements:
if rectangle.contains(element.position, False):
element.remove()
graphics_absorber.resume_update()
document.save(outfile)
方法二:先收集元素,然后删除
此方法将匹配的元素收集到一个 图形元素集合 并将集合传递给 page.delete_graphics. 在提交删除之前,如果您需要审查或记录将要删除的内容,请使用它。
- 打开 PDF 文档。
- 创建一个
GraphicsAbsorber并调用visit在目标页面上。 - 定义目标矩形。
- 迭代
elements并将匹配的元素添加到 aGraphicElementCollection. - 调用
page.contents.suppress_update暂停内容流写入。 - 调用
page.delete_graphics与集合一起。 - 调用
page.contents.resume_update提交删除。 - 保存修改后的文档。
import aspose.pdf as ap
import sys
from os import path
def remove_graphics_method_2(infile: str, outfile: str):
with ap.Document(infile) as document:
with ap.vector.GraphicsAbsorber() as graphics_absorber:
page = document.pages[1]
rectangle = ap.Rectangle(70, 248, 170, 252, True)
graphics_absorber.visit(page)
removed_elements_collection = ap.vector.GraphicElementCollection()
for element in graphics_absorber.elements:
if rectangle.contains(element.position, False):
removed_elements_collection.add(element)
page.contents.suppress_update()
page.delete_graphics(removed_elements_collection)
page.contents.resume_update()
document.save(outfile)
在另一页上添加图形
从一个页面提取的矢量元素可以放置在同一文档的任何其他页面上。有两种方法可用:逐个添加元素,或在一次调用中传递整个集合。
方法 1:逐个添加元素
当您需要对每个元素进行控制时,例如在将它们放置到目标页面之前对单个元素进行过滤或转换,请使用此方法。
- 打开 PDF 文档。
- 创建一个
GraphicsAbsorber并调用visit在源页面上。 - 向文档添加一个新的目标页面。
- 调用
page_2.contents.suppress_update暂停内容流写入。 - 调用
element.add_on_page(page_2)对每个元素。 - 调用
page_2.contents.resume_update提交所有添加。 - 保存修改后的文档。
import aspose.pdf as ap
import sys
from os import path
def add_to_another_page_method_1(infile: str, outfile: str):
with ap.Document(infile) as document:
with ap.vector.GraphicsAbsorber() as graphics_absorber:
page_1 = document.pages[1]
page_2 = document.pages.add()
graphics_absorber.visit(page_1)
page_2.contents.suppress_update()
for element in graphics_absorber.elements:
element.add_on_page(page_2)
page_2.contents.resume_update()
document.save(outfile)
方法 2:一次性添加整个集合
当您想一次性将所有提取的元素复制到页面,而无需手动遍历时,请使用此方法。
- 打开 PDF 文档。
- 创建一个
GraphicsAbsorber并调用visit在源页面上。 - 向文档添加一个新的目标页面。
- 调用
page_2.contents.suppress_update暂停内容流写入。 - 调用
page_2.add_graphics完整的elements集合。 - 调用
page_2.contents.resume_update提交所有添加。 - 保存修改后的文档。
import aspose.pdf as ap
import sys
from os import path
def add_to_another_page_method_2(infile: str, outfile: str):
with ap.Document(infile) as document:
with ap.vector.GraphicsAbsorber() as graphics_absorber:
page_1 = document.pages[1]
page_2 = document.pages.add()
graphics_absorber.visit(page_1)
page_2.contents.suppress_update()
page_2.add_graphics(graphics_absorber.elements, None)
page_2.contents.resume_update()
document.save(outfile)