summaryrefslogtreecommitdiff
path: root/lib/basic-contract/viewer
diff options
context:
space:
mode:
Diffstat (limited to 'lib/basic-contract/viewer')
-rw-r--r--lib/basic-contract/viewer/basic-contract-sign-viewer.tsx72
1 files changed, 70 insertions, 2 deletions
diff --git a/lib/basic-contract/viewer/basic-contract-sign-viewer.tsx b/lib/basic-contract/viewer/basic-contract-sign-viewer.tsx
index 5698428e..77bfaf41 100644
--- a/lib/basic-contract/viewer/basic-contract-sign-viewer.tsx
+++ b/lib/basic-contract/viewer/basic-contract-sign-viewer.tsx
@@ -25,6 +25,7 @@ import { getActiveSurveyTemplate, getVendorSignatureFile, type SurveyTemplateWit
import { useConditionalSurvey } from '../vendor-table/survey-conditional';
import { SurveyComponent } from './SurveyComponent';
import { GtcClausesComponent } from './GtcClausesComponent';
+import { getBuyerSignatureFileWithFallback } from "@/lib/shi-signature/buyer-signature";
interface FileInfo {
path: string;
@@ -256,6 +257,63 @@ class AutoSignatureFieldDetector {
}
}
+const applyBuyerSignatureAutomatically = async (instance: WebViewerInstance) => {
+ const { Core } = instance;
+ const { documentViewer, annotationManager } = Core;
+ const document = documentViewer.getDocument();
+
+ if (!document) return;
+
+ try {
+ console.log('πŸ” ꡬ맀자 μ„œλͺ…λž€ μžλ™ μ„œλͺ… μ‹œμž‘...');
+
+ // "삼성쀑곡업_μ„œλͺ…λž€" ν…μŠ€νŠΈ 검색
+ const searchText = '삼성쀑곡업_μ„œλͺ…λž€';
+ const textSearchIterator = await document.getTextSearchIterator();
+ textSearchIterator.begin(searchText, Core.Search.Mode.PAGE_STOP | Core.Search.Mode.HIGHLIGHT);
+
+ let searchResult = await textSearchIterator.next();
+
+ if (searchResult && searchResult.resultCode === Core.Search.ResultCode.FOUND) {
+ const pageNumber = searchResult.pageNum;
+ const quads = searchResult.quads;
+
+ if (quads && quads.length > 0) {
+ const quad = quads[0];
+ const x = Math.min(quad.x1, quad.x2, quad.x3, quad.x4);
+ const y = Math.min(quad.y1, quad.y2, quad.y3, quad.y4);
+ const textHeight = Math.abs(quad.y3 - quad.y1);
+
+ // ꡬ맀자 μ„œλͺ… 이미지 κ°€μ Έμ˜€κΈ°
+ const buyerSignature = await getBuyerSignatureFileWithFallback();
+
+ if (buyerSignature) {
+ // μŠ€νƒ¬ν”„ μ–΄λ…Έν…Œμ΄μ…˜ 생성
+ const stamp = new Core.Annotations.StampAnnotation();
+ stamp.PageNumber = pageNumber;
+ stamp.X = x;
+ stamp.Y = y + textHeight + 5; // ν…μŠ€νŠΈ μ•„λž˜ 5ν”½μ…€
+ stamp.Width = 150;
+ stamp.Height = 50;
+
+ await stamp.setImageData(buyerSignature.data.dataUrl);
+
+ // μ–΄λ…Έν…Œμ΄μ…˜ μΆ”κ°€
+ annotationManager.addAnnotation(stamp);
+ annotationManager.drawAnnotationsFromList([stamp]);
+
+ console.log('βœ… ꡬ맀자 μ„œλͺ… μžλ™ 적용 μ™„λ£Œ');
+ toast.info('삼성쀑곡업 μ„œλͺ…이 μžλ™μœΌλ‘œ μ μš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€.', {
+ duration: 3000
+ });
+ }
+ }
+ }
+ } catch (error) {
+ console.error('ꡬ맀자 μžλ™ μ„œλͺ… 처리 μ‹€νŒ¨:', error);
+ }
+};
+
function useAutoSignatureFields(instance: WebViewerInstance | null, mode: 'vendor' | 'buyer' = 'vendor') {
const [signatureFields, setSignatureFields] = useState<string[]>([]);
@@ -790,10 +848,20 @@ export function BasicContractSignViewer({
const { WidgetFlags } = Annotations;
const FitMode = newInstance.UI.FitMode;
- const handleDocumentLoaded = () => {
+ const handleDocumentLoaded = async () => {
setFileLoading(false);
newInstance.UI.setFitMode(FitMode.FitWidth);
-
+
+ // GTC ν…œν”Œλ¦Ώμ΄ μ•„λ‹Œ κ²½μš°μ—λ§Œ ꡬ맀자 μžλ™ μ„œλͺ… 적용
+ if (!templateName.includes('GTC')) {
+ try {
+ // ꡬ맀자 μ„œλͺ…λž€ μ°Ύμ•„μ„œ μžλ™ μ„œλͺ…
+ await applyBuyerSignatureAutomatically(newInstance);
+ } catch (error) {
+ console.error('ꡬ맀자 μžλ™ μ„œλͺ… μ‹€νŒ¨:', error);
+ }
+ }
+
requestAnimationFrame(() => {
try {
documentViewer.refreshAll();