1//
2// Copyright (c) 2001-2021 by PDFTron Systems Inc. All Rights Reserved.
3//
4
5using System;
6using System.Drawing;
7
8using pdftron;
9using pdftron.Common;
10using pdftron.Filters;
11using pdftron.SDF;
12using pdftron.PDF;
13
14using NUnit.Framework;
15
16namespace MiscellaneousSamples
17{
18 /// <summary>
19 ///---------------------------------------------------------------------------------------
20 /// The following sample illustrates how to use the PDF::Convert utility class to convert
21 /// .docx files to PDF
22 ///
23 /// This conversion is performed entirely within the PDFNet and has *no* external or
24 /// system dependencies dependencies
25 ///
26 /// Please contact us if you have any questions.
27 ///---------------------------------------------------------------------------------------
28 /// </summary>
29
30
31
32 [TestFixture]
33 public class OfficeToPDFTest
34 {
35
36 const string input_path = "TestFiles/";
37
38 static void SimpleConvert(String input_filename, String output_filename)
39 {
40 // Start with a PDFDoc (the conversion destination)
41 using (PDFDoc pdfdoc = new PDFDoc())
42 {
43 // perform the conversion with no optional parameters
44 pdftron.PDF.Convert.OfficeToPDF(pdfdoc, Utils.GetAssetTempFile(input_path + input_filename), null);
45
46 // save the result
47 pdfdoc.Save(Utils.CreateExternalFile(output_filename), SDFDoc.SaveOptions.e_linearized);
48
49 // And we're done!
50 Console.WriteLine("Saved " + output_filename);
51 }
52 }
53
54 static void FlexibleConvert(String input_filename, String output_filename)
55 {
56 // Start with a PDFDoc (the conversion destination)
57 using (PDFDoc pdfdoc = new PDFDoc())
58 {
59 OfficeToPDFOptions options = new OfficeToPDFOptions();
60 // create a conversion object -- this sets things up but does not yet
61 // perform any conversion logic.
62 // in a multithreaded environment, this object can be used to monitor
63 // the conversion progress and potentially cancel it as well
64 DocumentConversion conversion = pdftron.PDF.Convert.StreamingPDFConversion(
65 pdfdoc, Utils.GetAssetTempFile(input_path + input_filename), options);
66
67 // actually perform the conversion
68 // this particular method will not throw on conversion failure, but will
69 // return an error status instead
70 if (conversion.TryConvert() == DocumentConversionResult.e_document_conversion_success)
71 {
72 int num_warnings = conversion.GetNumWarnings();
73
74 // print information about the conversion
75 for (int i = 0; i < num_warnings; ++i)
76 {
77 Console.WriteLine("Warning: " + conversion.GetWarningString(i));
78 }
79
80 // save the result
81 pdfdoc.Save(Utils.CreateExternalFile(output_filename), SDFDoc.SaveOptions.e_linearized);
82 // done
83 Console.WriteLine("Saved " + output_filename);
84 }
85 else
86 {
87 Console.WriteLine("Encountered an error during conversion: " + conversion.GetErrorString());
88 }
89 }
90 }
91
92 /// <summary>
93 /// The main entry point for the application.
94 /// </summary>
95 [Test]
96 public static void Sample()
97 {
98
99 try
100 {
101 Utils.GetAssetTempFile(input_path + "pdftron_smart_substitution.plugin");
102 var res = Utils.GetAssetTempFile(input_path + "pdftron_layout_resources.plugin");
103 res = res.Replace("pdftron_layout_resources.plugin", "");
104 PDFNet.SetResourcesPath(res);
105
106 // first the one-line conversion method
107 SimpleConvert("Fishermen.docx", "Fishermen.pdf");
108
109 // then the more flexible line-by-line conversion API
110 FlexibleConvert("the_rime_of_the_ancient_mariner.docx", "the_rime_of_the_ancient_mariner.pdf");
111
112 // conversion of RTL content
113 FlexibleConvert("factsheet_Arabic.docx", "factsheet_Arabic.pdf");
114 }
115 catch (pdftron.Common.PDFNetException e)
116 {
117 Console.WriteLine(e.Message);
118 Assert.True(false);
119 }
120 catch (Exception e)
121 {
122 Console.WriteLine("Unrecognized Exception: " + e.Message );
123 Assert.True(false);
124 }
125
126 Console.WriteLine("Done.");
127 }
128 }
129}