@pdftron/pdfnet-node-samples 9.1.0-2 → 9.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +18 -18
- package/samples/AddImageTest/AddImageTest.js +115 -115
- package/samples/AdvancedImagingTest/AdvancedImagingTest.js +64 -64
- package/samples/AnnotationTest/AnnotationTest.js +641 -641
- package/samples/BookmarkTest/BookmarkTest.js +219 -219
- package/samples/ContentReplacerTest/ContentReplacerTest.js +75 -75
- package/samples/ElementBuilderTest/ElementBuilderTest.js +513 -513
- package/samples/ElementEditTest/ElementEditTest.js +110 -110
- package/samples/ElementReaderAdvTest/ElementReaderAdvTest.js +305 -305
- package/samples/ElementReaderTest/ElementReaderTest.js +77 -77
- package/samples/EncTest/EncTest.js +175 -175
- package/samples/LicenseKey/LicenseKey.js +11 -11
- package/samples/LogicalStructureTest/LogicalStructureTest.js +250 -250
- package/samples/PDF2HtmlTest/PDF2HtmlTest.js +123 -117
- package/samples/PDF2OfficeTest/PDF2OfficeTest.js +158 -0
- package/samples/PDF2OfficeTest/RunTest.bat +2 -0
- package/samples/PDF2OfficeTest/RunTest.sh +2 -0
- package/samples/PDFATest/PDFATest.js +85 -85
- package/samples/PDFDrawTest/PDFDrawTest.js +305 -305
- package/samples/PDFLayersTest/PDFLayersTest.js +294 -294
- package/samples/PDFPageTest/PDFPageTest.js +189 -189
- package/samples/PDFRedactTest/PDFRedactTest.js +74 -74
- package/samples/RectTest/RectTest.js +40 -40
- package/samples/SDFTest/SDFTest.js +88 -88
- package/samples/StamperTest/StamperTest.js +255 -255
- package/samples/TestFiles/Misc-Fixed.pfa +1166 -1166
- package/samples/TestFiles/SHA-2 Root USERTrust RSA CA Sectigo timestamping.crt +34 -34
- package/samples/TestFiles/form1_annots.xfdf +33 -33
- package/samples/TestFiles/form1_data.xfdf +139 -139
- package/samples/TestFiles/my_stream.txt +2310 -2310
- package/samples/TextExtractTest/TextExtractTest.js +286 -286
- package/samples/TextSearchTest/TextSearchTest.js +121 -121
- package/samples/UndoRedoTest/UndoRedoTest.js +101 -101
- package/samples/UnicodeWriteTest/UnicodeWriteTest.js +173 -173
- package/samples/runall.bat +3 -3
- package/samples/runall.sh +14 -14
- package/samples/PDF2WordTest/PDF2WordTest.js +0 -85
- package/samples/PDF2WordTest/RunTest.bat +0 -2
- package/samples/PDF2WordTest/RunTest.sh +0 -2
- package/samples/TestFiles/Output/addimage.pdf +0 -0
- package/samples/TestFiles/Output/annotation_test1.pdf +0 -0
- package/samples/TestFiles/Output/annotation_test2.pdf +0 -0
- package/samples/TestFiles/Output/bookmark.pdf +0 -0
- package/samples/TestFiles/Output/bookmark_remote.pdf +0 -0
- package/samples/TestFiles/Output/new_annot_test_api.pdf +0 -0
|
@@ -1,122 +1,122 @@
|
|
|
1
|
-
//---------------------------------------------------------------------------------------
|
|
2
|
-
// Copyright (c) 2001-2021 by PDFTron Systems Inc. All Rights Reserved.
|
|
3
|
-
// Consult legal.txt regarding legal and license information.
|
|
4
|
-
//---------------------------------------------------------------------------------------
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const { PDFNet } = require('@pdftron/pdfnet-node');
|
|
8
|
-
const PDFTronLicense = require('../LicenseKey/LicenseKey');
|
|
9
|
-
|
|
10
|
-
((exports) => {
|
|
11
|
-
|
|
12
|
-
exports.runTextSearchTest = () => {
|
|
13
|
-
|
|
14
|
-
const main = async() => {
|
|
15
|
-
// Relative path to the folder containing test files.
|
|
16
|
-
const inputURL = '../TestFiles/';
|
|
17
|
-
const inputFilename = 'credit card numbers.pdf'; // addimage.pdf, newsletter.pdf
|
|
18
|
-
|
|
19
|
-
try {
|
|
20
|
-
const doc = await PDFNet.PDFDoc.createFromFilePath(inputURL + inputFilename);
|
|
21
|
-
doc.initSecurityHandler();
|
|
22
|
-
|
|
23
|
-
const txtSearch = await PDFNet.TextSearch.create();
|
|
24
|
-
let mode = PDFNet.TextSearch.Mode.e_whole_word + PDFNet.TextSearch.Mode.e_page_stop; // Uses both whole word and page stop
|
|
25
|
-
let pattern = 'joHn sMiTh';
|
|
26
|
-
|
|
27
|
-
txtSearch.begin(doc, pattern, mode); // searches for the "pattern" in the document while following the inputted modes.
|
|
28
|
-
|
|
29
|
-
let step = 0;
|
|
30
|
-
|
|
31
|
-
// call Run() iteratively to find all matching instances of the word 'joHn sMiTh'
|
|
32
|
-
/* eslint-disable-next-line no-constant-condition */
|
|
33
|
-
while (true) {
|
|
34
|
-
const result = await txtSearch.run();
|
|
35
|
-
let hlts;
|
|
36
|
-
if (result.code === PDFNet.TextSearch.ResultCode.e_found) {
|
|
37
|
-
if (step === 0) { // Step 0: found "John Smith"
|
|
38
|
-
// note that, here, 'ambient_str' and 'highlights' are not written to,
|
|
39
|
-
// as 'e_ambient_string' and 'e_highlight' are not set.
|
|
40
|
-
console.log(result.out_str + "'s credit card number is: ");
|
|
41
|
-
|
|
42
|
-
// now switch to using regular expressions to find John's credit card number
|
|
43
|
-
mode = await txtSearch.getMode();
|
|
44
|
-
mode += PDFNet.TextSearch.Mode.e_reg_expression + PDFNet.TextSearch.Mode.e_highlight;
|
|
45
|
-
txtSearch.setMode(mode);
|
|
46
|
-
pattern = '\\d{4}-\\d{4}-\\d{4}-\\d{4}'; // or "(\\d{4}-){3}\\d{4}"
|
|
47
|
-
txtSearch.setPattern(pattern);
|
|
48
|
-
|
|
49
|
-
++step;
|
|
50
|
-
} else if (step === 1) {
|
|
51
|
-
// step 1: found John's credit card number
|
|
52
|
-
console.log(' ' + result.out_str);
|
|
53
|
-
// note that, here, 'hlts' is written to, as 'e_highlight' has been set.
|
|
54
|
-
// output the highlight info of the credit card number.
|
|
55
|
-
hlts = result.highlights;
|
|
56
|
-
hlts.begin(doc);
|
|
57
|
-
while ((await hlts.hasNext())) {
|
|
58
|
-
const highlightPageNum = await hlts.getCurrentPageNumber();
|
|
59
|
-
console.log('The current highlight is from page: ' + highlightPageNum);
|
|
60
|
-
await hlts.next();
|
|
61
|
-
}
|
|
62
|
-
// see if there is an AMEX card number
|
|
63
|
-
pattern = '\\d{4}-\\d{6}-\\d{5}';
|
|
64
|
-
txtSearch.setPattern(pattern);
|
|
65
|
-
|
|
66
|
-
++step;
|
|
67
|
-
} else if (step === 2) {
|
|
68
|
-
// found an AMEX card number
|
|
69
|
-
console.log('\nThere is an AMEX card number:\n ' + result.out_str);
|
|
70
|
-
|
|
71
|
-
// change mode to find the owner of the credit card; supposedly, the owner's
|
|
72
|
-
// name proceeds the number
|
|
73
|
-
mode = await txtSearch.getMode();
|
|
74
|
-
mode += PDFNet.TextSearch.Mode.e_search_up;
|
|
75
|
-
txtSearch.setMode(mode);
|
|
76
|
-
pattern = '[A-z]++ [A-z]++';
|
|
77
|
-
txtSearch.setPattern(pattern);
|
|
78
|
-
|
|
79
|
-
++step;
|
|
80
|
-
} else if (step === 3) {
|
|
81
|
-
// found the owner's name of the AMEX card
|
|
82
|
-
console.log("Is the owner's name:\n " + result.out_str + '?');
|
|
83
|
-
|
|
84
|
-
// add a link annotation based on the location of the found instance
|
|
85
|
-
hlts = result.highlights;
|
|
86
|
-
await hlts.begin(doc); // is await needed?
|
|
87
|
-
while ((await hlts.hasNext())) {
|
|
88
|
-
const curPage = await doc.getPage((await hlts.getCurrentPageNumber()));
|
|
89
|
-
const quadArr = await hlts.getCurrentQuads();
|
|
90
|
-
for (let i = 0; i < quadArr.length; ++i) {
|
|
91
|
-
const currQuad = quadArr[i];
|
|
92
|
-
const x1 = Math.min(Math.min(Math.min(currQuad.p1x, currQuad.p2x), currQuad.p3x), currQuad.p4x);
|
|
93
|
-
const x2 = Math.max(Math.max(Math.max(currQuad.p1x, currQuad.p2x), currQuad.p3x), currQuad.p4x);
|
|
94
|
-
const y1 = Math.min(Math.min(Math.min(currQuad.p1y, currQuad.p2y), currQuad.p3y), currQuad.p4y);
|
|
95
|
-
const y2 = Math.max(Math.max(Math.max(currQuad.p1y, currQuad.p2y), currQuad.p3y), currQuad.p4y);
|
|
96
|
-
|
|
97
|
-
const hyperLink = await PDFNet.LinkAnnot.create(doc, (await PDFNet.Rect.init(x1, y1, x2, y2)));
|
|
98
|
-
await hyperLink.setAction((await PDFNet.Action.createURI(doc, 'http://www.pdftron.com')));
|
|
99
|
-
await curPage.annotPushBack(hyperLink);
|
|
100
|
-
}
|
|
101
|
-
hlts.next();
|
|
102
|
-
}
|
|
103
|
-
await doc.save('../TestFiles/Output/credit card numbers_linked.pdf', PDFNet.SDFDoc.SaveOptions.e_linearized);
|
|
104
|
-
break;
|
|
105
|
-
}
|
|
106
|
-
} else if (result.code === PDFNet.TextSearch.ResultCode.e_page) {
|
|
107
|
-
// you can update your UI here, if needed
|
|
108
|
-
console.log('page end');
|
|
109
|
-
} else if (result.code === PDFNet.TextSearch.ResultCode.e_done) {
|
|
110
|
-
break;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
} catch (err) {
|
|
114
|
-
console.log(err);
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
PDFNet.runWithCleanup(main, PDFTronLicense.Key).catch(function(error){console.log('Error: ' + JSON.stringify(error));}).then(function(){return PDFNet.shutdown();});
|
|
118
|
-
};
|
|
119
|
-
exports.runTextSearchTest();
|
|
120
|
-
})(exports);
|
|
121
|
-
// eslint-disable-next-line spaced-comment
|
|
1
|
+
//---------------------------------------------------------------------------------------
|
|
2
|
+
// Copyright (c) 2001-2021 by PDFTron Systems Inc. All Rights Reserved.
|
|
3
|
+
// Consult legal.txt regarding legal and license information.
|
|
4
|
+
//---------------------------------------------------------------------------------------
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
const { PDFNet } = require('@pdftron/pdfnet-node');
|
|
8
|
+
const PDFTronLicense = require('../LicenseKey/LicenseKey');
|
|
9
|
+
|
|
10
|
+
((exports) => {
|
|
11
|
+
|
|
12
|
+
exports.runTextSearchTest = () => {
|
|
13
|
+
|
|
14
|
+
const main = async() => {
|
|
15
|
+
// Relative path to the folder containing test files.
|
|
16
|
+
const inputURL = '../TestFiles/';
|
|
17
|
+
const inputFilename = 'credit card numbers.pdf'; // addimage.pdf, newsletter.pdf
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
const doc = await PDFNet.PDFDoc.createFromFilePath(inputURL + inputFilename);
|
|
21
|
+
doc.initSecurityHandler();
|
|
22
|
+
|
|
23
|
+
const txtSearch = await PDFNet.TextSearch.create();
|
|
24
|
+
let mode = PDFNet.TextSearch.Mode.e_whole_word + PDFNet.TextSearch.Mode.e_page_stop; // Uses both whole word and page stop
|
|
25
|
+
let pattern = 'joHn sMiTh';
|
|
26
|
+
|
|
27
|
+
txtSearch.begin(doc, pattern, mode); // searches for the "pattern" in the document while following the inputted modes.
|
|
28
|
+
|
|
29
|
+
let step = 0;
|
|
30
|
+
|
|
31
|
+
// call Run() iteratively to find all matching instances of the word 'joHn sMiTh'
|
|
32
|
+
/* eslint-disable-next-line no-constant-condition */
|
|
33
|
+
while (true) {
|
|
34
|
+
const result = await txtSearch.run();
|
|
35
|
+
let hlts;
|
|
36
|
+
if (result.code === PDFNet.TextSearch.ResultCode.e_found) {
|
|
37
|
+
if (step === 0) { // Step 0: found "John Smith"
|
|
38
|
+
// note that, here, 'ambient_str' and 'highlights' are not written to,
|
|
39
|
+
// as 'e_ambient_string' and 'e_highlight' are not set.
|
|
40
|
+
console.log(result.out_str + "'s credit card number is: ");
|
|
41
|
+
|
|
42
|
+
// now switch to using regular expressions to find John's credit card number
|
|
43
|
+
mode = await txtSearch.getMode();
|
|
44
|
+
mode += PDFNet.TextSearch.Mode.e_reg_expression + PDFNet.TextSearch.Mode.e_highlight;
|
|
45
|
+
txtSearch.setMode(mode);
|
|
46
|
+
pattern = '\\d{4}-\\d{4}-\\d{4}-\\d{4}'; // or "(\\d{4}-){3}\\d{4}"
|
|
47
|
+
txtSearch.setPattern(pattern);
|
|
48
|
+
|
|
49
|
+
++step;
|
|
50
|
+
} else if (step === 1) {
|
|
51
|
+
// step 1: found John's credit card number
|
|
52
|
+
console.log(' ' + result.out_str);
|
|
53
|
+
// note that, here, 'hlts' is written to, as 'e_highlight' has been set.
|
|
54
|
+
// output the highlight info of the credit card number.
|
|
55
|
+
hlts = result.highlights;
|
|
56
|
+
hlts.begin(doc);
|
|
57
|
+
while ((await hlts.hasNext())) {
|
|
58
|
+
const highlightPageNum = await hlts.getCurrentPageNumber();
|
|
59
|
+
console.log('The current highlight is from page: ' + highlightPageNum);
|
|
60
|
+
await hlts.next();
|
|
61
|
+
}
|
|
62
|
+
// see if there is an AMEX card number
|
|
63
|
+
pattern = '\\d{4}-\\d{6}-\\d{5}';
|
|
64
|
+
txtSearch.setPattern(pattern);
|
|
65
|
+
|
|
66
|
+
++step;
|
|
67
|
+
} else if (step === 2) {
|
|
68
|
+
// found an AMEX card number
|
|
69
|
+
console.log('\nThere is an AMEX card number:\n ' + result.out_str);
|
|
70
|
+
|
|
71
|
+
// change mode to find the owner of the credit card; supposedly, the owner's
|
|
72
|
+
// name proceeds the number
|
|
73
|
+
mode = await txtSearch.getMode();
|
|
74
|
+
mode += PDFNet.TextSearch.Mode.e_search_up;
|
|
75
|
+
txtSearch.setMode(mode);
|
|
76
|
+
pattern = '[A-z]++ [A-z]++';
|
|
77
|
+
txtSearch.setPattern(pattern);
|
|
78
|
+
|
|
79
|
+
++step;
|
|
80
|
+
} else if (step === 3) {
|
|
81
|
+
// found the owner's name of the AMEX card
|
|
82
|
+
console.log("Is the owner's name:\n " + result.out_str + '?');
|
|
83
|
+
|
|
84
|
+
// add a link annotation based on the location of the found instance
|
|
85
|
+
hlts = result.highlights;
|
|
86
|
+
await hlts.begin(doc); // is await needed?
|
|
87
|
+
while ((await hlts.hasNext())) {
|
|
88
|
+
const curPage = await doc.getPage((await hlts.getCurrentPageNumber()));
|
|
89
|
+
const quadArr = await hlts.getCurrentQuads();
|
|
90
|
+
for (let i = 0; i < quadArr.length; ++i) {
|
|
91
|
+
const currQuad = quadArr[i];
|
|
92
|
+
const x1 = Math.min(Math.min(Math.min(currQuad.p1x, currQuad.p2x), currQuad.p3x), currQuad.p4x);
|
|
93
|
+
const x2 = Math.max(Math.max(Math.max(currQuad.p1x, currQuad.p2x), currQuad.p3x), currQuad.p4x);
|
|
94
|
+
const y1 = Math.min(Math.min(Math.min(currQuad.p1y, currQuad.p2y), currQuad.p3y), currQuad.p4y);
|
|
95
|
+
const y2 = Math.max(Math.max(Math.max(currQuad.p1y, currQuad.p2y), currQuad.p3y), currQuad.p4y);
|
|
96
|
+
|
|
97
|
+
const hyperLink = await PDFNet.LinkAnnot.create(doc, (await PDFNet.Rect.init(x1, y1, x2, y2)));
|
|
98
|
+
await hyperLink.setAction((await PDFNet.Action.createURI(doc, 'http://www.pdftron.com')));
|
|
99
|
+
await curPage.annotPushBack(hyperLink);
|
|
100
|
+
}
|
|
101
|
+
hlts.next();
|
|
102
|
+
}
|
|
103
|
+
await doc.save('../TestFiles/Output/credit card numbers_linked.pdf', PDFNet.SDFDoc.SaveOptions.e_linearized);
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
} else if (result.code === PDFNet.TextSearch.ResultCode.e_page) {
|
|
107
|
+
// you can update your UI here, if needed
|
|
108
|
+
console.log('page end');
|
|
109
|
+
} else if (result.code === PDFNet.TextSearch.ResultCode.e_done) {
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
} catch (err) {
|
|
114
|
+
console.log(err);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
PDFNet.runWithCleanup(main, PDFTronLicense.Key).catch(function(error){console.log('Error: ' + JSON.stringify(error));}).then(function(){return PDFNet.shutdown();});
|
|
118
|
+
};
|
|
119
|
+
exports.runTextSearchTest();
|
|
120
|
+
})(exports);
|
|
121
|
+
// eslint-disable-next-line spaced-comment
|
|
122
122
|
//# sourceURL=TextSearchTest.js
|
|
@@ -1,101 +1,101 @@
|
|
|
1
|
-
//---------------------------------------------------------------------------------------
|
|
2
|
-
// Copyright (c) 2001-2021 by PDFTron Systems Inc. All Rights Reserved.
|
|
3
|
-
// Consult legal.txt regarding legal and license information.
|
|
4
|
-
//---------------------------------------------------------------------------------------
|
|
5
|
-
|
|
6
|
-
//---------------------------------------------------------------------------------------
|
|
7
|
-
// The following sample illustrates how to use the UndoRedo API.
|
|
8
|
-
//---------------------------------------------------------------------------------------
|
|
9
|
-
const { PDFNet } = require('@pdftron/pdfnet-node');
|
|
10
|
-
const PDFTronLicense = require('../LicenseKey/LicenseKey');
|
|
11
|
-
|
|
12
|
-
((exports) => {
|
|
13
|
-
|
|
14
|
-
exports.runUndoRedoTest = () => {
|
|
15
|
-
|
|
16
|
-
const main = async () => {
|
|
17
|
-
try {
|
|
18
|
-
// Relative path to the folder containing test files.
|
|
19
|
-
const inputPath = '../TestFiles/';
|
|
20
|
-
const outputPath = inputPath + 'Output/';
|
|
21
|
-
|
|
22
|
-
// Open the PDF document.
|
|
23
|
-
const doc = await PDFNet.PDFDoc.createFromFilePath(inputPath + 'newsletter.pdf');
|
|
24
|
-
|
|
25
|
-
const undo_manager = await doc.getUndoManager();
|
|
26
|
-
|
|
27
|
-
// Take a snapshot to which we can undo after making changes.
|
|
28
|
-
const snap0 = await undo_manager.takeSnapshot();
|
|
29
|
-
|
|
30
|
-
const snap0_state = await snap0.currentState();
|
|
31
|
-
|
|
32
|
-
const page = await doc.pageCreate(); // Start a new page
|
|
33
|
-
|
|
34
|
-
const bld = await PDFNet.ElementBuilder.create(); // Used to build new Element objects
|
|
35
|
-
const writer = await PDFNet.ElementWriter.create(); // Used to write Elements to the page
|
|
36
|
-
writer.beginOnPage(page); // Begin writing to this page
|
|
37
|
-
|
|
38
|
-
// ----------------------------------------------------------
|
|
39
|
-
// Add JPEG image to the file
|
|
40
|
-
const img = await PDFNet.Image.createFromFile(doc, inputPath + 'peppers.jpg');
|
|
41
|
-
const element = await bld.createImageFromMatrix(img, await PDFNet.Matrix2D.create(200, 0, 0, 250, 50, 500));
|
|
42
|
-
writer.writePlacedElement(element);
|
|
43
|
-
|
|
44
|
-
await writer.end(); // Finish writing to the page
|
|
45
|
-
await doc.pagePushFront(page);
|
|
46
|
-
|
|
47
|
-
// Take a snapshot after making changes, so that we can redo later (after undoing first).
|
|
48
|
-
const snap1 = await undo_manager.takeSnapshot();
|
|
49
|
-
|
|
50
|
-
if (await (await snap1.previousState()).equals(snap0_state)) {
|
|
51
|
-
console.log('snap1 previous state equals snap0_state; previous state is correct');
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const snap1_state = await snap1.currentState();
|
|
55
|
-
|
|
56
|
-
await doc.save(outputPath + 'addimage.pdf', PDFNet.SDFDoc.SaveOptions.e_incremental);
|
|
57
|
-
|
|
58
|
-
if (await undo_manager.canUndo()) {
|
|
59
|
-
const undo_snap = await undo_manager.undo();
|
|
60
|
-
|
|
61
|
-
await doc.save(outputPath + 'addimage_undone.pdf', PDFNet.SDFDoc.SaveOptions.e_incremental);
|
|
62
|
-
|
|
63
|
-
const undo_snap_state = await undo_snap.currentState();
|
|
64
|
-
|
|
65
|
-
if (await undo_snap_state.equals(snap0_state)) {
|
|
66
|
-
console.log('undo_snap_state equals snap0_state; undo was successful');
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
if (await undo_manager.canRedo()) {
|
|
70
|
-
const redo_snap = await undo_manager.redo();
|
|
71
|
-
|
|
72
|
-
await doc.save(outputPath + 'addimage_redone.pdf', PDFNet.SDFDoc.SaveOptions.e_incremental);
|
|
73
|
-
|
|
74
|
-
if (await (await redo_snap.previousState()).equals(undo_snap_state)) {
|
|
75
|
-
console.log('redo_snap previous state equals undo_snap_state; previous state is correct');
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const redo_snap_state = await redo_snap.currentState();
|
|
79
|
-
|
|
80
|
-
if (await redo_snap_state.equals(snap1_state)) {
|
|
81
|
-
console.log('Snap1 and redo_snap are equal; redo was successful');
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
console.log('Problem encountered - cannot redo.');
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
console.log('Problem encountered - cannot undo.');
|
|
90
|
-
}
|
|
91
|
-
} catch (err) {
|
|
92
|
-
console.log(err.stack);
|
|
93
|
-
}
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
PDFNet.runWithCleanup(main, PDFTronLicense.Key).catch(function (error) { console.log('Error: ' + JSON.stringify(error)); }).then(function () { return PDFNet.shutdown(); });
|
|
97
|
-
};
|
|
98
|
-
exports.runUndoRedoTest();
|
|
99
|
-
})(exports);
|
|
100
|
-
// eslint-disable-next-line spaced-comment
|
|
101
|
-
//# sourceURL=UndoRedoTest.js
|
|
1
|
+
//---------------------------------------------------------------------------------------
|
|
2
|
+
// Copyright (c) 2001-2021 by PDFTron Systems Inc. All Rights Reserved.
|
|
3
|
+
// Consult legal.txt regarding legal and license information.
|
|
4
|
+
//---------------------------------------------------------------------------------------
|
|
5
|
+
|
|
6
|
+
//---------------------------------------------------------------------------------------
|
|
7
|
+
// The following sample illustrates how to use the UndoRedo API.
|
|
8
|
+
//---------------------------------------------------------------------------------------
|
|
9
|
+
const { PDFNet } = require('@pdftron/pdfnet-node');
|
|
10
|
+
const PDFTronLicense = require('../LicenseKey/LicenseKey');
|
|
11
|
+
|
|
12
|
+
((exports) => {
|
|
13
|
+
|
|
14
|
+
exports.runUndoRedoTest = () => {
|
|
15
|
+
|
|
16
|
+
const main = async () => {
|
|
17
|
+
try {
|
|
18
|
+
// Relative path to the folder containing test files.
|
|
19
|
+
const inputPath = '../TestFiles/';
|
|
20
|
+
const outputPath = inputPath + 'Output/';
|
|
21
|
+
|
|
22
|
+
// Open the PDF document.
|
|
23
|
+
const doc = await PDFNet.PDFDoc.createFromFilePath(inputPath + 'newsletter.pdf');
|
|
24
|
+
|
|
25
|
+
const undo_manager = await doc.getUndoManager();
|
|
26
|
+
|
|
27
|
+
// Take a snapshot to which we can undo after making changes.
|
|
28
|
+
const snap0 = await undo_manager.takeSnapshot();
|
|
29
|
+
|
|
30
|
+
const snap0_state = await snap0.currentState();
|
|
31
|
+
|
|
32
|
+
const page = await doc.pageCreate(); // Start a new page
|
|
33
|
+
|
|
34
|
+
const bld = await PDFNet.ElementBuilder.create(); // Used to build new Element objects
|
|
35
|
+
const writer = await PDFNet.ElementWriter.create(); // Used to write Elements to the page
|
|
36
|
+
writer.beginOnPage(page); // Begin writing to this page
|
|
37
|
+
|
|
38
|
+
// ----------------------------------------------------------
|
|
39
|
+
// Add JPEG image to the file
|
|
40
|
+
const img = await PDFNet.Image.createFromFile(doc, inputPath + 'peppers.jpg');
|
|
41
|
+
const element = await bld.createImageFromMatrix(img, await PDFNet.Matrix2D.create(200, 0, 0, 250, 50, 500));
|
|
42
|
+
writer.writePlacedElement(element);
|
|
43
|
+
|
|
44
|
+
await writer.end(); // Finish writing to the page
|
|
45
|
+
await doc.pagePushFront(page);
|
|
46
|
+
|
|
47
|
+
// Take a snapshot after making changes, so that we can redo later (after undoing first).
|
|
48
|
+
const snap1 = await undo_manager.takeSnapshot();
|
|
49
|
+
|
|
50
|
+
if (await (await snap1.previousState()).equals(snap0_state)) {
|
|
51
|
+
console.log('snap1 previous state equals snap0_state; previous state is correct');
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const snap1_state = await snap1.currentState();
|
|
55
|
+
|
|
56
|
+
await doc.save(outputPath + 'addimage.pdf', PDFNet.SDFDoc.SaveOptions.e_incremental);
|
|
57
|
+
|
|
58
|
+
if (await undo_manager.canUndo()) {
|
|
59
|
+
const undo_snap = await undo_manager.undo();
|
|
60
|
+
|
|
61
|
+
await doc.save(outputPath + 'addimage_undone.pdf', PDFNet.SDFDoc.SaveOptions.e_incremental);
|
|
62
|
+
|
|
63
|
+
const undo_snap_state = await undo_snap.currentState();
|
|
64
|
+
|
|
65
|
+
if (await undo_snap_state.equals(snap0_state)) {
|
|
66
|
+
console.log('undo_snap_state equals snap0_state; undo was successful');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (await undo_manager.canRedo()) {
|
|
70
|
+
const redo_snap = await undo_manager.redo();
|
|
71
|
+
|
|
72
|
+
await doc.save(outputPath + 'addimage_redone.pdf', PDFNet.SDFDoc.SaveOptions.e_incremental);
|
|
73
|
+
|
|
74
|
+
if (await (await redo_snap.previousState()).equals(undo_snap_state)) {
|
|
75
|
+
console.log('redo_snap previous state equals undo_snap_state; previous state is correct');
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const redo_snap_state = await redo_snap.currentState();
|
|
79
|
+
|
|
80
|
+
if (await redo_snap_state.equals(snap1_state)) {
|
|
81
|
+
console.log('Snap1 and redo_snap are equal; redo was successful');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
console.log('Problem encountered - cannot redo.');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
console.log('Problem encountered - cannot undo.');
|
|
90
|
+
}
|
|
91
|
+
} catch (err) {
|
|
92
|
+
console.log(err.stack);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
PDFNet.runWithCleanup(main, PDFTronLicense.Key).catch(function (error) { console.log('Error: ' + JSON.stringify(error)); }).then(function () { return PDFNet.shutdown(); });
|
|
97
|
+
};
|
|
98
|
+
exports.runUndoRedoTest();
|
|
99
|
+
})(exports);
|
|
100
|
+
// eslint-disable-next-line spaced-comment
|
|
101
|
+
//# sourceURL=UndoRedoTest.js
|