在PDF文档中,有时我们需要将多个几何对象(如图片和路径)合并为一个组,以便于统一操作。FormXObject正是实现这一功能的理想工具。通过FormXObject,您可以将多个对象组合在一起,并在需要时同时选中和操作它们。
1. FormXObject的基本概念
FormXObject是PDF中的一种复合对象,允许您将多个图形对象(如路径、图像等)组合在一起。通过这种方式,您可以简化对多个对象的操作,例如移动、缩放或删除。
2. 创建FormXObject的步骤
以下是使用福昕PDF SDK创建FormXObject的详细步骤:
PDFDoc doc = new PDFDoc();
doc.Load(null);
PDFPage page = doc.InsertPage(0, PDFPage.Size.e_SizeA4);
page.StartParse(0, null, true);
- 创建FormXObject并添加图形对象,示例代码如下:
using (var formXObj = FormXObject.Create(doc))
{
GraphicsObjects objects = formXObj.GetGraphicsObjects();
long position = objects.GetLastGraphicsObjectPosition(GraphicsObject.Type.e_TypeAll);
// 添加路径对象
using (var path_object = PathObject.Create())
{
using (var path = new foxit.common.Path())
{
path.MoveTo(new PointF(400, 500));
path.LineTo(new PointF(500, 500));
path.LineTo(new PointF(500, 400));
path.LineTo(new PointF(400, 400));
path.LineTo(new PointF(400, 500));
path_object.SetPathData(path);
path_object.SetFillColor(0xFF000000);
path_object.SetFillMode(FillMode.e_FillModeAlternate);
path_object.SetStrokeState(true);
path_object.SetStrokeColor(0xFFFF00FF);
position = objects.InsertGraphicsObject(position, path_object);
}
}
// 添加图片对象
using (var image_object = ImageObject.Create(doc))
{
foxit.common.Image image = new foxit.common.Image(input_path + "sdk.png");
image_object.SetImage(image, 0);
float width = image.GetWidth() / 2;
float height = image.GetHeight() / 2;
float page_width = page.GetWidth();
float page_height = page.GetHeight();
image_object.SetMatrix(new Matrix2D(width, 0, 0, height, page_width / 2 - width, page_height / 2 - height));
objects.InsertGraphicsObject(position, image_object);
}
// 生成内容并设置FormXObject的属性
objects.GenerateContent();
formXObj.SetMatrix(new Matrix2D(1, 0, 0, 1, 0, 0));
formXObj.SetClipRect(new RectF(0, 0, page.GetWidth(), page.GetHeight()));
formXObj.GetStream().GetDictionary().SetAtRect("BBox", formXObj.GetRect());
// 将FormXObject插入页面
page.InsertGraphicsObject(page.GetLastGraphicsObjectPosition(GraphicsObject.Type.e_TypeAll), formXObj);
}
page.GenerateContent();
doc.SaveAs(@"D:\test\test_formx.pdf", 0);
3. 使用FormXObject的优势
- 统一操作:通过将多个对象组合成一个FormXObject,您可以同时对它们进行操作,而无需逐个选择。
- 简化管理:FormXObject使得复杂图形的管理更加简单,尤其是在需要频繁调整多个对象时。
- 提高效率:在处理大量图形对象时,FormXObject可以显著提高工作效率。
4. 注意事项
- 递归遍历:在遍历PDF文档中的几何对象时,应递归处理FormXObject,以确保所有嵌套对象都被正确处理。
- 性能优化:在处理大型文档时,合理使用FormXObject可以优化性能,减少资源消耗。
通过以上步骤,您可以轻松创建和管理FormXObject,从而更高效地处理PDF文档中的复杂图形。