Skip to content

Commit 7a8c794

Browse files
author
SasidharanKaruppiah
authored
Merge pull request #10 from SyncfusionExamples/865587-bookmark
865587: Bookmark pane open & close programmatically
2 parents e4938e0 + ead1429 commit 7a8c794

File tree

8 files changed

+381
-0
lines changed

8 files changed

+381
-0
lines changed

How to/Custom Context Menu/index.html

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<!DOCTYPE html><html lang="en"><head>
2+
<title>EJ2 PDF Viewer</title>
3+
<meta charset="utf-8">
4+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
5+
<meta name="description" content="Typescript PDF Viewer Control">
6+
<meta name="author" content="Syncfusion">
7+
<link href="index.css" rel="stylesheet">
8+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-base/styles/material.css" rel="stylesheet">
9+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-pdfviewer/styles/material.css" rel="stylesheet">
10+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-buttons/styles/material.css" rel="stylesheet">
11+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-popups/styles/material.css" rel="stylesheet">
12+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-navigations/styles/material.css" rel="stylesheet">
13+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-dropdowns/styles/material.css" rel="stylesheet">
14+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-lists/styles/material.css" rel="stylesheet">
15+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-inputs/styles/material.css" rel="stylesheet">
16+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-splitbuttons/styles/material.css" rel="stylesheet">
17+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-notifications/styles/material.css" rel="stylesheet">
18+
19+
<!-- Essential JS 2 PDF Viewer's script -->
20+
<script src="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2.min.js" type="text/javascript"></script>
21+
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
22+
23+
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
24+
</head>
25+
<body>
26+
27+
<div id="container">
28+
<div>
29+
<input type="checkbox" id="hide">
30+
</div>
31+
<div>
32+
<input type="checkbox" id="toolbar">
33+
</div>
34+
<div id="PdfViewer" style="height:500px;width:100%;"></div>
35+
</div>
36+
37+
38+
<script>
39+
var ele = document.getElementById('container');
40+
if(ele) {
41+
ele.style.visibility = "visible";
42+
}
43+
</script>
44+
<script src="index.js" type="text/javascript"></script>
45+
</body></html>

