imazen / imageflow-dotnet-server

A super-fast image server to speed up your site - deploy as a microservice, serverless, or embeddable.
https://docs.imageflow.io
GNU Affero General Public License v3.0
246 stars 33 forks source link

PdfRenderer #63

Closed scattered-code closed 1 year ago

scattered-code commented 1 year ago

Any way to render PDFs like ImageResizer.Plugins.PdfRenderer did?

lilith commented 1 year ago

No, decoding and rendering PDFs has a level of complexity that is extremely exploit prone (2046 exploits so far), and you probably don't want that happening on your servers.

ImageResizer simply ran third-party programs for the rendering, but in practice people never updated those programs either, leaving it a rather bad option I wish had never existed.

It's also unpredictably slow - I would use a web service or sandboxed container if you need this kind of conversion done.

scattered-code commented 1 year ago

Thanks, I went with converting the PDF on upload to a JPG using Syncfusion / skia sharp

Leaving this in case anyone else needs it

PdfRenderer.ReferencePath = "/usr/lib/x86_64-linux-gnu/";
using (var memStream = new MemoryStream())
using (PdfRenderer pdfExportImage = new PdfRenderer())
{
    pdfExportImage.Load(item.OpenReadStream());
    var bitmapimage = pdfExportImage.ExportAsImage(0);

    var img = bitmapimage.Encode(SkiaSharp.SKEncodedImageFormat.Jpeg, 100).ToArray();
    await memStream.WriteAsync(img, 0, img.Length);

    memStream.Position = 0;
    await _storageService.UploadOrderDocument(docName, memStream);
}