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的坐标系与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个像素处。另一方面,如果您想使用Relative或Anchor基于定位,允许您根据实际文档内容放置DocuSign选项卡,您的请求可能看起来像:
"tabs": {
"signHereTabs": [
{
"anchorString": "Please Sign Here:",
"anchorXOffset": "1",
"anchorYOffset": "0",
"anchorIgnoreIfNotPresent": "false",
"anchorUnits": "inches"
}
]
}
上述JSON会将签名选项卡放置在文档中找到文本"请在此处签名:"的任何位置,并将选项卡放置在该文本右侧正好1英寸的高度(因为yOffset为0)。接受的测量单位为pixels
(默认值)、cms
、mms
和inches
。
有关DocuSign选项卡定位的更多信息,请访问此处