@pdftron/pdfnet-node-samples 9.5.0 → 10.0.0-3

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.
Files changed (142) hide show
  1. package/package.json +3 -3
  2. package/samples/AddImageTest/AddImageTest.js +1 -1
  3. package/samples/AdvancedImagingTest/AdvancedImagingTest.js +3 -3
  4. package/samples/AnnotationTest/AnnotationTest.js +1 -1
  5. package/samples/BookmarkTest/BookmarkTest.js +1 -1
  6. package/samples/CAD2PDFTest/CAD2PDFTest.js +3 -3
  7. package/samples/ContentReplacerTest/ContentReplacerTest.js +1 -1
  8. package/samples/ConvertTest/ConvertTest.js +1 -1
  9. package/samples/DataExtractionTest/DataExtractionTest.js +7 -7
  10. package/samples/DigitalSignaturesTest/DigitalSignaturesTest.js +1 -1
  11. package/samples/DocumentCreationTest/DocumentCreationTest.js +78 -0
  12. package/samples/ElementBuilderTest/ElementBuilderTest.js +1 -1
  13. package/samples/ElementEditTest/ElementEditTest.js +1 -1
  14. package/samples/ElementReaderAdvTest/ElementReaderAdvTest.js +1 -1
  15. package/samples/ElementReaderTest/ElementReaderTest.js +1 -1
  16. package/samples/EncTest/EncTest.js +1 -1
  17. package/samples/FDFTest/FDFTest.js +1 -1
  18. package/samples/HTML2PDFTest/HTML2PDFTest.js +2 -2
  19. package/samples/HighlightsTest/HighlightsTest.js +1 -1
  20. package/samples/ImageExtractTest/ImageExtractTest.js +1 -1
  21. package/samples/ImpositionTest/ImpositionTest.js +1 -1
  22. package/samples/InteractiveFormsTest/InteractiveFormsTest.js +1 -1
  23. package/samples/JBIG2Test/JBIG2Test.js +1 -1
  24. package/samples/LicenseKey/LicenseKey.js +1 -1
  25. package/samples/LogicalStructureTest/LogicalStructureTest.js +1 -1
  26. package/samples/OCRTest/OCRTest.js +2 -2
  27. package/samples/OfficeTemplateTest/OfficeTemplateTest.js +1 -1
  28. package/samples/OfficeToPDFTest/OfficeToPDFTest.js +1 -1
  29. package/samples/OptimizerTest/OptimizerTest.js +1 -1
  30. package/samples/PDF2HtmlTest/PDF2HtmlTest.js +3 -3
  31. package/samples/PDF2OfficeTest/PDF2OfficeTest.js +3 -3
  32. package/samples/PDFATest/PDFATest.js +1 -1
  33. package/samples/PDFDocMemoryTest/PDFDocMemoryTest.js +1 -1
  34. package/samples/PDFDrawTest/PDFDrawTest.js +1 -1
  35. package/samples/PDFLayersTest/PDFLayersTest.js +1 -1
  36. package/samples/PDFPackageTest/PDFPackageTest.js +1 -1
  37. package/samples/PDFPageTest/PDFPageTest.js +1 -1
  38. package/samples/PDFRedactTest/PDFRedactTest.js +1 -1
  39. package/samples/PageLabelsTest/PageLabelsTest.js +1 -1
  40. package/samples/PatternTest/PatternTest.js +1 -1
  41. package/samples/RectTest/RectTest.js +1 -1
  42. package/samples/SDFTest/SDFTest.js +1 -1
  43. package/samples/StamperTest/StamperTest.js +1 -1
  44. package/samples/TextExtractTest/TextExtractTest.js +1 -1
  45. package/samples/TextSearchTest/TextSearchTest.js +1 -1
  46. package/samples/U3DTest/U3DTest.js +1 -1
  47. package/samples/UndoRedoTest/UndoRedoTest.js +1 -1
  48. package/samples/UnicodeWriteTest/UnicodeWriteTest.js +1 -1
  49. package/samples/WebViewerConvertTest/WebViewerConvertTest.js +1 -1
  50. package/samples/AddImageTest/NODEJS/AddImageTest.js +0 -116
  51. package/samples/AddImageTest/NODEJS/RunTest.sh +0 -2
  52. package/samples/AdvancedImagingTest/NODEJS/AdvancedImagingTest.js +0 -78
  53. package/samples/AdvancedImagingTest/NODEJS/RunTest.sh +0 -2
  54. package/samples/AnnotationTest/NODEJS/AnnotationTest.js +0 -642
  55. package/samples/AnnotationTest/NODEJS/RunTest.sh +0 -2
  56. package/samples/BookmarkTest/NODEJS/BookmarkTest.js +0 -220
  57. package/samples/BookmarkTest/NODEJS/RunTest.sh +0 -2
  58. package/samples/CAD2PDFTest/NODEJS/CAD2PDFTest.js +0 -80
  59. package/samples/CAD2PDFTest/NODEJS/RunTest.sh +0 -2
  60. package/samples/ContentReplacerTest/NODEJS/ContentReplacerTest.js +0 -75
  61. package/samples/ContentReplacerTest/NODEJS/RunTest.sh +0 -2
  62. package/samples/ConvertTest/NODEJS/ConvertTest.js +0 -270
  63. package/samples/ConvertTest/NODEJS/RunTest.sh +0 -2
  64. package/samples/DataExtractionTest/NODEJS/DataExtractionTest.js +0 -180
  65. package/samples/DataExtractionTest/NODEJS/RunTest.sh +0 -2
  66. package/samples/DigitalSignaturesTest/NODEJS/DigitalSignaturesTest.js +0 -527
  67. package/samples/DigitalSignaturesTest/NODEJS/RunTest.sh +0 -2
  68. package/samples/ElementBuilderTest/NODEJS/ElementBuilderTest.js +0 -514
  69. package/samples/ElementBuilderTest/NODEJS/RunTest.sh +0 -2
  70. package/samples/ElementEditTest/NODEJS/ElementEditTest.js +0 -111
  71. package/samples/ElementEditTest/NODEJS/RunTest.sh +0 -2
  72. package/samples/ElementReaderAdvTest/NODEJS/ElementReaderAdvTest.js +0 -305
  73. package/samples/ElementReaderAdvTest/NODEJS/RunTest.sh +0 -2
  74. package/samples/ElementReaderTest/NODEJS/ElementReaderTest.js +0 -77
  75. package/samples/ElementReaderTest/NODEJS/RunTest.sh +0 -2
  76. package/samples/EncTest/NODEJS/EncTest.js +0 -176
  77. package/samples/EncTest/NODEJS/RunTest.sh +0 -2
  78. package/samples/FDFTest/NODEJS/FDFTest.js +0 -219
  79. package/samples/FDFTest/NODEJS/RunTest.sh +0 -2
  80. package/samples/HTML2PDFTest/NODEJS/HTML2PDFTest.js +0 -166
  81. package/samples/HTML2PDFTest/NODEJS/RunTest.sh +0 -2
  82. package/samples/HighlightsTest/NODEJS/HighlightsTest.js +0 -97
  83. package/samples/HighlightsTest/NODEJS/RunTest.sh +0 -2
  84. package/samples/ImageExtractTest/NODEJS/ImageExtractTest.js +0 -130
  85. package/samples/ImageExtractTest/NODEJS/RunTest.sh +0 -2
  86. package/samples/ImpositionTest/NODEJS/ImpositionTest.js +0 -87
  87. package/samples/ImpositionTest/NODEJS/RunTest.sh +0 -2
  88. package/samples/InteractiveFormsTest/NODEJS/InteractiveFormsTest.js +0 -382
  89. package/samples/InteractiveFormsTest/NODEJS/RunTest.sh +0 -2
  90. package/samples/JBIG2Test/NODEJS/JBIG2Test.js +0 -89
  91. package/samples/JBIG2Test/NODEJS/RunTest.sh +0 -2
  92. package/samples/LicenseKey/NODEJS/LicenseKey.js +0 -11
  93. package/samples/LogicalStructureTest/NODEJS/LogicalStructureTest.js +0 -251
  94. package/samples/LogicalStructureTest/NODEJS/RunTest.sh +0 -2
  95. package/samples/OCRTest/NODEJS/OCRTest.js +0 -235
  96. package/samples/OCRTest/NODEJS/RunTest.sh +0 -2
  97. package/samples/OfficeTemplateTest/NODEJS/OfficeTemplateTest.js +0 -79
  98. package/samples/OfficeTemplateTest/NODEJS/RunTest.sh +0 -2
  99. package/samples/OfficeToPDFTest/NODEJS/OfficeToPDFTest.js +0 -125
  100. package/samples/OfficeToPDFTest/NODEJS/RunTest.sh +0 -2
  101. package/samples/OptimizerTest/NODEJS/OptimizerTest.js +0 -192
  102. package/samples/OptimizerTest/NODEJS/RunTest.sh +0 -2
  103. package/samples/PDF2HtmlTest/NODEJS/PDF2HtmlTest.js +0 -123
  104. package/samples/PDF2HtmlTest/NODEJS/RunTest.sh +0 -2
  105. package/samples/PDF2OfficeTest/NODEJS/PDF2OfficeTest.js +0 -158
  106. package/samples/PDF2OfficeTest/NODEJS/RunTest.sh +0 -2
  107. package/samples/PDFATest/NODEJS/PDFATest.js +0 -85
  108. package/samples/PDFATest/NODEJS/RunTest.sh +0 -2
  109. package/samples/PDFDocMemoryTest/NODEJS/PDFDocMemoryTest.js +0 -85
  110. package/samples/PDFDocMemoryTest/NODEJS/RunTest.sh +0 -2
  111. package/samples/PDFDrawTest/NODEJS/PDFDrawTest.js +0 -306
  112. package/samples/PDFDrawTest/NODEJS/RunTest.sh +0 -2
  113. package/samples/PDFLayersTest/NODEJS/PDFLayersTest.js +0 -295
  114. package/samples/PDFLayersTest/NODEJS/RunTest.sh +0 -2
  115. package/samples/PDFPackageTest/NODEJS/PDFPackageTest.js +0 -112
  116. package/samples/PDFPackageTest/NODEJS/RunTest.sh +0 -2
  117. package/samples/PDFPageTest/NODEJS/PDFPageTest.js +0 -190
  118. package/samples/PDFPageTest/NODEJS/RunTest.sh +0 -2
  119. package/samples/PDFRedactTest/NODEJS/PDFRedactTest.js +0 -75
  120. package/samples/PDFRedactTest/NODEJS/RunTest.sh +0 -2
  121. package/samples/PageLabelsTest/NODEJS/PageLabelsTest.js +0 -139
  122. package/samples/PageLabelsTest/NODEJS/RunTest.sh +0 -2
  123. package/samples/PatternTest/NODEJS/PatternTest.js +0 -227
  124. package/samples/PatternTest/NODEJS/RunTest.sh +0 -2
  125. package/samples/RectTest/NODEJS/RectTest.js +0 -41
  126. package/samples/RectTest/NODEJS/RunTest.sh +0 -2
  127. package/samples/SDFTest/NODEJS/RunTest.sh +0 -2
  128. package/samples/SDFTest/NODEJS/SDFTest.js +0 -88
  129. package/samples/StamperTest/NODEJS/RunTest.sh +0 -2
  130. package/samples/StamperTest/NODEJS/StamperTest.js +0 -256
  131. package/samples/TextExtractTest/NODEJS/RunTest.sh +0 -2
  132. package/samples/TextExtractTest/NODEJS/TextExtractTest.js +0 -287
  133. package/samples/TextSearchTest/NODEJS/RunTest.sh +0 -2
  134. package/samples/TextSearchTest/NODEJS/TextSearchTest.js +0 -122
  135. package/samples/U3DTest/NODEJS/RunTest.sh +0 -2
  136. package/samples/U3DTest/NODEJS/U3DTest.js +0 -105
  137. package/samples/UndoRedoTest/NODEJS/RunTest.sh +0 -2
  138. package/samples/UndoRedoTest/NODEJS/UndoRedoTest.js +0 -101
  139. package/samples/UnicodeWriteTest/NODEJS/RunTest.sh +0 -2
  140. package/samples/UnicodeWriteTest/NODEJS/UnicodeWriteTest.js +0 -174
  141. package/samples/WebViewerConvertTest/NODEJS/RunTest.sh +0 -2
  142. package/samples/WebViewerConvertTest/NODEJS/WebViewerConvertTest.js +0 -136
