Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Microsoft SharePoint Online ist eine Sammlung webbasierter Technologien, die es Unternehmen erleichtern, digitale Informationen zu speichern, zu teilen und zu verwalten. Mit unserem leistungsstarken Aspose.Words für .NET können Sie mit Dokumenten arbeiten, die im Ordner “Freigegebene Dokumente” in SharePoint gespeichert sind.
In diesem Artikel behandeln wir ein häufiges Szenario zum Konvertieren eines in den Ordner “Freigegebene Dokumente” hochgeladenen Dokuments in das PDF-Format und zum Hochladen des resultierenden Dokuments zurück in den Ordner.
SharePoint Online Root-Kommunikationssite verfügen, überspringen Sie die Schritte 1-2.
Um zu bewerten, wie Aspose.Words für .NET mit SharePoint-Dokumenten funktioniert, müssen Sie eine Konsolenanwendung mit den entsprechenden Einstellungen erstellen und die Logik zum Herunterladen eines Dokuments aus dem Ordner “Freigegebene Dokumente”, seiner Verarbeitung und dem anschließenden Hochladen dieser Datei in denselben Ordner implementieren. Befolgen Sie dazu die in diesem Abschnitt beschriebenen Anweisungen.
Um die Anweisungen auszuführen, müssen Sie die Werte der folgenden Parameter finden und korrigieren, die nach Abschluss der Schritte im Teil “Voreinstellung” verfügbar sind:
Gehen Sie folgendermaßen vor, um ein neues Konsolenanwendungsprojekt zu erstellen:
Microsoft.Extensions.Configuration.JsonUm eine Konfigurationsdatei hinzuzufügen, führen Sie die folgenden Schritte aus:
Fügen Sie dem Projekt eine “appsettings.json”-Datei hinzu;
Fügen Sie der Datei den folgenden Inhalt hinzu: JSON
{
"TenantId": "Your tenant id.",
"TenantName": "Your tenant name.",
"ClientSecret": "App client secret.",
"ClientId": "App client id.",
"AsposeWordsLicensePath": "Path to your Aspose.Words license."
}Füllen Sie die Felder mit Ihren benutzerdefinierten Werten aus.
Erstellen Sie im Projekt eine Datei “SPOClient.cs” und füllen Sie diese mit folgendem Inhalt:
.NET
using System.Net.Http.Json;
using System.Net.Http.Headers;
using System.Security.Authentication;
using System.Text.Json.Serialization;
using Microsoft.Extensions.Configuration;
namespace SPOnlineExample
{
/// <summary>
/// Sharepoint online REST API client.
/// </summary>
internal class SPOClient
{
private readonly string authUrl;
private readonly string clientId;
private readonly string resource;
private readonly string tenantId;
private readonly HttpClient client;
private readonly string tenantName;
private readonly string clientSecret;
private const string grandType = "client_credentials";
private const string resourceId = "00000003-0000-0ff1-ce00-000000000000";
// URL templates.
private static readonly string authUrlTemplate = "https://accounts.accesscontrol.windows.net/{0}/tokens/OAuth/2";
private static readonly string downloadfileTemplate = "https://{0}.sharepoint.com/_api/web/GetFileByServerRelativeUrl('{1}')/$value";
private static readonly string uploadfileTemplate =
"https://{0}.sharepoint.com/_api/web/GetFolderByServerRelativeUrl('{1}')/Files/add(url='{2}',overwrite=true)";
// Access token.
private string token = string.Empty;
public SPOClient(IConfigurationRoot appConfig)
{
tenantId = appConfig[nameof(tenantId)];
clientSecret = appConfig[nameof(clientSecret)];
tenantName = appConfig[nameof(tenantName)];
authUrl = string.Format(authUrlTemplate, tenantId);
clientId = $"{appConfig[nameof(clientId)]}@{tenantId}";
resource = $"{resourceId}/{tenantName}.sharepoint.com@{tenantId}";
client = new HttpClient();
}
public async Task Authorize()
{
var formContent = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("grant_type", grandType),
new KeyValuePair<string, string>("client_id", clientId),
new KeyValuePair<string, string>("client_secret", clientSecret),
new KeyValuePair<string, string>("resource", resource)
});
var response = await client.PostAsync(authUrl, formContent);
var responseData = await response.Content.ReadFromJsonAsync<AuthRespose>();
if (!response.IsSuccessStatusCode | | responseData == null)
throw new AuthenticationException(responseData?.Description);
token = responseData.Token;
}
public async Task<Stream> DownloadFile(string relativeFilePath)
{
var url = string.Format(downloadfileTemplate, tenantName, relativeFilePath);
using var request = CreateRequest(url, HttpMethod.Get);
var response = await client.SendAsync(request);
if (!response.IsSuccessStatusCode)
{
var errorData = await response.Content.ReadAsStringAsync();
throw new Exception(errorData);
}
var fileStream = await response.Content.ReadAsStreamAsync();
return fileStream;
}
public async Task UploadFile(string relativeFolderPath, string fileName, Stream fileData)
{
var url = string.Format(uploadfileTemplate, tenantName, relativeFolderPath, fileName);
using var request = CreateRequest(url, HttpMethod.Post);
request.Headers.Add("IF-MATCH", "*"); // Overwrite any changes.
request.Content = new StreamContent(fileData);
var response = await client.SendAsync(request);
if (!response.IsSuccessStatusCode)
{
var errorData = await response.Content.ReadAsStringAsync();
throw new Exception(errorData);
}
}
private HttpRequestMessage CreateRequest(string url, HttpMethod httpMethod)
{
var request = new HttpRequestMessage(httpMethod, url);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
return request;
}
private class AuthRespose
{
public string Error { get; set; } = string.Empty;
[JsonPropertyName("error_description")]
public string Description { get; set; } = string.Empty;
[JsonPropertyName("access_token")]
public string Token { get; set; } = string.Empty;
}
}
}
Verschieben Sie den folgenden Inhalt in die Datei “Program.cs”:
.NET
using Aspose.Words;
using Aspose.Words.Saving;
using Microsoft.Extensions.Configuration;
namespace SPOnlineExample
{
public static class Program
{
static async Task Main(string[] args)
{
// The example below downloads the file "testdoc.docx" from the shared documents folder.
// Converts it to PDF and uploads conversion result to the same folder.
var appConfig = GetAppConfig();
var client = new SPOClient(appConfig);
await client.Authorize();
var fileStream = await client.DownloadFile("/Shared%20Documents/TestDoc.docx");
var lic = new License();
lic.SetLicense(appConfig["AsposeWordsLicensePath"]);
var doc = new Document(fileStream);
using var outputStream = new MemoryStream();
var saveOptions = new PdfSaveOptions();
doc.Save(outputStream, saveOptions);
await client.UploadFile("/Shared%20Documents", "TestDoc.pdf", outputStream);
Console.WriteLine("Done. Press any key to complete.");
Console.ReadKey();
}
private static IConfigurationRoot GetAppConfig()
{
// Build configuration
return JsonConfigurationExtensions.AddJsonFile(
new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()),
"appsettings.json")
.Build();
}
}
}
Führen Sie abschließend das erstellte Beispiel aus und überprüfen Sie das Ergebnis:
Daher sollte die Datei “TestDoc.pdf” im Ordner “Freigegebene Dokumente” der Stammkommunikationsseite abgelegt werden.
– Der Artikel Rendern für weitere Informationen zu den Formaten mit fester Seite und Flow-Layout
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.