Библиотека DinkToPdf в DotNet Core Linux во время выполнения без X-сервера - PullRequest
0 голосов
/ 30 мая 2019

Я работаю над основным приложением dotnet, которое (помимо прочего) создает PDF-документы на основе каких-то протоколов.Я создаю HTML-документ (сетка начальной загрузки, без графики, только текст), заполненный данными, и преобразую его в PDF с помощью библиотеки DinkToPdf (обертка для инструмента wkhtmltopdf).На моей машине для разработки (Win 10 x64) все работает отлично, PDF выглядит действительно хорошо.Когда я развернул его в Debian VPS со средой выполнения dotnet, PDF выглядит ужасно, в документе больше текста и сетка разрушена.VPS не имеет GUI / X-сервера, только доступ по SSH.Похоже, что свойства GlobalSettings (такие как ViewportSize, PaperSize или DPI) не используются должным образом в Linux.В чем проблема?Есть ли предпосылки для его использования в Linux?Есть ли у вас опыт с этим?

public class ProtocolPdfService : IProtocolPdfService
{
    private static IConverter converter = new SynchronizedConverter(new PdfTools());
    private readonly GlobalSettings pdfSettings = new GlobalSettings
    {
        ColorMode = ColorMode.Color,
        Orientation = Orientation.Portrait,
        PaperSize = PaperKind.A4,
        ViewportSize = "1920x1080",
        DPI = 300
    };

    public Stream GetProtocolPdf(int protocolId)
    {
        ...
        var pdfByte = GeneratePdfFromHtml(renderedHtml);
        return new MemoryStream(pdfByte);

    }
    public byte[] GeneratePdfFromHtml(string htmlContent)
    {
        var doc = new HtmlToPdfDocument()
        {
            GlobalSettings = pdfSettings,
            Objects = {
                new ObjectSettings() {
                    PagesCount = true,
                    HtmlContent = htmlContent,
                    WebSettings = { DefaultEncoding = "utf-8" },
                    UseLocalLinks = false,
                    UseExternalLinks = false,
                    ProduceForms = false,
                }
            }

        };
        return converter.Convert(doc);
    }
}
...