59 int numCreatedPages = 0;
62 if (!Directory.Exists(documentOutputFolder))
64 Directory.CreateDirectory(documentOutputFolder);
69 if (Path.GetExtension(documentTemplate) !=
".docx")
71 throw new InvalidOperationException($
"Document template \"{documentTemplate}\" is not a .docx file.");
75 string outputFileNameDocx = Path.GetFileNameWithoutExtension(documentTemplate);
76 string templateFileNamePostfix = _workspaceService?.Settings?.GetSettingValue<
string>(
WorkspaceSettings.GROUP_DOCUMENT_CREATION,
WorkspaceSettings.SETTING_DOCUMENT_CREATION_TEMPLATE_FILENAME_POSTFIX) ??
string.Empty;
78 if (outputFileNameDocx.Contains(templateFileNamePostfix))
80 outputFileNameDocx = outputFileNameDocx.Replace(templateFileNamePostfix, templateFileNamePostfixReplaceStr);
84 outputFileNameDocx += templateFileNamePostfixReplaceStr;
86 outputFileNameDocx +=
".docx";
87 string outputFile = Path.Combine(documentOutputFolder, outputFileNameDocx);
90 object[] items = documentStrategy.
GetItems();
98 string tempFolder = Path.Combine(documentOutputFolder, _tempFolderName);
102 if (Directory.Exists(tempFolder))
104 Directory.Delete(tempFolder,
true);
106 Directory.CreateDirectory(tempFolder);
108 if (items !=
null && items.Length > 0)
110 foreach (
object multiplePagesObj
in items)
113 string outputFileMulti = Path.Combine(tempFolder, Path.GetFileNameWithoutExtension(documentTemplate).Replace(templateFileNamePostfix,
"") + $
"_{numCreatedPages:0000}.docx");
116 if (tablePlaceholders !=
null) { DocXPlaceholderHelper.ReplaceTablePlaceholders(documentTemplate, outputFileMulti, tablePlaceholders, placeholderMarker); }
119 if (textPlaceholders !=
null) { DocXPlaceholderHelper.ReplaceTextPlaceholders(tablePlaceholders ==
null ? documentTemplate : outputFileMulti, outputFileMulti, textPlaceholders, placeholderMarker); }
127 string[] files = Directory.GetFiles(tempFolder);
128 if (files.Length > 0)
131 File.Copy(files[0], outputFile,
true);
132 using (DocX document = DocX.Load(outputFile))
135 for (
int i = 1; i < files.Length; i++)
137 using (DocX tempDocument = DocX.Load(files[i]))
139 document.InsertDocument(tempDocument,
true);
154 if (Directory.Exists(tempFolder))
156 Directory.Delete(tempFolder,
true);
163 string inputFile = documentTemplate;
166 if (tablePlaceholders !=
null)
168 DocXPlaceholderHelper.ReplaceTablePlaceholders(inputFile, outputFile, tablePlaceholders, placeholderMarker);
169 inputFile = outputFile;
172 foreach (
object item
in items)
175 if (textPlaceholders !=
null)
177 DocXPlaceholderHelper.ReplaceTextPlaceholders(inputFile, outputFile, textPlaceholders, placeholderMarker);
178 inputFile = outputFile;
188 string returnFilePath = outputFile;
199 if (File.Exists(outputFile))
201 File.Delete(outputFile);
205 return (numCreatedPages, returnFilePath);
235 ushort competitionYear = _workspaceService?.Settings?.GetSettingValue<ushort>(
WorkspaceSettings.GROUP_GENERAL,
WorkspaceSettings.SETTING_GENERAL_COMPETITIONYEAR) ?? 0;
236 DateTime competitionDate = _workspaceService?.Settings?.GetSettingValue<DateTime>(
WorkspaceSettings.GROUP_GENERAL,
WorkspaceSettings.SETTING_GENERAL_COMPETITIONDATE) ?? DateTime.Today;
237 string appVersion =
System.Reflection.Assembly.GetEntryAssembly().GetName().Version?.ToString() ??
"?";
238 string workspacePath = _workspaceService?.PersistentPath ??
string.Empty;
241 foreach (
string placeholder
in Placeholders.Placeholders_CompetitionYear) { textPlaceholders.Add(placeholder, competitionYear.ToString()); }
242 foreach (
string placeholder
in Placeholders.Placeholders_CompetitionDate) { textPlaceholders.Add(placeholder, competitionDate.ToShortDateString()); }
243 foreach (
string placeholder
in Placeholders.Placeholders_AppVersion) { textPlaceholders.Add(placeholder, appVersion); }
244 foreach (
string placeholder
in Placeholders.Placeholders_WorkspacePath) { textPlaceholders.Add(placeholder, workspacePath); }
246 DocXPlaceholderHelper.ReplaceTextPlaceholders(templateFile, outputFile, textPlaceholders,
PlaceholderMarker);
257 string outputFilePdf = docxFile.Replace(
".docx",
".pdf");
258 File.Delete(outputFilePdf);
260 List<IDocumentFileConverter> ignoreConverters =
new List<IDocumentFileConverter>();
262 bool conversionResult =
false;
263 Exception firstException =
null;
267 converter = _documentFileConverterSelector.GetConverter(docxFile, ignoreConverters);
270 conversionResult = converter?.
Convert(docxFile, outputFilePdf) ??
false;
274 if(firstException ==
null)
278 conversionResult =
false;
280 if(!conversionResult)
282 ignoreConverters.Add(converter);
284 }
while (converter !=
null && !conversionResult);
286 if(!conversionResult && firstException !=
null)
288 throw firstException;
290 return outputFilePdf;