Skip to content

Commit 14b17d8

Browse files
committed
Add sample for Open and save
1 parent 5173566 commit 14b17d8

17 files changed

Lines changed: 530 additions & 0 deletions

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio Version 17
4+
VisualStudioVersion = 17.14.36518.9 d17.14
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Open-and-Save-Word-Document", "Open-and-Save-Word-Document\Open-and-Save-Word-Document.csproj", "{D44F928E-428B-479F-9815-C9FE04AC1D0E}"
7+
EndProject
8+
Global
9+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
10+
Debug|Any CPU = Debug|Any CPU
11+
Release|Any CPU = Release|Any CPU
12+
EndGlobalSection
13+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
14+
{D44F928E-428B-479F-9815-C9FE04AC1D0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15+
{D44F928E-428B-479F-9815-C9FE04AC1D0E}.Debug|Any CPU.Build.0 = Debug|Any CPU
16+
{D44F928E-428B-479F-9815-C9FE04AC1D0E}.Release|Any CPU.ActiveCfg = Release|Any CPU
17+
{D44F928E-428B-479F-9815-C9FE04AC1D0E}.Release|Any CPU.Build.0 = Release|Any CPU
18+
EndGlobalSection
19+
GlobalSection(SolutionProperties) = preSolution
20+
HideSolutionNode = FALSE
21+
EndGlobalSection
22+
GlobalSection(ExtensibilityGlobals) = postSolution
23+
SolutionGuid = {15D5F4CC-4C85-4DB1-A610-533A6BA31CE0}
24+
EndGlobalSection
25+
EndGlobal
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,264 @@
1+
## Ignore Visual Studio temporary files, build results, and
2+
## files generated by popular Visual Studio add-ons.
3+
4+
# Azure Functions localsettings file
5+
local.settings.json
6+
7+
# User-specific files
8+
*.suo
9+
*.user
10+
*.userosscache
11+
*.sln.docstates
12+
13+
# User-specific files (MonoDevelop/Xamarin Studio)
14+
*.userprefs
15+
16+
# Build results
17+
[Dd]ebug/
18+
[Dd]ebugPublic/
19+
[Rr]elease/
20+
[Rr]eleases/
21+
x64/
22+
x86/
23+
bld/
24+
[Bb]in/
25+
[Oo]bj/
26+
[Ll]og/
27+
28+
# Visual Studio 2015 cache/options directory
29+
.vs/
30+
# Uncomment if you have tasks that create the project's static files in wwwroot
31+
#wwwroot/
32+
33+
# MSTest test Results
34+
[Tt]est[Rr]esult*/
35+
[Bb]uild[Ll]og.*
36+
37+
# NUNIT
38+
*.VisualState.xml
39+
TestResult.xml
40+
41+
# Build Results of an ATL Project
42+
[Dd]ebugPS/
43+
[Rr]eleasePS/
44+
dlldata.c
45+
46+
# DNX
47+
project.lock.json
48+
project.fragment.lock.json
49+
artifacts/
50+
51+
*_i.c
52+
*_p.c
53+
*_i.h
54+
*.ilk
55+
*.meta
56+
*.obj
57+
*.pch
58+
*.pdb
59+
*.pgc
60+
*.pgd
61+
*.rsp
62+
*.sbr
63+
*.tlb
64+
*.tli
65+
*.tlh
66+
*.tmp
67+
*.tmp_proj
68+
*.log
69+
*.vspscc
70+
*.vssscc
71+
.builds
72+
*.pidb
73+
*.svclog
74+
*.scc
75+
76+
# Chutzpah Test files
77+
_Chutzpah*
78+
79+
# Visual C++ cache files
80+
ipch/
81+
*.aps
82+
*.ncb
83+
*.opendb
84+
*.opensdf
85+
*.sdf
86+
*.cachefile
87+
*.VC.db
88+
*.VC.VC.opendb
89+
90+
# Visual Studio profiler
91+
*.psess
92+
*.vsp
93+
*.vspx
94+
*.sap
95+
96+
# TFS 2012 Local Workspace
97+
$tf/
98+
99+
# Guidance Automation Toolkit
100+
*.gpState
101+
102+
# ReSharper is a .NET coding add-in
103+
_ReSharper*/
104+
*.[Rr]e[Ss]harper
105+
*.DotSettings.user
106+
107+
# JustCode is a .NET coding add-in
108+
.JustCode
109+
110+
# TeamCity is a build add-in
111+
_TeamCity*
112+
113+
# DotCover is a Code Coverage Tool
114+
*.dotCover
115+
116+
# NCrunch
117+
_NCrunch_*
118+
.*crunch*.local.xml
119+
nCrunchTemp_*
120+
121+
# MightyMoose
122+
*.mm.*
123+
AutoTest.Net/
124+
125+
# Web workbench (sass)
126+
.sass-cache/
127+
128+
# Installshield output folder
129+
[Ee]xpress/
130+
131+
# DocProject is a documentation generator add-in
132+
DocProject/buildhelp/
133+
DocProject/Help/*.HxT
134+
DocProject/Help/*.HxC
135+
DocProject/Help/*.hhc
136+
DocProject/Help/*.hhk
137+
DocProject/Help/*.hhp
138+
DocProject/Help/Html2
139+
DocProject/Help/html
140+
141+
# Click-Once directory
142+
publish/
143+
144+
# Publish Web Output
145+
*.[Pp]ublish.xml
146+
*.azurePubxml
147+
# TODO: Comment the next line if you want to checkin your web deploy settings
148+
# but database connection strings (with potential passwords) will be unencrypted
149+
#*.pubxml
150+
*.publishproj
151+
152+
# Microsoft Azure Web App publish settings. Comment the next line if you want to
153+
# checkin your Azure Web App publish settings, but sensitive information contained
154+
# in these scripts will be unencrypted
155+
PublishScripts/
156+
157+
# NuGet Packages
158+
*.nupkg
159+
# The packages folder can be ignored because of Package Restore
160+
**/packages/*
161+
# except build/, which is used as an MSBuild target.
162+
!**/packages/build/
163+
# Uncomment if necessary however generally it will be regenerated when needed
164+
#!**/packages/repositories.config
165+
# NuGet v3's project.json files produces more ignoreable files
166+
*.nuget.props
167+
*.nuget.targets
168+
169+
# Microsoft Azure Build Output
170+
csx/
171+
*.build.csdef
172+
173+
# Microsoft Azure Emulator
174+
ecf/
175+
rcf/
176+
177+
# Windows Store app package directories and files
178+
AppPackages/
179+
BundleArtifacts/
180+
Package.StoreAssociation.xml
181+
_pkginfo.txt
182+
183+
# Visual Studio cache files
184+
# files ending in .cache can be ignored
185+
*.[Cc]ache
186+
# but keep track of directories ending in .cache
187+
!*.[Cc]ache/
188+
189+
# Others
190+
ClientBin/
191+
~$*
192+
*~
193+
*.dbmdl
194+
*.dbproj.schemaview
195+
*.jfm
196+
*.pfx
197+
*.publishsettings
198+
node_modules/
199+
orleans.codegen.cs
200+
201+
# Since there are multiple workflows, uncomment next line to ignore bower_components
202+
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
203+
#bower_components/
204+
205+
# RIA/Silverlight projects
206+
Generated_Code/
207+
208+
# Backup & report files from converting an old project file
209+
# to a newer Visual Studio version. Backup files are not needed,
210+
# because we have git ;-)
211+
_UpgradeReport_Files/
212+
Backup*/
213+
UpgradeLog*.XML
214+
UpgradeLog*.htm
215+
216+
# SQL Server files
217+
*.mdf
218+
*.ldf
219+
220+
# Business Intelligence projects
221+
*.rdl.data
222+
*.bim.layout
223+
*.bim_*.settings
224+
225+
# Microsoft Fakes
226+
FakesAssemblies/
227+
228+
# GhostDoc plugin setting file
229+
*.GhostDoc.xml
230+
231+
# Node.js Tools for Visual Studio
232+
.ntvs_analysis.dat
233+
234+
# Visual Studio 6 build log
235+
*.plg
236+
237+
# Visual Studio 6 workspace options file
238+
*.opt
239+
240+
# Visual Studio LightSwitch build output
241+
**/*.HTMLClient/GeneratedArtifacts
242+
**/*.DesktopClient/GeneratedArtifacts
243+
**/*.DesktopClient/ModelManifest.xml
244+
**/*.Server/GeneratedArtifacts
245+
**/*.Server/ModelManifest.xml
246+
_Pvt_Extensions
247+
248+
# Paket dependency manager
249+
.paket/paket.exe
250+
paket-files/
251+
252+
# FAKE - F# Make
253+
.fake/
254+
255+
# JetBrains Rider
256+
.idea/
257+
*.sln.iml
258+
259+
# CodeRush
260+
.cr/
261+
262+
# Python Tools for Visual Studio (PTVS)
263+
__pycache__/
264+
*.pyc
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
using Microsoft.AspNetCore.Http;
2+
using Microsoft.AspNetCore.Mvc;
3+
using Microsoft.Azure.Functions.Worker;
4+
using Microsoft.Extensions.Logging;
5+
using Syncfusion.DocIO;
6+
using Syncfusion.DocIO.DLS;
7+
8+
namespace Open_and_Save_Word_Document;
9+
10+
public class Function1
11+
{
12+
private readonly ILogger<Function1> _logger;
13+
14+
public Function1(ILogger<Function1> logger)
15+
{
16+
_logger = logger;
17+
}
18+
19+
[Function("OpenAndSaveDocument")]
20+
public async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequest req)
21+
{
22+
try
23+
{
24+
// Create a memory stream to hold the incoming request body (Word document bytes)
25+
await using MemoryStream inputStream = new MemoryStream();
26+
// Copy the request body into the memory stream
27+
await req.Body.CopyToAsync(inputStream);
28+
// Check if the stream is empty (no file content received)
29+
if (inputStream.Length == 0)
30+
return new BadRequestObjectResult("No file content received in request body.");
31+
// Reset stream position to the beginning for reading
32+
inputStream.Position = 0;
33+
// Load the Word document from the stream (auto-detects format type)
34+
using WordDocument document = new WordDocument(inputStream, Syncfusion.DocIO.FormatType.Automatic);
35+
//Access the section in a Word document.
36+
IWSection section = document.Sections[0];
37+
//Add a new paragraph to the section.
38+
IWParagraph paragraph = section.AddParagraph();
39+
paragraph.ParagraphFormat.FirstLineIndent = 36;
40+
paragraph.BreakCharacterFormat.FontSize = 12f;
41+
IWTextRange text = paragraph.AppendText("In 2000, Adventure Works Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the Adventure Works Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group.");
42+
text.CharacterFormat.FontSize = 12f;
43+
MemoryStream memoryStream = new MemoryStream();
44+
//Saves the Word document file.
45+
document.Save(memoryStream, FormatType.Docx);
46+
memoryStream.Position = 0;
47+
var bytes = memoryStream.ToArray();
48+
return new FileContentResult(bytes, "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
49+
{
50+
FileDownloadName = "document.docx"
51+
};
52+
}
53+
catch (Exception ex)
54+
{
55+
// Log the error with details for troubleshooting
56+
_logger.LogError(ex, "Error Open and Save document.");
57+
// Prepare error message including exception details
58+
var msg = $"Exception: {ex.Message}\n\n{ex}";
59+
// Return a 500 Internal Server Error response with the message
60+
return new ContentResult { StatusCode = 500, Content = msg, ContentType = "text/plain; charset=utf-8" };
61+
}
62+
}
63+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
6+
<OutputType>Exe</OutputType>
7+
<ImplicitUsings>enable</ImplicitUsings>
8+
<Nullable>enable</Nullable>
9+
<RootNamespace>Open_and_Save_Word_Document</RootNamespace>
10+
</PropertyGroup>
11+
12+
<ItemGroup>
13+
<FrameworkReference Include="Microsoft.AspNetCore.App" />
14+
<PackageReference Include="Microsoft.ApplicationInsights.WorkerService" Version="2.23.0" />
15+
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="2.51.0" />
16+
<PackageReference Include="Microsoft.Azure.Functions.Worker.ApplicationInsights" Version="2.50.0" />
17+
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="2.1.0" />
18+
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="2.0.7" />
19+
<PackageReference Include="Syncfusion.DocIO.Net.Core" Version="*" />
20+
</ItemGroup>
21+
22+
<ItemGroup>
23+
<Content Include="Fonts\**\*.ttf">
24+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
25+
</Content>
26+
</ItemGroup>
27+
28+
</Project>

0 commit comments

Comments
 (0)