covert pdf to png by .net core in linux environment

在使用.net core进行跨平台编程的时候,经常要遇到一些平台兼容的问题。比如在开发环境,我们一般是在windows下面编程,单元测试,当开发测试通过之后,发布到linux上之后,就会发现有问题。比如最近同事在开发一个功能,其中涉及到要将pdf转换成图片的一个步骤。这个在.net里面有着非常多的成熟的工具可以转换,在java里面也同样有,但一旦用.net core然后发布至linux就不行。那么应该如何解决呢?

1. 首先要改变一个开发的观点:即在做.net开发时,一定要找到对号入座的nuget包。比如上述的功能,一根筋想要找到这个nuget包,往往会让开发者失望。以往能找到对号入座的nuget包,只能说开发者的需求是普遍性的,如是不是普遍性的只能说自己的运气不错;

2. 要有包容的心态:不再局限于.net的生态环境,linux环境下肯定有着非常丰富的可以满足某些功能的工具,比如这个pdf转图片,一搜索果然很多

   ImageMagick  convert简单的命令即可解决问题,还有ImageMagick工具使用的原生脚本语言,ghostscript。

有了以上的准备,我们首先在linux环境下尝试执行ghostscrip进行转换,在网上搜索一个命令: gs -dBATCH -dNOPAUSE -r400 -sDEVICE=pngalpha  -sOutputFile="test.png" test.pdf, PDF转成PNG,nice work!

我们最终还是要在.net core程序去实行, convert pdf to png。非常简单,用.net core 程序去执行linux 命令即可。

    var sdkVersion = string.Empty;
    var psi = new System.Diagnostics.ProcessStartInfo("dotnet", " -v");
    psi.RedirectStandardOutput = true;
    using (var process = System.Diagnostics.Process.Start(psi))
    {
        var output = process.StandardOutput.ReadToEnd();
        sdkVersion = output.Split('\n')
            .Where(line => line.StartsWith(".NET Command Line Tools"))
            .FirstOrDefault();
    }
    return Content(sdkVersion);

  上面是简单地执行了,查看dotnet版本的命令

换一下:

var psi = new System.Diagnostics.ProcessStartInfo("ghostscript", "gs -dBATCH -dNOPAUSE -r400 -sDEVICE=pngalpha  -sOutputFile='test.png' test.pdf");


posted @ 2019-08-12 12:08  上盐码农  阅读(367)  评论(0编辑  收藏  举报