Skip to content
Demo示例FAQ

PDF 生成模板编辑器

开源可视化 PDF 生成引擎,支持自定义模板,并提供面向开发者的 API,灵活构建文档生成流程。

查看 GitHub

调整已存在的测量注释 ​

对于已经存在的测量注释,可以重新设置比例尺,单位,精确度等测量相关信息,而无需重新绘制该注释。

以线段测量工具为例,您可以通过以下步骤,调整已存在的测量注释的属性:

  1. 从 CPDFViewerTool 获取 CPDFAnnotation 对象,检查代表直线测量工具的 CPDFAnnotation 对象的 Type 参数。如果是 C_ANNOTATION_TYPE.C_ANNOTATION_LINE,则将直线测量工具的 CPDFAnnotation 类型转换为 CPDFLineAnnotation 对象。
  2. 使用 IsMersured 方法确定对象是否是测量工具。如果为 true,则调用 GetDistanceMeasure 方法获取相应的 CPDFDistanceMeasure 对象。
  3. 从 CPDFDistanceMeasure 对象中读取 MeasureInfo 并赋值。
  4. 调用 CPDFDistanceMeasure 的 SetMeasureInfo, SetMeasureScale 和 UpdateAnnotMeasure 方法完成参数更新。
  5. 最后,调用 CPDFAnnotation 的 UpdateAp 方法更新注释外观,然后调用 CPDFViewer 的 UpdateAnnotFrame 方法更新绘图。

以下是调整已存在的测量注释的示例代码:

c#
 BaseAnnot baseAnnot = tool.GetCacheHitTestAnnot();
 CPDFAnnotation annot = baseAnnot.GetAnnotData().Annot;
 switch (annot.Type)
 {
     case C_ANNOTATION_TYPE.C_ANNOTATION_LINE:
         {
             // 将直线测量工具的 CPDFAnnotation 类型转换为 CPDFLineAnnotation 对象。
             CPDFLineAnnotation lineAnnot = (CPDFLineAnnotation)annot;
             // 检查对象是否为测量工具。
             if (lineAnnot.IsMersured())
             {
                 // 获取注释对应的 CPDFDistanceMeasure 对象。
                 CPDFDistanceMeasure lineMeasure = lineAnnot.GetDistanceMeasure();

                 // 设置新的测量相关属性。
                 CPDFMeasureInfo measureInfo = lineMeasure.MeasureInfo;
                 measureInfo.Precision = measureSetting.GetMeasureSavePrecision();
                 measureInfo.RulerBase = (float)measureSetting.RulerBase;
                 measureInfo.RulerBaseUnit = measureSetting.RulerBaseUnit;
                 measureInfo.RulerTranslate = (float)measureSetting.RulerTranslate;
                 measureInfo.RulerTranslateUnit = measureSetting.RulerTranslateUnit;

                 // 完成参数更新。
                 lineMeasure.SetMeasureInfo(measureInfo);
                 lineMeasure.SetMeasureScale(
                     measureInfo.RulerBase,
                     measureInfo.RulerBaseUnit,
                     measureInfo.RulerTranslate,
                     measureInfo.RulerTranslateUnit);
                 lineMeasure.UpdateAnnotMeasure();

                 // 更新注释外观。
                 lineAnnot.UpdateAp();

                 // 更新绘图。
                 tool.GetCPDFViewer().UpdateAnnotFrame();
             }
         }
         break;

     case C_ANNOTATION_TYPE.C_ANNOTATION_POLYLINE:
     case C_ANNOTATION_TYPE.C_ANNOTATION_POLYGON:
         // To do.
         break;
 }