How to/Custom Context Menu/index.js

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
var pdfviewer = new ej.pdfviewer.PdfViewer({
2+
documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf',
3+
resourceUrl:'https://cdn.syncfusion.com/ej2/24.2.3/dist/ej2-pdfviewer-lib'
4+
});
5+
ej.pdfviewer.PdfViewer.Inject(ej.pdfviewer.TextSelection, ej.pdfviewer.TextSearch, ej.pdfviewer.Print, ej.pdfviewer.Navigation, ej.pdfviewer.Toolbar,
6+
ej.pdfviewer.Magnification, ej.pdfviewer.Annotation, ej.pdfviewer.FormDesigner, ej.pdfviewer.FormFields,ej.pdfviewer.PageOrganizer);
7+
8+
var menuItems = [
9+
{
10+
text: 'Search In Google',
11+
id: 'search_in_google',
12+
iconCss: 'e-icons e-search'
13+
},
14+
{
15+
text: 'Lock Annotation',
16+
iconCss: 'e-icons e-lock',
17+
id: 'lock_annotation'
18+
},
19+
{
20+
text: 'Unlock Annotation',
21+
iconCss: 'e-icons e-unlock',
22+
id: 'unlock_annotation'
23+
},
24+
{
25+
text: 'Lock Form Field',
26+
iconCss: 'e-icons e-lock',
27+
id: 'read_only_true'
28+
},
29+
{
30+
text: 'UnLock Form Field',
31+
iconCss: 'e-icons e-unlock',
32+
id: 'read_only_false'
33+
},
34+
];
35+
36+
pdfviewer.appendTo('#PdfViewer');
37+
38+
pdfviewer.documentLoad = function (args) {
39+
pdfviewer.addCustomMenu(menuItems, false, false);
40+
}
41+
42+
pdfviewer.customContextMenuSelect = function (args) {
43+
switch (args.id) {
44+
case 'search_in_google':
45+
for (var i = 0; i < pdfviewer.textSelectionModule.selectionRangeArray.length; i++) {
46+
var content = pdfviewer.textSelectionModule.selectionRangeArray[i].textContent;
47+
if ((pdfviewer.textSelectionModule.isTextSelection) && (/\S/.test(content))) {
48+
window.open('http://google.com/search?q=' + content);
49+
}
50+
}
51+
break;
52+
case 'lock_annotation':
53+
lockAnnotations(args);
54+
break;
55+
case 'unlock_annotation':
56+
unlockAnnotations(args);
57+
break;
58+
case 'read_only_true':
59+
setReadOnlyTrue(args);
60+
break;
61+
case 'read_only_false':
62+
setReadOnlyFalse(args);
63+
break;
64+
case 'formfield properties':
65+
break;
66+
default:
67+
break;
68+
}
69+
};
70+
71+
pdfviewer.customContextMenuBeforeOpen = function (args) {
72+
for (var i = 0; i < args.ids.length; i++) {
73+
var search = document.getElementById(args.ids[i]);
74+
if (search) {
75+
search.style.display = 'none';
76+
if (args.ids[i] === 'search_in_google' && (pdfviewer.textSelectionModule) && pdfviewer.textSelectionModule.isTextSelection) {
77+
search.style.display = 'block';
78+
} else if (args.ids[i] === "lock_annotation" || args.ids[i] === "unlock_annotation") {
79+
var isLockOption = args.ids[i] === "lock_annotation";
80+
for (var j = 0; j < pdfviewer.selectedItems.annotations.length; j++) {
81+
var selectedAnnotation = pdfviewer.selectedItems.annotations[j];
82+
if (selectedAnnotation && selectedAnnotation.annotationSettings) {
83+
var shouldDisplay = (isLockOption && !selectedAnnotation.annotationSettings.isLock) ||
84+
(!isLockOption && selectedAnnotation.annotationSettings.isLock);
85+
search.style.display = shouldDisplay ? 'block' : 'none';
86+
}
87+
}
88+
} else if ((args.ids[i] === "read_only_true" || args.ids[i] === "read_only_false") && pdfviewer.selectedItems.formFields.length !== 0) {
89+
var isReadOnlyOption = args.ids[i] === "read_only_true";
90+
for (var k = 0; k < pdfviewer.selectedItems.formFields.length; k++) {
91+
var selectedFormFields = pdfviewer.selectedItems.formFields[k];
92+
if (selectedFormFields) {
93+
var selectedFormField = pdfviewer.selectedItems.formFields[k].isReadonly;
94+
var displayMenu = (isReadOnlyOption && !selectedFormField) || (!isReadOnlyOption && selectedFormField);
95+
search.style.display = displayMenu ? 'block' : 'none';
96+
}
97+
}
98+
} else if (args.ids[i] === 'formfield properties' && pdfviewer.selectedItems.formFields.length !== 0) {
99+
search.style.display = 'block';
100+
}
101+
}
102+
}
103+
};
104+
105+
function lockAnnotations(args) {
106+
for (var i = 0; i < pdfviewer.annotationCollection.length; i++) {
107+
if (pdfviewer.annotationCollection[i].uniqueKey === pdfviewer.selectedItems.annotations[0].id) {
108+
pdfviewer.annotationCollection[i].annotationSettings.isLock = true;
109+
pdfviewer.annotationCollection[i].isCommentLock = true;
110+
pdfviewer.annotation.editAnnotation(pdfviewer.annotationCollection[i]);
111+
}
112+
args.cancel = false;
113+
}
114+
}
115+
116+
function unlockAnnotations(args) {
117+
for (var i = 0; i < pdfviewer.annotationCollection.length; i++) {
118+
if (pdfviewer.annotationCollection[i].uniqueKey === pdfviewer.selectedItems.annotations[0].id) {
119+
pdfviewer.annotationCollection[i].annotationSettings.isLock = false;
120+
pdfviewer.annotationCollection[i].isCommentLock = false;
121+
pdfviewer.annotation.editAnnotation(pdfviewer.annotationCollection[i]);
122+
}
123+
args.cancel = false;
124+
}
125+
}
126+
127+
function setReadOnlyTrue(args) {
128+
var selectedFormFields = pdfviewer.selectedItems.formFields;
129+
for (var i = 0; i < selectedFormFields.length; i++) {
130+
var selectFormFields = selectedFormFields[i];
131+
if (selectFormFields) {
132+
pdfviewer.formDesignerModule.updateFormField(selectFormFields, {
133+
isReadOnly: true,
134+
});
135+
}
136+
args.cancel = false;
137+
}
138+
}
139+
140+
function setReadOnlyFalse(args) {
141+
var selectedFormFields = pdfviewer.selectedItems.formFields;
142+
for (var i = 0; i < selectedFormFields.length; i++) {
143+
var selectFormFields = selectedFormFields[i];
144+
if (selectFormFields) {
145+
pdfviewer.formDesignerModule.updateFormField(selectFormFields, {
146+
isReadOnly: false,
147+
});
148+
}
149+
args.cancel = false;
150+
}
151+
}
152+
153+
var defaultCheckBoxObj = new ej.buttons.CheckBox({
154+
change: contextmenuHelper,
155+
label: "Hide Default Context Menu"
156+
});
157+
defaultCheckBoxObj.appendTo('#hide');
158+
159+
var positionCheckBoxObj = new ej.buttons.CheckBox({
160+
change: contextmenuHelper,
161+
label: "Add Custom option at bottom"
162+
163+
});
164+
positionCheckBoxObj.appendTo('#toolbar');
165+
166+
function contextmenuHelper(args) {
167+
pdfviewer.addCustomMenu(menuItems, defaultCheckBoxObj.checked, positionCheckBoxObj.checked);
168+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<!DOCTYPE html><html lang="en"><head>
2+
<title>EJ2 PDF Viewer</title>
3+
<meta charset="utf-8">
4+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
5+
<meta name="description" content="Typescript PDF Viewer Control">
6+
<meta name="author" content="Syncfusion">
7+
<link href="index.css" rel="stylesheet">
8+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-base/styles/material.css" rel="stylesheet">
9+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-pdfviewer/styles/material.css" rel="stylesheet">
10+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-buttons/styles/material.css" rel="stylesheet">
11+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-popups/styles/material.css" rel="stylesheet">
12+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-navigations/styles/material.css" rel="stylesheet">
13+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-dropdowns/styles/material.css" rel="stylesheet">
14+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-lists/styles/material.css" rel="stylesheet">
15+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-inputs/styles/material.css" rel="stylesheet">
16+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-splitbuttons/styles/material.css" rel="stylesheet">
17+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-notifications/styles/material.css" rel="stylesheet">
18+
19+
<!-- Essential JS 2 PDF Viewer's script -->
20+
<script src="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2.min.js" type="text/javascript"></script>
21+
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
22+
23+
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
24+
</head>
25+
<body>
26+
<button id="openBookmark">Open Bookmark Pane</button>
27+
<button id="closeBookmark">Close Bookmark Pane</button>
28+
<div id="container">
29+
<div id="PdfViewer" style="height:500px;width:100%;"></div>
30+
</div>
31+
32+
33+
<script>
34+
var ele = document.getElementById('container');
35+
if(ele) {
36+
ele.style.visibility = "visible";
37+
}
38+
</script>
39+
<script src="index.js" type="text/javascript"></script>
40+
</body></html>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
var pdfviewer = new ej.pdfviewer.PdfViewer({
2+
documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf',
3+
resourceUrl:'https://cdn.syncfusion.com/ej2/24.2.3/dist/ej2-pdfviewer-lib'
4+
});
5+
ej.pdfviewer.PdfViewer.Inject(ej.pdfviewer.TextSelection, ej.pdfviewer.TextSearch, ej.pdfviewer.Print, ej.pdfviewer.Navigation, ej.pdfviewer.Toolbar,
6+
ej.pdfviewer.Magnification, ej.pdfviewer.Annotation, ej.pdfviewer.FormDesigner, ej.pdfviewer.FormFields, ej.pdfviewer.PageOrganizer);
7+
document.getElementById('closeBookmark').addEventListener('click', () => {
8+
// close Bookmark pane
9+
pdfviewer.bookmarkViewModule.closeBookmarkPane();
10+
});
11+
document.getElementById('openBookmark').addEventListener('click', () => {
12+
// Open Bookmark pane
13+
pdfviewer.bookmarkViewModule.openBookmarkPane();
14+
});
15+
pdfviewer.appendTo('#PdfViewer');

How to/Organize pdf/index.html

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<!DOCTYPE html><html lang="en"><head>
2+
<title>EJ2 PDF Viewer</title>
3+
<meta charset="utf-8">
4+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
5+
<meta name="description" content="Typescript PDF Viewer Control">
6+
<meta name="author" content="Syncfusion">
7+
<link href="index.css" rel="stylesheet">
8+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-base/styles/material.css" rel="stylesheet">
9+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-pdfviewer/styles/material.css" rel="stylesheet">
10+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-buttons/styles/material.css" rel="stylesheet">
11+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-popups/styles/material.css" rel="stylesheet">
12+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-navigations/styles/material.css" rel="stylesheet">
13+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-dropdowns/styles/material.css" rel="stylesheet">
14+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-lists/styles/material.css" rel="stylesheet">
15+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-inputs/styles/material.css" rel="stylesheet">
16+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-splitbuttons/styles/material.css" rel="stylesheet">
17+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-notifications/styles/material.css" rel="stylesheet">
18+
19+
<!-- Essential JS 2 PDF Viewer's script -->
20+
<script src="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2.min.js" type="text/javascript"></script>
21+
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
22+
23+
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
24+
</head>
25+
<body>
26+
27+
<div id="container">
28+
<div id="PdfViewer" style="height:500px;width:100%;"></div>
29+
</div>
30+
31+
32+
<script>
33+
var ele = document.getElementById('container');
34+
if(ele) {
35+
ele.style.visibility = "visible";
36+
}
37+
</script>
38+
<script src="index.js" type="text/javascript"></script>
39+
</body></html>

How to/Organize pdf/index.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
var pdfviewer = new ej.pdfviewer.PdfViewer({
2+
documentPath: 'https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf',
3+
resourceUrl:'https://cdn.syncfusion.com/ej2/24.2.3/dist/ej2-pdfviewer-lib'
4+
});
5+
ej.pdfviewer.PdfViewer.Inject(ej.pdfviewer.TextSelection, ej.pdfviewer.TextSearch, ej.pdfviewer.Print, ej.pdfviewer.Navigation, ej.pdfviewer.Toolbar,
6+
ej.pdfviewer.Magnification, ej.pdfviewer.Annotation, ej.pdfviewer.FormDesigner, ej.pdfviewer.FormFields, ej.pdfviewer.PageOrganizer);
7+
pdfviewer.appendTo('#PdfViewer');
8+
pdfviewer.documentLoad = function (args) {
9+
var isInitialLoading = true;
10+
if (isInitialLoading) {
11+
pdfviewer.isPageOrganizerOpen = true;
12+
isInitialLoading = false;
13+
} else {
14+
pdfviewer.isPageOrganizerOpen = false;
15+
}
16+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<!DOCTYPE html><html lang="en"><head>
2+
<title>EJ2 PDF Viewer</title>
3+
<meta charset="utf-8">
4+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
5+
<meta name="description" content="Typescript PDF Viewer Control">
6+
<meta name="author" content="Syncfusion">
7+
<link href="index.css" rel="stylesheet">
8+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-base/styles/material.css" rel="stylesheet">
9+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-pdfviewer/styles/material.css" rel="stylesheet">
10+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-buttons/styles/material.css" rel="stylesheet">
11+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-popups/styles/material.css" rel="stylesheet">
12+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-navigations/styles/material.css" rel="stylesheet">
13+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-dropdowns/styles/material.css" rel="stylesheet">
14+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-lists/styles/material.css" rel="stylesheet">
15+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-inputs/styles/material.css" rel="stylesheet">
16+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-splitbuttons/styles/material.css" rel="stylesheet">
17+
<link href="https://cdn.syncfusion.com/ej2/25.1.35/ej2-notifications/styles/material.css" rel="stylesheet">
18+
19+
<!-- Essential JS 2 PDF Viewer's script -->
20+
<script src="https://cdn.syncfusion.com/ej2/25.1.35/dist/ej2.min.js" type="text/javascript"></script>
21+
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
22+
23+
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
24+
</head>
25+
<body>
26+
27+
<div id="container">
28+
<div id="PdfViewer" style="height:500px;width:100%;"></div>
29+
</div>
30+
31+
32+
<script>
33+
var ele = document.getElementById('container');
34+
if(ele) {
35+
ele.style.visibility = "visible";
36+
}
37+
</script>
38+
<script src="index.js" type="text/javascript"></script>
39+
</body></html>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
var pdfviewer = new ej.pdfviewer.PdfViewer({
2+
documentPath: 'https://cdn.syncfusion.com/content/pdf/form-designer.pdf',
3+
resourceUrl:'https://cdn.syncfusion.com/ej2/24.2.3/dist/ej2-pdfviewer-lib'
4+
});
5+
ej.pdfviewer.PdfViewer.Inject(ej.pdfviewer.TextSelection, ej.pdfviewer.TextSearch, ej.pdfviewer.Print, ej.pdfviewer.Navigation, ej.pdfviewer.Toolbar,
6+
ej.pdfviewer.Magnification, ej.pdfviewer.Annotation, ej.pdfviewer.FormDesigner, ej.pdfviewer.FormFields, ej.pdfviewer.PageOrganizer);
7+
pdfviewer.appendTo('#PdfViewer');
8+
9+
pdfviewer.pageRenderInitiate = args => {
10+
// This method is called when the page rendering starts
11+
console.log('Rendering of pages started');
12+
console.log(args);
13+
};
14+
15+
pdfviewer.pageRenderComplete = args => {
16+
// This method is called when the page rendering completes
17+
console.log('Rendering of pages completed');
18+
console.log(args);
19+
};

0 commit comments

Comments
 (0)