property FormFieldInfoAt[X, Y: Single]: TPdfFormFieldInfo; // read only
FormFieldInfoAt는 현재 활성 페이지를 히트 테스트하여
(X, Y) 위치의 위젯 주석을 기술하는
TPdfFormFieldInfo 레코드를 반환합니다. 좌표는 PDF 사용자 공간이며 원점은
페이지 왼쪽 아래, 단위는 포인트(1/72 inch)입니다. 레코드에는
FormFieldInfo[Index]가 반환하는 것과 같은 내용이 담깁니다 — 필드 타입
(fiTextField, fiCheckBox, …), 필드 이름, 별칭,
플래그, 옵션 레이블, 체크 상태, export value, 폰트 크기
좌표가 어떤 위젯 사각형에도 걸리지 않으면 FormFieldInfoAt은 기본값으로 초기화된
TPdfFormFieldInfo를 반환합니다 —
FieldType = fiUnknown이고 문자열은 전부 비어 있습니다. 전체 레코드를 꺼내기 전에 값싼
예/아니오 확인이 필요하면 HasFormFieldAt[X, Y]를 쓰거나, 그냥 반환된
FieldType을 확인하세요
조회는 페이지 위젯을 대상으로 O(n)이고 거기에 Unicode 필드 메타데이터까지
디코딩하므로 HasFormFieldAt보다 무겁고,
마우스 이동 핸들러에서는 HasFormFieldAt를 먼저 확인하고
FormFieldInfoAt은 클릭이나 hover 진입 때만 호출하세요. 마우스 위치에서 온 좌표는 디바이스 픽셀을 페이지 단위로 바꾸려고
먼저 TPdfView.PointToPage를 통과해야 합니다
/Annots의 마지막 항목이 이깁니다)FieldType = fiSignature이며 — 서명 상태를 따로
나열하려면 SignatureCount와 조합하세요FormFieldAt로 위젯을 바꾸면 캐시된 레코드가 무효화되니
쓸 때마다 다시 읽으세요
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;