property FormFieldInfoAt[X, Y: Single]: TPdfFormFieldInfo; // read only
FormFieldInfoAt는 현재 active page에서 hit-test를 수행하고 (X, Y)에 있는 widget annotation을 설명하는 TPdfFormFieldInfo record를 반환합니다. coordinate는 PDF user space를 사용하며, 원점은 page의 왼쪽 아래 모서리이고 단위는 point(1/72 inch)입니다. 이 record는 FormFieldInfo[Index]가 반환하는 내용과 같습니다 — field type(fiTextField, fiCheckBox, …), field name, alternate name, flag, option label, checked state, export value, font size가 들어 있습니다
coordinate가 어떤 widget rectangle 안에도 들어가지 않으면 FormFieldInfoAt는 기본 초기화된 TPdfFormFieldInfo를 반환합니다 — 전체가 FieldType = fiUnknown이고 문자열은 모두 비어 있습니다. 전체 record를 가져오기 전 가벼운 yes/no probe가 필요하면 HasFormFieldAt[X, Y]를 사용하거나, 반환된 FieldType만 확인하세요
이 lookup은 page의 widget 전체를 대상으로 O(n)이며 Unicode field metadata도 추가로 decode하므로, HasFormFieldAt보다 무겁습니다. mouse-move handler에서는 먼저 HasFormFieldAt를 확인하고, click 또는 hover-enter에서만 FormFieldInfoAt를 호출하세요. mouse position의 coordinate는 먼저 TPdfView.PointToPage를 거쳐 device pixel을 page unit으로 변환합니다
/Annots의 마지막 entry가 이깁니다)FieldType = fiSignature입니다 — signing state를 따로 열거하려면 SignatureCount와 함께 사용하세요FormFieldAt를 통해 widget을 수정하면 cached record가 무효화됩니다 — 쓸 때마다 다시 읽으세요
procedure TForm1.PdfView1Click(Sender: TObject);
var Info: TPdfFormFieldInfo;
PageX, PageY: Double;
begin
PdfView1.PointToPage(Mouse.CursorPos.X, Mouse.CursorPos.Y, PageX, PageY);
Info := Pdf1.FormFieldInfoAt[PageX, PageY];
if Info.FieldType <> fiUnknown then
ShowMessage(Info.Name);
end;