-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDocumentProcessingController.cs
More file actions
98 lines (83 loc) · 3.92 KB
/
DocumentProcessingController.cs
File metadata and controls
98 lines (83 loc) · 3.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//-------------------------------------------------------------------------------------------------------------
// module: TXTextControl.DocumentServices.SamplePlugin
// copyright: © 2026 Text Control GmbH
// author: T. Kummerow
//-------------------------------------------------------------------------------------------------------------
using Microsoft.AspNetCore.Mvc;
using TXTextControl.DocumentServices.DocumentProcessing.Abstractions;
using TXTextControl.DocumentServices.DocumentProcessing.Models;
namespace TXTextControl.DocumentServices.SamplePlugin.Controllers;
[ApiController]
[Route("plugin/document-processing/[action]")]
public class DocumentProcessingController : ControllerBase {
private readonly IDocumentProcessingService m_processingService;
public DocumentProcessingController(IDocumentProcessingService processingService) {
m_processingService = processingService;
}
[HttpPost]
public async Task<IActionResult> Convert([FromBody] ConvertDocumentRequest request) {
if (!TryDecodeBase64(request.Document, out var documentBytes, out var badRequest)) {
return badRequest;
}
if (!Enum.TryParse<ReturnFormat>(request.ReturnFormat, true, out var returnFormat)) {
return BadRequest($"Unknown return format '{request.ReturnFormat}'.");
}
byte[] convertedDocument = await m_processingService.ConvertAsync(
documentBytes,
returnFormat,
request.FlattenFormFields,
HttpContext.RequestAborted);
return File(convertedDocument, GetContentType(returnFormat), GetFileName("converted", returnFormat));
}
[HttpPost]
public async Task<IActionResult> GetDocumentInfo([FromBody] Base64DocumentRequest request) {
if (!TryDecodeBase64(request.Document, out var documentBytes, out var badRequest)) {
return badRequest;
}
DocumentInfo documentInfo = await m_processingService.GetDocumentInfoAsync(documentBytes, HttpContext.RequestAborted);
return Ok(documentInfo);
}
[HttpGet]
public async Task<IActionResult> CreateBarcode(
[FromQuery] string text = "https://www.textcontrol.com") {
byte[] image = await m_processingService.Barcodes.CreateAsync(new BarcodeSettings(text));
return File(image, "image/png", "barcode.png");
}
private static bool TryDecodeBase64(string base64, out byte[] documentBytes, out BadRequestObjectResult badRequest) {
try {
documentBytes = System.Convert.FromBase64String(base64);
badRequest = null!;
return true;
}
catch (FormatException) {
documentBytes = Array.Empty<byte>();
badRequest = new BadRequestObjectResult("The request payload must contain a valid base64 encoded document.");
return false;
}
}
private static string GetContentType(ReturnFormat returnFormat) => returnFormat switch {
ReturnFormat.PDF or ReturnFormat.PDFA => "application/pdf",
ReturnFormat.DOC => "application/msword",
ReturnFormat.DOCX => "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
ReturnFormat.RTF => "application/rtf",
ReturnFormat.HTML => "text/html",
ReturnFormat.TXT => "text/plain",
_ => "application/octet-stream",
};
private static string GetFileName(string baseName, ReturnFormat returnFormat) => returnFormat switch {
ReturnFormat.PDF => $"{baseName}.pdf",
ReturnFormat.PDFA => $"{baseName}.pdf",
ReturnFormat.DOC => $"{baseName}.doc",
ReturnFormat.DOCX => $"{baseName}.docx",
ReturnFormat.RTF => $"{baseName}.rtf",
ReturnFormat.TX => $"{baseName}.tx",
ReturnFormat.TXT => $"{baseName}.txt",
ReturnFormat.HTML => $"{baseName}.html",
_ => $"{baseName}.bin",
};
}
public sealed record Base64DocumentRequest(string Document);
public sealed record ConvertDocumentRequest(
string Document,
string ReturnFormat = "PDF",
bool FlattenFormFields = true);