@@ -1,295 +0,0 @@
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
- // This sample demonstrates how to create layers in PDF.
8
- // The sample also shows how to extract and render PDF layers in documents
9
- // that contain optional content groups (OCGs)
10
- //
11
- // With the introduction of PDF version 1.5 came the concept of Layers.
12
- // Layers, or as they are more formally known Optional Content Groups (OCGs),
13
- // refer to sections of content in a PDF document that can be selectively
14
- // viewed or hidden by document authors or consumers. This capability is useful
15
- // in CAD drawings, layered artwork, maps, multi-language documents etc.
16
- //
17
- // Notes:
18
- // ---------------------------------------
19
- // - This sample is using CreateLayer() utility method to create new OCGs.
20
- // CreateLayer() is relatively basic, however it can be extended to set
21
- // other optional entries in the 'OCG' and 'OCProperties' dictionary. For
22
- // a complete listing of possible entries in OC dictionary please refer to
23
- // section 4.10 'Optional Content' in the PDF Reference Manual.
24
- // - The sample is grouping all layer content into separate Form XObjects.
25
- // Although using PDFNet is is also possible to specify Optional Content in
26
- // Content Streams (Section 4.10.2 in PDF Reference), Optional Content in
27
- // XObjects results in PDFs that are cleaner, less-error prone, and faster
28
- // to process.
29
- //-----------------------------------------------------------------------------------
30
-
31
- const { PDFNet } = require('../../../lib/pdfnet.js');
32
- const PDFTronLicense = require('../../LicenseKey/NODEJS/LicenseKey');
33
-
34
- ((exports) => {
35
-
36
- exports.runPDFLayersTest = () => {
37
- const inputPath = '../../TestFiles/';
38
- const outputPath = inputPath + 'Output/';
39
-
40
- // A utility function used to add new Content Groups (Layers) to the document.
41
- const CreateLayer = async(doc, layerName) => {
42
- await PDFNet.startDeallocateStack();
43
- const grp = await PDFNet.OCG.create(doc, layerName);
44
- let cfg = await doc.getOCGConfig();
45
- if (cfg == null) {
46
- cfg = await PDFNet.OCGConfig.create(doc, true);
47
- cfg.setName('Default');
48
- }
49
-
50
- // Add the new OCG to the list of layers that should appear in PDF viewer GUI.
51
- let layerOrderArray = await cfg.getOrder();
52
- if (layerOrderArray == null) {
53
- layerOrderArray = await doc.createIndirectArray();
54
- cfg.setOrder(layerOrderArray);
55
- }
56
- const grpSDFObj = await grp.getSDFObj();
57
- layerOrderArray.pushBack(grpSDFObj);
58
-
59
- await PDFNet.endDeallocateStack();
60
- return grp;
61
- };
62
-
63
- // Creates some content (3 images) and associate them with the image layer
64
- const CreateGroup1 = async(doc, layer) => {
65
- await PDFNet.startDeallocateStack();
66
- const writer = await PDFNet.ElementWriter.create();
67
- writer.begin(doc);
68
-
69
- // Create an Image that can be reused in the document or on the same page.
70
- const img = await PDFNet.Image.createFromFile(doc, inputPath + 'peppers.jpg');
71
-
72
- const builder = await PDFNet.ElementBuilder.create();
73
- const imgWidth = await img.getImageWidth();
74
- const imgHeight = await img.getImageHeight();
75
- const imgMatrix = new PDFNet.Matrix2D(imgWidth / 2, -145, 20, imgHeight / 2, 200, 150);
76
- const element = await builder.createImageFromMatrix(img, imgMatrix);
77
- writer.writePlacedElement(element);
78
-
79
- const gstate = await element.getGState(); // use the same image (just change its matrix)
80
- gstate.setTransform(200, 0, 0, 300, 50, 450);
81
- writer.writePlacedElement(element);
82
-
83
- // use the same image again (just change its matrix).
84
- writer.writePlacedElement(await builder.createImageScaled(img, 300, 600, 200, -150));
85
-
86
- const grpObj = await writer.end();
87
-
88
- // Indicate that this form (content group) belongs to the given layer (OCG).
89
- grpObj.putName('Subtype', 'Form');
90
- grpObj.put('OC', layer);
91
- grpObj.putRect('BBox', 0, 0, 1000, 1000); // Set the clip box for the content.
92
- await PDFNet.endDeallocateStack();
93
-
94
- return grpObj;
95
- };
96
-
97
- const CreateGroup2 = async(doc, layer) => {
98
- await PDFNet.startDeallocateStack();
99
- const writer = await PDFNet.ElementWriter.create();
100
- writer.begin(doc);
101
-
102
- // Create a path object in the shape of a heart.
103
- const builder = await PDFNet.ElementBuilder.create();
104
- builder.pathBegin(); // start constructing the path
105
- builder.moveTo(306, 396);
106
- builder.curveTo(681, 771, 399.75, 864.75, 306, 771);
107
- builder.curveTo(212.25, 864.75, -69, 771, 306, 396);
108
- builder.closePath();
109
- const element = await builder.pathEnd(); // the path geometry is now specified.
110
-
111
- // Set the path FILL color space and color.
112
- element.setPathFill(true);
113
- const gstate = await element.getGState();
114
- const CMYKSpace = await PDFNet.ColorSpace.createDeviceCMYK();
115
- gstate.setFillColorSpace(CMYKSpace);
116
- const cyanColorPt = await PDFNet.ColorPt.init(1, 0, 0, 0); // CMYK
117
- gstate.setFillColorWithColorPt(cyanColorPt); // cyan
118
-
119
- // Set the path STROKE color space and color.
120
- element.setPathStroke(true);
121
- const RGBSpace = await PDFNet.ColorSpace.createDeviceRGB();
122
- gstate.setStrokeColorSpace(RGBSpace);
123
- const redColorPt = await PDFNet.ColorPt.init(1, 0, 0); // RGB
124
- gstate.setStrokeColorWithColorPt(redColorPt); // red
125
- gstate.setLineWidth(20);
126
-
127
- gstate.setTransform(0.5, 0, 0, 0.5, 280, 300);
128
-
129
- writer.writeElement(element);
130
-
131
- const grpObj = await writer.end();
132
-
133
- // Indicate that this form (content group) belongs to the given layer (OCG).
134
- grpObj.putName('Subtype', 'Form');
135
- grpObj.put('OC', layer);
136
- grpObj.putRect('BBox', 0, 0, 1000, 1000); // Set the clip box for the content.
137
-
138
- await PDFNet.endDeallocateStack();
139
- return grpObj;
140
- };
141
-
142
- const CreateGroup3 = async(doc, layer) => {
143
- await PDFNet.startDeallocateStack();
144
- const writer = await PDFNet.ElementWriter.create();
145
- writer.begin(doc);
146
-
147
- const builder = await PDFNet.ElementBuilder.create();
148
-
149
- // Begin writing a block of text
150
- const textFont = await PDFNet.Font.create(doc, PDFNet.Font.StandardType1Font.e_times_roman);
151
- let element = await builder.createTextBeginWithFont(textFont, 120);
152
- writer.writeElement(element);
153
-
154
- element = await builder.createNewTextRun('A text layer!');
155
-
156
- // Rotate text 45 degrees, than translate 180 pts horizontally and 100 pts vertically.
157
- const transform = await PDFNet.Matrix2D.createRotationMatrix(-45 * (3.1415 / 180.0));
158
- await transform.concat(1, 0, 0, 1, 180, 100);
159
- await element.setTextMatrix(transform);
160
-
161
- await writer.writeElement(element);
162
- await writer.writeElement(await builder.createTextEnd());
163
-
164
- const grpObj = await writer.end();
165
-
166
- // Indicate that this form (content group) belongs to the given layer (OCG).
167
- grpObj.putName('Subtype', 'Form');
168
- grpObj.put('OC', layer);
169
- grpObj.putRect('BBox', 0, 0, 1000, 1000); // Set the clip box for the content.
170
- await PDFNet.endDeallocateStack();
171
- return grpObj;
172
- };
173
-
174
-
175
- const main = async() => {
176
- try {
177
- const doc = await PDFNet.PDFDoc.create();
178
- doc.initSecurityHandler();
179
-
180
- const imageLayer = await CreateLayer(doc, 'Image Layer');
181
- const textLayer = await CreateLayer(doc, 'Text Layer');
182
- const vectorLayer = await CreateLayer(doc, 'Vector Layer');
183
-
184
- // Start a new page ------------------------------------
185
- const page = await doc.pageCreate();
186
-
187
- const builder = await PDFNet.ElementBuilder.create(); // ElementBuilder is used to build new Element objects
188
- const writer = await PDFNet.ElementWriter.create(); // ElementWriter is used to write Elements to the page
189
- writer.beginOnPage(page); // Begin writing to the page
190
-
191
- const groupObj = await CreateGroup1(doc, (await imageLayer.getSDFObj()));
192
- let element = await builder.createFormFromStream(groupObj);
193
- writer.writeElement(element);
194
-
195
- const groupObj2 = await CreateGroup2(doc, (await vectorLayer.getSDFObj()));
196
- element = await builder.createFormFromStream(groupObj2);
197
- writer.writeElement(element);
198
-
199
- // eslint-disable-next-line no-constant-condition
200
- if (false) {
201
- // A bit more advanced example of how to create an OCMD text layer that
202
- // is visible only if text, image and path layers are all 'ON'.
203
- // An example of how to set 'Visibility Policy' in OCMD.
204
- const ocgs = doc.createIndirectArray();
205
- ocgs.pushBack(await imageLayer.getSDFObj());
206
- ocgs.pushBack(await vectorLayer.getSDFObj());
207
- ocgs.PushBack(await textLayer.getSDFObj());
208
- const textOcmd = await PDFNet.OCMD.create(doc, ocgs, PDFNet.OCMD.VisibilityPolicyType.e_AllOn);
209
- element = await builder.createFormFromStream(await CreateGroup3(doc, (await textOcmd.getSDFObj())));
210
- } else {
211
- // let SDFObj = await textLayer.getSDFObj();
212
- element = await builder.createFormFromStream(await CreateGroup3(doc, (await textLayer.getSDFObj())));
213
- }
214
- writer.writeElement(element);
215
-
216
- // Add some content to the page that does not belong to any layer...
217
- // In this case this is a rectangle representing the page border.
218
- element = await builder.createRect(0, 0, (await page.getPageWidth()), (await page.getPageHeight()));
219
- element.setPathFill(false);
220
- element.setPathStroke(true);
221
- const elementGState = await element.getGState();
222
- elementGState.setLineWidth(40);
223
- writer.writeElement(element);
224
-
225
- writer.end(); // save changes to the current page
226
- doc.pagePushBack(page);
227
-
228
- // Set the default viewing preference to display 'Layer' tab.
229
- const prefs = await doc.getViewPrefs();
230
- prefs.setPageMode(PDFNet.PDFDocViewPrefs.PageMode.e_UseOC);
231
-
232
- await doc.save(outputPath + 'pdf_layers.pdf', PDFNet.SDFDoc.SaveOptions.e_linearized);
233
- console.log('Done.');
234
- } catch (err) {
235
- // console.log(err);
236
- console.log(err.stack);
237
- }
238
-
239
- // The following is a code snippet shows how to selectively render
240
- // and export PDF layers.
241
- try {
242
- const doc = await PDFNet.PDFDoc.createFromFilePath(outputPath + 'pdf_layers.pdf');
243
- doc.initSecurityHandler();
244
-
245
- if (!(await doc.hasOC())) {
246
- console.log("The document does not contain 'Optional Content'");
247
- } else {
248
- const initCfg = await doc.getOCGConfig();
249
- const ctx = await PDFNet.OCGContext.createFromConfig(initCfg);
250
-
251
- const pdfdraw = await PDFNet.PDFDraw.create();
252
- pdfdraw.setImageSize(1000, 1000);
253
- pdfdraw.setOCGContext(ctx);
254
-
255
- const page = await doc.getPage(1);
256
-
257
- await pdfdraw.export(page, outputPath + 'pdf_layers_default.png');
258
-
259
- // Disable drawing of content that is not optional (i.e. is not part of any layer).
260
- ctx.setNonOCDrawing(false);
261
-
262
- // Now render each layer in the input document to a separate image.
263
- const ocgs = await doc.getOCGs();
264
- if (ocgs !== null) {
265
- let i;
266
- const sz = await ocgs.size();
267
- for (i = 0; i < sz; ++i) {
268
- const ocg = await PDFNet.OCG.createFromObj(await ocgs.getAt(i));
269
- ctx.resetStates(false);
270
- await ctx.setState(ocg, true);
271
- let fname = 'pdf_layers_';
272
- fname += await ocg.getName();
273
- fname += '.png';
274
- console.log(fname);
275
- await pdfdraw.export(page, outputPath + fname);
276
- }
277
- }
278
-
279
- // Now draw content that is not part of any layer...
280
- ctx.setNonOCDrawing(true);
281
- await ctx.setOCDrawMode(PDFNet.OCGContext.OCDrawMode.e_NoOC);
282
- await pdfdraw.export(page, outputPath + 'pdf_layers_non_oc.png');
283
- }
284
-
285
- console.log('Done.');
286
- } catch (err) {
287
- console.log(err.stack);
288
- }
289
- };
290
- PDFNet.runWithCleanup(main, PDFTronLicense.Key).catch(function(error){console.log('Error: ' + JSON.stringify(error));}).then(function(){return PDFNet.shutdown();});
291
- };
292
- exports.runPDFLayersTest();
293
- })(exports);
294
- // eslint-disable-next-line spaced-comment
295
- //# sourceURL=PDFLayersTest.js
@@ -1,2 +0,0 @@
1
- #!/bin/sh
2
- node PDFLayersTest.js
@@ -1,112 +0,0 @@
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
- /// This sample illustrates how to create, extract, and manipulate PDF Portfolios
8
- /// (a.k.a. PDF Packages) using PDFNet SDK.
9
- //-----------------------------------------------------------------------------------
10
-
11
- const { PDFNet } = require('../../../lib/pdfnet.js');
12
- const PDFTronLicense = require('../../LicenseKey/NODEJS/LicenseKey');
13
-
14
- ((exports) => {
15
- 'use strict';
16
-
17
- exports.runPDFPackageTest = () => {
18
- // Relative path to the folder containing test files.
19
- const inputPath = '../../TestFiles/';
20
- const outputPath = inputPath + 'Output/';
21
-
22
- const addPackage = async (doc, file, desc) => {
23
- const files = await PDFNet.NameTree.create(doc, 'EmbeddedFiles');
24
- const fs = await PDFNet.FileSpec.create(doc, file, true);
25
- files.put(file, await fs.getSDFObj());
26
- fs.setDesc(desc);
27
-
28
- const root = await doc.getRoot();
29
- let collection = await root.findObj('Collection');
30
- if (!collection) collection = await root.putDict('Collection');
31
-
32
- // You could here manipulate any entry in the Collection dictionary.
33
- // For example, the following line sets the tile mode for initial view mode
34
- // Please refer to section '2.3.5 Collections' in PDF Reference for details.
35
- collection.putName('View', 'T');
36
- }
37
-
38
- const addCoverPage = async (doc) => {
39
- // Here we dynamically generate cover page (please see ElementBuilder
40
- // sample for more extensive coverage of PDF creation API).
41
- const page = await doc.pageCreate(await PDFNet.Rect.init(0, 0, 200, 200));
42
-
43
- const b = await PDFNet.ElementBuilder.create();
44
- const w = await PDFNet.ElementWriter.create();
45
- w.beginOnPage(page);
46
- const font = await PDFNet.Font.create(doc, PDFNet.Font.StandardType1Font.e_helvetica);
47
- w.writeElement(await b.createTextBeginWithFont(font, 12));
48
- const e = await b.createNewTextRun('My PDF Collection');
49
- e.setTextMatrixEntries(1, 0, 0, 1, 50, 96);
50
- const gstate = await e.getGState();
51
- gstate.setFillColorSpace(await PDFNet.ColorSpace.createDeviceRGB());
52
- gstate.setFillColorWithColorPt(await PDFNet.ColorPt.init(1, 0, 0));
53
- w.writeElement(e);
54
- w.writeElement(await b.createTextEnd());
55
- w.end();
56
- doc.pagePushBack(page);
57
-
58
- // Alternatively we could import a PDF page from a template PDF document
59
- // (for an example please see PDFPage sample project).
60
- }
61
-
62
- const main = async () => {
63
-
64
- // Create a PDF Package.
65
- try {
66
- const doc = await PDFNet.PDFDoc.create();
67
- await addPackage(doc, inputPath + 'numbered.pdf', 'My File 1');
68
- await addPackage(doc, inputPath + 'newsletter.pdf', 'My Newsletter...');
69
- await addPackage(doc, inputPath + 'peppers.jpg', 'An image');
70
- await addCoverPage(doc);
71
- await doc.save(outputPath + 'package.pdf', PDFNet.SDFDoc.SaveOptions.e_linearized);
72
- console.log('Done.');
73
- } catch (err) {
74
- console.log(err);
75
- }
76
-
77
- try {
78
- const doc = await PDFNet.PDFDoc.createFromFilePath(outputPath + 'package.pdf');
79
- await doc.initSecurityHandler();
80
-
81
- const files = await PDFNet.NameTree.find(doc, 'EmbeddedFiles');
82
- if (await files.isValid()) {
83
- // Traverse the list of embedded files.
84
- const i = await files.getIteratorBegin();
85
- for (var counter = 0; await i.hasNext(); await i.next(), ++counter) {
86
- const entry_name = await i.key().then(key => key.getAsPDFText());
87
- console.log('Part: ' + entry_name);
88
- const file_spec = await PDFNet.FileSpec.createFromObj(await i.value());
89
- const stm = await file_spec.getFileData();
90
- if (stm) {
91
- let ext = '.pdf';
92
- if (entry_name.includes('.')) {
93
- ext = entry_name.substr(entry_name.lastIndexOf('.'));
94
- }
95
- stm.writeToFile(outputPath + 'extract_' + counter + ext, false);
96
- }
97
- }
98
- }
99
-
100
- console.log('Done.');
101
- } catch (err) {
102
- console.log(err);
103
- }
104
- }
105
- PDFNet.runWithCleanup(main, PDFTronLicense.Key).catch(function(error) {
106
- console.log('Error: ' + JSON.stringify(error));
107
- }).then(function(){ return PDFNet.shutdown(); });
108
- };
109
- exports.runPDFPackageTest();
110
- })(exports);
111
- // eslint-disable-next-line spaced-comment
112
- //# sourceURL=PDFPackageTest.js
@@ -1,2 +0,0 @@
1
- #!/bin/sh
2
- node PDFPackageTest.js
@@ -1,190 +0,0 @@
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
- const { PDFNet } = require('../../../lib/pdfnet.js');
7
- const PDFTronLicense = require('../../LicenseKey/NODEJS/LicenseKey');
8
-
9
- ((exports) => {
10
-
11
- exports.runPDFPageTest = () => {
12
-
13
- const main = async () => {
14
- // Relative path to the folder containing test files.
15
- const inputPath = '../../TestFiles/';
16
- const outputPath = inputPath + 'Output/';
17
-
18
- // Sample 1 - Split a PDF document into multiple pages
19
- try {
20
- console.log('_______________________________________________');
21
- console.log('Sample 1 - Split a PDF document into multiple pages...');
22
- console.log('Opening the input pdf...');
23
- const inDoc = await PDFNet.PDFDoc.createFromFilePath(inputPath + 'newsletter.pdf');
24
- inDoc.initSecurityHandler();
25
-
26
- const pageCount = await inDoc.getPageCount();
27
- for (let i = 1; i <= pageCount; ++i) {
28
- const newDoc = await PDFNet.PDFDoc.create();
29
- const filename = 'newsletter_split_page_' + i + '.pdf';
30
- newDoc.insertPages(0, inDoc, i, i, PDFNet.PDFDoc.InsertFlag.e_none);
31
- await newDoc.save(outputPath + filename, PDFNet.SDFDoc.SaveOptions.e_remove_unused);
32
- console.log('Done. Result saved in ' + filename);
33
- }
34
- } catch (err) {
35
- // console.log(err);
36
- console.log(err.stack);
37
- }
38
-
39
- // Sample 2 - Merge several PDF documents into one
40
- try {
41
- console.log('_______________________________________________');
42
- console.log('Sample 2 - Merge several PDF documents into one...');
43
-
44
- // start stack-based deallocation with startDeallocateStack. Later on when endDeallocateStack is called,
45
- // all objects in memory that were initialized since the most recent startDeallocateStack call will be
46
- // cleaned up. Doing this makes sure that memory growth does not get too high.
47
- await PDFNet.startDeallocateStack();
48
- const newDoc = await PDFNet.PDFDoc.create();
49
- newDoc.initSecurityHandler();
50
-
51
- const pageNum = 15
52
- for (let i = 1; i <= pageNum; ++i) {
53
- const fname = 'newsletter_split_page_' + i + '.pdf';
54
- console.log('Opening ' + fname);
55
- const currDoc = await PDFNet.PDFDoc.createFromFilePath(outputPath + fname);
56
- const currDocPageCount = await currDoc.getPageCount();
57
- newDoc.insertPages(i, currDoc, 1, currDocPageCount, PDFNet.PDFDoc.InsertFlag.e_none);
58
- }
59
- await newDoc.save(outputPath + 'newsletter_merge_pages.pdf', PDFNet.SDFDoc.SaveOptions.e_remove_unused);
60
- console.log('Done. Result saved in newsletter_merge_pages.pdf');
61
- await PDFNet.endDeallocateStack();
62
- } catch (err) {
63
- // console.log(err);
64
- console.log(err.stack);
65
- ret = 1;
66
- }
67
-
68
- // Sample 3 - Delete every second page
69
- try {
70
- console.log('_______________________________________________');
71
- console.log('Sample 3 - Delete every second page...');
72
- console.log('Opening the input pdf...');
73
- await PDFNet.startDeallocateStack();
74
- const inDoc = await PDFNet.PDFDoc.createFromFilePath(inputPath + 'newsletter.pdf');
75
- inDoc.initSecurityHandler();
76
-
77
- let pageNum = await inDoc.getPageCount();
78
-
79
- while (pageNum >= 1) {
80
- const itr = await inDoc.getPageIterator(pageNum);
81
- inDoc.pageRemove(itr);
82
- pageNum -= 2;
83
- }
84
-
85
- await inDoc.save(outputPath + 'newsletter_page_remove.pdf', 0);
86
- console.log('Done. Result saved in newsletter_page_remove.pdf...');
87
- await PDFNet.endDeallocateStack();
88
- } catch (err) {
89
- console.log(err);
90
- ret = 1;
91
- }
92
-
93
- // Sample 4 - Inserts a page from one document at different
94
- // locations within another document
95
- try {
96
- console.log('_______________________________________________');
97
- console.log('Sample 4 - Insert a page at different locations...');
98
- console.log('Opening the input pdf...');
99
- await PDFNet.startDeallocateStack();
100
- const in1Doc = await PDFNet.PDFDoc.createFromFilePath(inputPath + 'newsletter.pdf');
101
- in1Doc.initSecurityHandler();
102
-
103
- const in2Doc = await PDFNet.PDFDoc.createFromFilePath(inputPath + 'fish.pdf');
104
- in2Doc.initSecurityHandler();
105
-
106
- const srcPage = await in2Doc.getPageIterator();
107
- const dstPage = await in1Doc.getPageIterator();
108
- let pageNum = 1;
109
- while (await dstPage.hasNext()) {
110
- if (pageNum++ % 3 === 0) {
111
- in1Doc.pageInsert(dstPage, await srcPage.current());
112
- }
113
- dstPage.next();
114
- }
115
-
116
- await in1Doc.save(outputPath + 'newsletter_page_insert.pdf', 0);
117
- console.log('Done. Result saved in newsletter_page_insert.pdf...');
118
- await PDFNet.endDeallocateStack();
119
- } catch (err) {
120
- console.log(err.stack);
121
- ret = 1;
122
- }
123
-
124
- // Sample 5 - Replicate pages within a single document
125
- try {
126
- console.log('_______________________________________________');
127
- console.log('Sample 5 - Replicate pages within a single document...');
128
- console.log('Opening the input pdf...');
129
- await PDFNet.startDeallocateStack();
130
- const doc = await PDFNet.PDFDoc.createFromFilePath(inputPath + 'newsletter.pdf');
131
- doc.initSecurityHandler();
132
-
133
- // Replicate the cover page three times (copy page #1 and place it before the
134
- // seventh page in the document page sequence)
135
- const cover = await doc.getPage(1);
136
- const p7 = await doc.getPageIterator(7);
137
- doc.pageInsert(p7, cover);
138
- doc.pageInsert(p7, cover);
139
- doc.pageInsert(p7, cover);
140
- // replicate cover page two more times by placing it before and after existing pages
141
- doc.pagePushFront(cover);
142
- doc.pagePushBack(cover);
143
-
144
- await doc.save(outputPath + 'newsletter_page_clone.pdf', 0);
145
- console.log('Done. Result saved in newsletter_page_clone.pdf...');
146
- await PDFNet.endDeallocateStack();
147
- } catch (err) {
148
- console.log(err.stack);
149
- ret = 1;
150
- }
151
-
152
- // Sample 6 - Use ImportPages() in order to copy multiple pages at once
153
- // in order to preserve shared resources between pages (e.g. images, fonts,
154
- // colorspaces, etc.)
155
- try {
156
- console.log('_______________________________________________');
157
- console.log('Sample 6 - Preserving shared resources using ImportPages...');
158
- console.log('Opening the input pdf...');
159
- const in_doc = await PDFNet.PDFDoc.createFromFilePath(inputPath + 'newsletter.pdf');
160
- in_doc.initSecurityHandler();
161
-
162
- const new_doc = await PDFNet.PDFDoc.create();
163
-
164
- const copy_pages = [];
165
- for (const itr = await in_doc.getPageIterator(); await itr.hasNext(); await itr.next()) {
166
- copy_pages.push(await itr.current());
167
- }
168
-
169
- const imported_pages = await new_doc.importPages(copy_pages);
170
- for (var i = 0; i < imported_pages.length; ++i) {
171
- new_doc.pagePushFront(imported_pages[i]); // Order pages in reverse order.
172
- // Use PagePushBack() if you would like to preserve the same order.
173
- }
174
-
175
- await new_doc.save(outputPath + 'newsletter_import_pages.pdf', 0);
176
- console.log('Done. Result saved in newsletter_import_pages.pdf...\n');
177
- console.log('Note that the output file size is less than half the size\n'
178
- + 'of the file produced using individual page copy operations\n'
179
- + 'between two documents');
180
- } catch (err) {
181
- console.log(err.stack);
182
- }
183
- };
184
-
185
- PDFNet.runWithCleanup(main, PDFTronLicense.Key).catch(function (error) { console.log('Error: ' + JSON.stringify(error)); }).then(function () { return PDFNet.shutdown(); });
186
- };
187
- exports.runPDFPageTest();
188
- })(exports);
189
- // eslint-disable-next-line spaced-comment
190
- //# sourceURL=PDFPageTest.js
@@ -1,2 +0,0 @@
1
- #!/bin/sh
2
- node PDFPageTest.js