Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Artikel ini memberikan instruksi langkah demi langkah yang terperinci untuk mengonversi dokumen PDF di Microsoft Azure menggunakan Aspose.PDF for .NET dan fungsi Azure.
code --install-extension ms-dotnettools.csharp
code --install-extension ms-azuretools.vscode-azurefunctions
code --install-extension ms-vscode.azure-account
npm install -g azure-functions-core-tools@4 --unsafe-perm true
brew install azure-cli
.curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
.code .
PdfConverterApp.csproj
:<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.1" />
<PackageReference Include="Aspose.PDF" Version="24.10.0" />
<PackageReference Include="Azure.Storage.Blobs" Version="12.14.1" />
<PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="5.0.1" />
</ItemGroup>
</Project>
Di Visual Studio buka Package Manager Console dan jalankan:
Install-Package Aspose.PDF
Install-Package Azure.Storage.Blobs
Install-Package Microsoft.Azure.WebJobs.Extensions.Storage
Di Visual Studio Code jalankan:
dotnet restore
Dapatkan Kunci Akses untuk akun penyimpanan di bawah Kunci akses di Azure Portal. Kunci ini akan digunakan untuk mengautentikasi aplikasi Anda.
local.settings.json
:{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "YOUR_STORAGE_CONNECTION_STRING",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"ContainerName": "pdfdocs"
}
}
YOUR_STORAGE_CONNECTION_STRING
dengan string koneksi penyimpanan Anda yang sebenarnya dari Azure Portal.Di Visual Studio:
var license = new Aspose.Pdf.License();
license.SetLicense("Aspose.PDF.lic");
Buat file baru PdfConverter.cs
:
using Azure.Storage.Blobs;
using System;
using System.IO;
using System.Threading.Tasks;
public class PdfConverter
{
private readonly BlobContainerClient _containerClient;
public PdfConverter(string connectionString, string containerName)
{
_containerClient = new BlobContainerClient(connectionString, containerName);
}
public async Task<string> ConvertToFormat(string sourceBlobName, string targetFormat)
{
// Download source PDF
var sourceBlob = _containerClient.GetBlobClient(sourceBlobName);
using var sourceStream = new MemoryStream();
await sourceBlob.DownloadToAsync(sourceStream);
sourceStream.Position = 0;
// Open PDF document
var document = new Aspose.Pdf.Document(sourceStream);
// Create output stream
using var outputStream = new MemoryStream();
string targetBlobName = Path.GetFileNameWithoutExtension(sourceBlobName);
// Convert based on format
switch (targetFormat.ToLower())
{
case "docx":
targetBlobName += ".docx";
document.Save(outputStream, Aspose.Pdf.SaveFormat.DocX);
break;
case "html":
targetBlobName += ".html";
document.Save(outputStream, Aspose.Pdf.SaveFormat.Html);
break;
case "xlsx":
targetBlobName += ".xlsx";
document.Save(outputStream, Aspose.Pdf.SaveFormat.Excel);
break;
case "pptx":
targetBlobName += ".pptx";
document.Save(outputStream, Aspose.Pdf.SaveFormat.Pptx);
break;
case "jpeg":
case "jpg":
targetBlobName += ".jpg";
foreach (var page in document.Pages)
{
var jpegDevice = new Aspose.Pdf.Devices.JpegDevice(new Aspose.Pdf.Devices.Resolution(300));
jpegDevice.Process(page, outputStream);
}
break;
default:
throw new ArgumentException($"Unsupported format: {targetFormat}");
}
// Upload converted file
outputStream.Position = 0;
var targetBlob = _containerClient.GetBlobClient(targetBlobName);
await targetBlob.UploadAsync(outputStream, true);
return targetBlob.Uri.ToString();
}
}
Buat file baru ConvertPdfFunction.cs
:
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
using System;
using System.IO;
using Newtonsoft.Json;
using Microsoft.AspNetCore.Mvc;
public static class ConvertPdfFunction
{
[FunctionName("ConvertPdf")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "post"), Route = "convert"] HttpRequest req,
ILogger log)
{
try
{
// Read request body
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
string sourceBlob = data?.sourceBlob;
string targetFormat = data?.targetFormat;
if (string.IsNullOrEmpty(sourceBlob) || string.IsNullOrEmpty(targetFormat))
{
return new BadRequestObjectResult("Please provide sourceBlob and targetFormat");
}
// Get configuration
string connectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage");
string containerName = Environment.GetEnvironmentVariable("ContainerName");
// Convert PDF
var converter = new PdfConverter(connectionString, containerName);
string resultUrl = await converter.ConvertToFormat(sourceBlob, targetFormat);
return new OkObjectResult(new { url = resultUrl });
}
catch (Exception ex)
{
log.LogError(ex, "Error converting PDF");
return new StatusCodeResult(500);
}
}
}
// Startup.cs
[assembly: FunctionsStartup(typeof(PdfConverterAzure.Functions.Startup))]
namespace PdfConverterAzure.Functions
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
// Read configuration
var config = builder.GetContext().Configuration;
// Register services
builder.Services.AddLogging();
// Register Azure Storage
builder.Services.AddSingleton(x =>
new BlobServiceClient(config["AzureWebJobsStorage"]));
// Configure Aspose License
var license = new Aspose.Pdf.License();
license.SetLicense("Aspose.PDF.lic");
}
}
}
Di Visual Studio:
curl -X POST http://localhost:7071/api/convert \
-H "Content-Type: application/json" \
-d '{"sourceBlob": "sample.pdf", "targetFormat": "docx"}'
Di Visual Studio Code:
func start
az storage blob upload \
--account-name $AccountName \
--container-name pdfdocs \
--name sample.pdf \
--file /path/to/your/sample.pdf
curl -X POST http://localhost:7071/api/convert \
-H "Content-Type: application/json" \
-d '{"sourceBlob": "sample.pdf", "targetFormat": "docx"}'
Di Visual Studio:
Di Visual Studio Code:
Gunakan Postman atau curl untuk menguji:
curl -X POST "https://your-function.azurewebsites.net/api/convert" \
-H "x-functions-key: your-function-key" \
-H "Content-Type: application/json" \
-d '{"sourceBlob": "sample.pdf", "targetFormat": "docx"}'
Daftar format yang didukung dapat ditemukan di sini.
[FunctionName("ConvertPdf")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "convert")] HttpRequest req,
ClaimsPrincipal principal,
ILogger log)
{
// Check authentication
if (!principal.Identity.IsAuthenticated)
{
return new UnauthorizedResult();
}
// ...
}
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.