DocuSign和PDF/ITextSharp与C#的定位问题

本文关键字:定位 问题 ITextSharp PDF DocuSign | 更新日期: 2023-09-27 18:24:42

我遇到一个问题,SignHereTabs在DocuSign文档中出现错误。

我使用ITextSharp获取一个包含许多字段的PDF表单模板,我将数据设置到字段中,留下2个适当命名的签名字段,然后使用GetFieldPositions获取签名字段的位置,并在这些坐标处定位SignHereTab。但是,在DocuSign的最终文档中,选项卡位于错误的位置。

这是我读取AcroField位置的代码

var pdfReader = new PdfReader(pdfFilename);
var fieldPositions =pdfReader.AcroFields.GetFieldPositions("Signature");
var PageNumber = (int)fieldPositions[0];
var XPosition = (int)Math.Ceiling(fieldPositions[1]);
var YPosition = (int)(pageHeight - (fieldPositions[2] + fieldPositions[4])/2);

然后将这些内容添加到XML的正确位置。

示例图像在这里http://i60.tinypic.com/sboizr.png

我不确定这是PDF、ITextSharp还是DocuSign的问题。

DocuSign和PDF/ITextSharp与C#的定位问题

DocuSign的坐标系与mkl建议的一样,原点(0,0)位于文档的左上角,x值随着向右移动而增加,y值随着向下移动而增加。我从来没有使用过iTextSharp,所以我不知道它的坐标系是如何工作的,但你应该能够将你的坐标空间转换成所需要的。

如果您向DocuSign的API显示要发送的JSON请求主体,这将有所帮助。没有看到这一点,我在这里唯一可以补充的是,DocuSign为您提供了两种不同的指定位置的方法-绝对定位相对定位素

话虽如此,如果您在放置DocuSign signHere选项卡时使用绝对定位,则您的(部分)JSON可能如下所示:

"tabs": {
    "signHereTabs": [
        {
            "xPosition": "100",
            "yPosition": "100",
            "documentId": "1",
            "pageNumber": "1"
        }
    ]
}

这将指示将一个signHere选项卡放置在文档的第1页的右侧100个像素和从左上角向下100个像素处。另一方面,如果您想使用RelativeAnchor基于定位,允许您根据实际文档内容放置DocuSign选项卡,您的请求可能看起来像:

"tabs": {
    "signHereTabs": [
        {
            "anchorString": "Please Sign Here:",
            "anchorXOffset": "1",
            "anchorYOffset": "0",
            "anchorIgnoreIfNotPresent": "false",
            "anchorUnits": "inches"
        }
    ]
}

上述JSON会将签名选项卡放置在文档中找到文本"请在此处签名:"的任何位置,并将选项卡放置在该文本右侧正好1英寸的高度(因为yOffset为0)。接受的测量单位为pixels(默认值)、cmsmmsinches

有关DocuSign选项卡定位的更多信息,请访问此处