1//---------------------------------------------------------------------------------------
2// Copyright (c) 2001-2023 by Apryse Software Inc. All Rights Reserved.
3// Consult legal.txt regarding legal and license information.
4//---------------------------------------------------------------------------------------
5
6(exports => {
7
8 exports.runElementEditTest = () => {
9 const PDFNet = exports.Core.PDFNet;
10
11 async function ProcessElements(reader, writer, visited) {
12 await PDFNet.startDeallocateStack();
13 const colorspace = await PDFNet.ColorSpace.createDeviceRGB();
14 const redColor = await PDFNet.ColorPt.init(1, 0, 0, 0);
15 const blueColor = await PDFNet.ColorPt.init(0, 0, 1, 0);
16
17 for (let element = await reader.next(); element !== null; element = await reader.next()) {
18 const elementType = await element.getType();
19 let gs;
20 let formObj;
21 let formObjNum = null;
22 switch (elementType) {
23 case PDFNet.Element.Type.e_image:
24 case PDFNet.Element.Type.e_inline_image:
25 // remove all images by skipping them
26 break;
27 case PDFNet.Element.Type.e_path:
28 // Set all paths to red
29 gs = await element.getGState();
30 gs.setFillColorSpace(colorspace);
31 gs.setFillColorWithColorPt(redColor);
32 writer.writeElement(element);
33 break;
34 case PDFNet.Element.Type.e_text:
35 // Set all text to blue
36 gs = await element.getGState();
37 gs.setFillColorSpace(colorspace);
38 gs.setFillColorWithColorPt(blueColor);
39 writer.writeElement(element);
40 break;
41 case PDFNet.Element.Type.e_form:
42 writer.writeElement(element);
43 formObj = await element.getXObject();
44 formObjNum = formObj.getObjNum();
45 // if XObject not yet processed
46 if (visited.indexOf(formObjNum) === -1) {
47 // Set Replacement
48 const insertedObj = await formObj.getObjNum();
49 if (!visited.includes(insertedObj)) {
50 visited.push(insertedObj);
51 }
52 const newWriter = await PDFNet.ElementWriter.create();
53 reader.formBegin();
54 newWriter.beginOnObj(formObj, true);
55 await ProcessElements(reader, newWriter, visited);
56 newWriter.end();
57 reader.end();
58 }
59 break;
60 default:
61 writer.writeElement(element);
62 }
63 }
64 await PDFNet.endDeallocateStack();
65 }
66
67 const main = async () => {
68 console.log('Beginning Test');
69 const ret = 0;
70 // Relative path to the folder containing test files.
71 const inputUrl = '../TestFiles/';
72 const doc = await PDFNet.PDFDoc.createFromURL(inputUrl + 'newsletter.pdf');
73 doc.initSecurityHandler();
74 doc.lock();
75
76 console.log('PDF document initialized and locked');
77 const writer = await PDFNet.ElementWriter.create();
78 const reader = await PDFNet.ElementReader.create();
79 const visited = [];
80
81 const totalPageNumber = await doc.getPageCount();
82
83 const itr = await doc.getPageIterator(1);
84
85 // Read every page
86 for (itr; await itr.hasNext(); itr.next()) {
87 const page = await itr.current();
88 const currentPageNumber = await page.getIndex();
89 console.log('Processing elements on page ' + currentPageNumber + '/' + totalPageNumber);
90 const sdfObj = await page.getSDFObj();
91 // Set Replacement
92 const insertedObj = await sdfObj.getObjNum();
93 if (!visited.includes(insertedObj)) {
94 visited.push(insertedObj);
95 }
96 reader.beginOnPage(page);
97 writer.beginOnPage(page, PDFNet.ElementWriter.WriteMode.e_replacement, false);
98 await ProcessElements(reader, writer, visited);
99 writer.end();
100 reader.end();
101 }
102
103 const docBuffer = await doc.saveMemoryBuffer(PDFNet.SDFDoc.SaveOptions.e_remove_unused);
104 saveBufferAsPDFDoc(docBuffer, 'newsletter_edited.pdf');
105 console.log('Done.');
106 return ret;
107 };
108
109 // add your own license key as the second parameter, e.g. PDFNet.runWithCleanup(main, 'YOUR_LICENSE_KEY')
110 PDFNet.runWithCleanup(main);
111 };
112})(window);
113// eslint-disable-next-line spaced-comment
114//# sourceURL=ElementEditTest.js