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

时间:2014-09-26 11:50:28

标签: c# pdf itextsharp docusignapi

我遇到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的问题。

1 个答案:

答案 0 :(得分:0)

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选项卡放在右侧100个像素,从文档第1页左上角开始向下100个像素。另一方面,如果您想使用相对锚定基于定位,这允许您根据实际文档内容放置DocuSign标签,您的请求可能如下所示:

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

上面的JSON会将签名标签放在文档中的任何位置,在该文档中找到文本“ Please Sign Here:”,并将标签放在该文本右侧的1英寸处并且在同一高度(因为yOffset为0)。接受的度量单位为pixels(默认),cmsmmsinches

有关DocuSign标签定位的更多信息,请参见here