Я пытаюсь создать PDF-файл с помощью функции Azure, используя DinkToPdf . Это то, что я сделал до сих пор.
[FunctionName("GeneratePdf")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log,
ExecutionContext executionContext)
{
string name = await GetName(req);
return CreatePdf(name, executionContext);
}
private static ActionResult CreatePdf(string name, ExecutionContext executionContext)
{
var globalSettings = new GlobalSettings
{
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
Margins = new MarginSettings { Top = 10 },
};
var objectSettings = new ObjectSettings
{
PagesCount = true,
WebSettings = { DefaultEncoding = "utf-8" },
HtmlContent = $@"
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
Hello, ${name}
</body>
</html>",
};
var pdf = new HtmlToPdfDocument()
{
GlobalSettings = globalSettings,
Objects = { objectSettings }
};
byte[] pdfBytes = IocContainer.Resolve<IConverter>().Convert(pdf);
return new FileContentResult(pdfBytes, "application/pdf");
}
Это работает довольно хорошо, когда я тестирую функцию на локальном компьютере. Однако он не работает должным образом при развертывании в Azure.
Основная проблема заключается в том, что в местах текстов в pdf появляются поля (например, см. Ниже).
Более того, реакция также мучительно медленная. Есть ли способ улучшить / исправить это?
Дополнительная информация:
Я также использую единство МОК для решения IConverter
. Регистрация типа выглядит примерно так:
var container = new UnityContainer();
container.RegisterType<IConverter>(
new ContainerControlledLifetimeManager(),
new InjectionFactory(c => new SynchronizedConverter(new PdfTools()))
);
Я пробовал пару других пакетов NuGet, таких как PdfSharp, MigraDoc, Select.HtmlToPdf.NetCore и т. Д. Но все они зависят от System.Drawing.Common
, который не может использоваться в функции Azure.