summaryrefslogtreecommitdiff
path: root/components/file-manager
diff options
context:
space:
mode:
Diffstat (limited to 'components/file-manager')
-rw-r--r--components/file-manager/FileManager.tsx1
-rw-r--r--components/file-manager/SecurePDFViewer.tsx101
-rw-r--r--components/file-manager/creaetWaterMarks.tsx4
3 files changed, 57 insertions, 49 deletions
diff --git a/components/file-manager/FileManager.tsx b/components/file-manager/FileManager.tsx
index 7c5a3771..a95d8c06 100644
--- a/components/file-manager/FileManager.tsx
+++ b/components/file-manager/FileManager.tsx
@@ -1962,6 +1962,7 @@ export function FileManager({ projectId }: FileManagerProps) {
<SecurePDFViewer
documentUrl={viewerFileUrl}
fileName={selectedFile.name}
+ category={selectedFile.category}
onClose={() => {
setViewerDialogOpen(false);
setViewerFileUrl(null);
diff --git a/components/file-manager/SecurePDFViewer.tsx b/components/file-manager/SecurePDFViewer.tsx
index bd28214b..a24e2e37 100644
--- a/components/file-manager/SecurePDFViewer.tsx
+++ b/components/file-manager/SecurePDFViewer.tsx
@@ -10,10 +10,11 @@ import { createCustomWatermark } from './creaetWaterMarks';
interface SecurePDFViewerProps {
documentUrl: string;
fileName: string;
+ category?: string;
onClose?: () => void;
}
-export function SecurePDFViewer({ documentUrl, fileName, onClose }: SecurePDFViewerProps) {
+export function SecurePDFViewer({ documentUrl, fileName, category, onClose }: SecurePDFViewerProps) {
const viewerRef = useRef<HTMLDivElement>(null);
const instanceRef = useRef<WebViewerInstance | null>(null);
const initialized = useRef(false);
@@ -91,6 +92,10 @@ export function SecurePDFViewer({ documentUrl, fileName, onClose }: SecurePDFVie
'toggleNotesButton'
]);
+ const { Core } = instance;
+ Core.Tools.Tool.disableAutoSwitch();
+ Core.Tools.Tool.disableTextSelection();
+
// CSS 적용으로 추가 보안
const iframeWindow = instance.UI.iframeWindow;
if (iframeWindow && iframeWindow.document) {
@@ -187,55 +192,57 @@ export function SecurePDFViewer({ documentUrl, fileName, onClose }: SecurePDFVie
const { documentViewer, annotationManager } = instance.Core;
- // 문서 로드 완료 이벤트
- documentViewer.addEventListener('documentLoaded', async () => {
- setIsLoading(false);
-
- // 워터마크 추가
- const watermarkText = `SHI DATAROOM\n${session?.user?.email || 'CONFIDENTIAL'}\n${new Date().toLocaleString()}`;
-
- // 대각선 워터마크
- documentViewer.setWatermark({
- custom: createCustomWatermark({
- text: watermarkText,
- fontSize: 14,
- fontFamily: 'Arial',
- color: 'rgba(128, 128, 128, 0.3)', // 연한 회색
- opacity: 30, // 15% 투명도
- rotation: -45,
- })
- });
+ if (category !== 'public') {
+ // 문서 로드 완료 이벤트
+ documentViewer.addEventListener('documentLoaded', async () => {
+ setIsLoading(false);
+
+ // 워터마크 추가
+ const watermarkText = `SHI DATAROOM\n${session?.user?.email || 'CONFIDENTIAL'}\n${new Date().toLocaleString()}`;
+
+ // 대각선 워터마크
+ documentViewer.setWatermark({
+ custom: createCustomWatermark({
+ text: watermarkText,
+ fontSize: 14,
+ fontFamily: 'Arial',
+ color: 'rgba(128, 128, 128, 0.5)', // 연한 회색
+ opacity: 30, // 15% 투명도
+ rotation: -45,
+ })
+ });
- // 각 페이지에 커스텀 워터마크 추가
- const pageCount = documentViewer.getPageCount();
- for (let i = 1; i <= pageCount; i++) {
- const pageInfo = documentViewer.getDocument().getPageInfo(i);
- const { width, height } = pageInfo;
-
- // FreeTextAnnotation 생성
- const watermarkAnnot = new instance.Core.Annotations.FreeTextAnnotation();
- watermarkAnnot.PageNumber = i;
- watermarkAnnot.X = width / 4;
- watermarkAnnot.Y = height / 2;
- watermarkAnnot.Width = width / 2;
- watermarkAnnot.Height = 100;
- watermarkAnnot.setContents(
- `${session?.user?.email}\n${docFileName}\n${new Date().toLocaleDateString()}`
- );
- watermarkAnnot.FillColor = new instance.Core.Annotations.Color(255, 0, 0, 0.3);
- watermarkAnnot.TextColor = new instance.Core.Annotations.Color(255, 0, 0, 0.4);
- watermarkAnnot.FontSize = '24pt';
- watermarkAnnot.TextAlign = 'center';
- watermarkAnnot.Rotation = -45;
- watermarkAnnot.ReadOnly = true;
- watermarkAnnot.Locked = true;
- watermarkAnnot.Printable = true;
-
- annotationManager.addAnnotation(watermarkAnnot);
+ // 각 페이지에 커스텀 워터마크 추가
+ const pageCount = documentViewer.getPageCount();
+ for (let i = 1; i <= pageCount; i++) {
+ const pageInfo = documentViewer.getDocument().getPageInfo(i);
+ const { width, height } = pageInfo;
+
+ // FreeTextAnnotation 생성
+ const watermarkAnnot = new instance.Core.Annotations.FreeTextAnnotation();
+ watermarkAnnot.PageNumber = i;
+ watermarkAnnot.X = width / 4;
+ watermarkAnnot.Y = height / 2;
+ watermarkAnnot.Width = width / 2;
+ watermarkAnnot.Height = 100;
+ watermarkAnnot.setContents(
+ `${session?.user?.email}\n${docFileName}\n${new Date().toLocaleDateString()}`
+ );
+ watermarkAnnot.FillColor = new instance.Core.Annotations.Color(255, 0, 0, 0.3);
+ watermarkAnnot.TextColor = new instance.Core.Annotations.Color(255, 0, 0, 0.4);
+ watermarkAnnot.FontSize = '24pt';
+ watermarkAnnot.TextAlign = 'center';
+ watermarkAnnot.Rotation = -45;
+ watermarkAnnot.ReadOnly = true;
+ watermarkAnnot.Locked = true;
+ watermarkAnnot.Printable = true;
+
+ annotationManager.addAnnotation(watermarkAnnot);
+ }
+
+ annotationManager.drawAnnotations(documentViewer.getCurrentPage());
}
- annotationManager.drawAnnotations(documentViewer.getCurrentPage());
-
// Pan 모드로 설정 (텍스트 선택 불가)
documentViewer.setToolMode(documentViewer.getTool('Pan'));
diff --git a/components/file-manager/creaetWaterMarks.tsx b/components/file-manager/creaetWaterMarks.tsx
index ebf4322e..642e5e2a 100644
--- a/components/file-manager/creaetWaterMarks.tsx
+++ b/components/file-manager/creaetWaterMarks.tsx
@@ -1,7 +1,7 @@
export const createCustomWatermark: CreateCustomWatermark = ({
text,
fontSize = 14,
- color = "rgba(128, 128, 128, 0.3)", // 더 연한 회색, 더 투명하게
+ color = "rgba(128, 128, 128, 0.5)", // 더 연한 회색, 더 투명하게
opacity = 30, // 더 낮은 opacity
rotation = -45,
fontFamily = "Arial",
@@ -30,7 +30,7 @@ export const createCustomWatermark: CreateCustomWatermark = ({
const textBlockHeight = lines.length * lineHeight;
// 격자 간격 계산 (텍스트 블록 크기 기반)
- const horizontalSpacing = maxLineWidth * 0.8; // 가로 간격
+ const horizontalSpacing = maxLineWidth * 1.2; // 가로 간격
const verticalSpacing = textBlockHeight * 1.5; // 세로 간격
// 회전을 고려한 대각선 길이 계산