php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 746|回复: 0

C# 在PDF中添加墨迹注释Ink Annotation

[复制链接]

3138

主题

3148

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
威望
0
积分
7946
贡献
0
注册时间
2021-4-14
最后登录
2024-11-21
在线时间
763 小时
QQ
发表于 2022-2-17 10:52:57 | 显示全部楼层 |阅读模式
PDF中的墨迹注释(Ink Annotation),表现为徒手涂鸦式的形状;该类型的注释,可任意指定形状顶点的位置及个数,通过指定的顶点,程序将连接各点绘制成平滑的曲线。下面,通过C#程序代码介绍如何在PDF中添加该注释。

一、dll引用
步骤1:在Visual Studio中打开“解决方案资源管理器”- 鼠标右键点击“引用”-“管理NuGet包”。
image.png
步骤2:选择“浏览”-在搜索框中输入搜索内容,选择搜索结果,点击“安装”。
image.png
步骤3:依次点击“OK”-"接受",然后等待程序完成安装。

image.png
或者,通过官方渠道,下载包 Spire.PDF for .NET 到本地。解压后,将BIN文件夹下的Spire.Pdf.dll文件引用至VS程序。



二、代码示例
添加注释时,除了自定义各个点的位置及数量,也可以设置墨迹颜色、线条宽度、透明度、注释的内容、名称等。下面是代码实现的步骤:

创建PdfDocument类的对象,并通过PdfDocument.LoadFromFile(String fileName)方法加载PDF文档。
通过PdfDocument.Pages[int Index]属性获取PDF指定页面。
创建类型为int的对象集合,集合元素为各墨迹顶点。
创建PdfInkAnnotation类的实例。并通过该类提供的属性设置墨迹颜色、宽度、注释内容等格式。
调用PdfPageBase.AnnotationsWidget属性提供的PdfAnnotationCollection.Add(PdfAnnotation annotation)方法添加注释到PDF。
最后,通过PdfDocument.SaveToFile(string filename, FileFormat fileFormat)方法保存PDF文档到指定路径。
C#
[mw_shl_code=csharp,true]using Spire.Pdf;
using Spire.Pdf.Annotations;
using System.Collections.Generic;
using System.Drawing;

namespace InkAnnotation
{
    class Program
    {
        static void Main(string[] args)
        {
            //加载PDF文档
            PdfDocument pdf = new PdfDocument();
            pdf.LoadFromFile("test.pdf");

            //获取第一页
            PdfPageBase pdfPage = pdf.Pages[0];

            //设置墨迹坐标点位置
            List<int[]> inkList = new List<int[]>();           
            int[] intPoints = new int[]
            {
                370,700,
                120,720,
                110,760,
                220,800,
                270,790,
                350,770,
                350,670
            };
            inkList.Add(intPoints);
            //添加墨迹注释到PDF页面
            PdfInkAnnotation inkannotation = new PdfInkAnnotation(inkList);
            inkannotation.Color = Color.MediumVioletRed;
            inkannotation.Border.Width = 6;
            inkannotation.Opacity = 0.5f;
            inkannotation.Text = "This is an ink annotation. ";
            inkannotation.Name = "Manager";     
            pdfPage.AnnotationsWidget.Add(inkannotation);

            //保存文档
            Pdf.SaveToFile("AddInkAnnotation.pdf",FileFormat.PDF);
            System.Diagnostics.Process.Start("AddInkAnnotation.pdf");
        }
    }
}[/mw_shl_code]
vb.net

[mw_shl_code=applescript,true]Imports Spire.Pdf
Imports Spire.Pdf.Annotations
Imports System.Collections.Generic
Imports System.Drawing

Namespace InkAnnotation
    Class Program
        Private Shared Sub Main(args As String())
            '加载PDF文档
            Dim pdf As New PdfDocument()
            pdf.LoadFromFile("test.pdf")

            '获取第一页
            Dim pdfPage As PdfPageBase = pdf.Pages(0)

            '设置墨迹坐标点位置
            Dim inkList As New List(Of Integer())()
            Dim intPoints As Integer() = New Integer() {370, 700, 120, 720, 110, 760, _
                220, 800, 270, 790, 350, 770, _
                350, 670}
            inkList.Add(intPoints)
            '添加墨迹注释到PDF页面
            Dim inkannotation As New PdfInkAnnotation(inkList)
            inkannotation.Color = Color.MediumVioletRed
            inkannotation.Border.Width = 6
            inkannotation.Opacity = 0.5F
            inkannotation.Text = "This is an ink annotation. "
            inkannotation.Name = "Manager"
            pdfPage.AnnotationsWidget.Add(inkannotation)

            '保存文档
            pdf.SaveToFile("AddInkAnnotation.pdf", FileFormat.PDF)
        End Sub
    End Class
End Namespace[/mw_shl_code]
注释效果:

image.png





上一篇:六年安卓开发的技术回顾和展望
下一篇:理论+算法+实战,教你如何实现亿级流量下的分布式限流
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|php中文网 | cnphp.com ( 赣ICP备2021002321号-2 )

GMT+8, 2024-11-21 23:21 , Processed in 0.290260 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

申明:本站所有资源皆搜集自网络,相关版权归版权持有人所有,如有侵权,请电邮(fiorkn@foxmail.com)告之,本站会尽快删除。

快速回复 返回顶部 返回列表