如何在c#中将PDF转换为图像?

如何在c#中将PDF转换为图像?,c#,asp.net-mvc,image,pdf,itext,C#,Asp.net Mvc,Image,Pdf,Itext,我想把pdf的网页转换成png格式。我知道我的代码不正确,但我找不到该做什么。此外,我只想使用iTextSharp 以下是源代码: public void PDFDisplay(string DosyaAdi, int PerNr, int ID, int FileId, string message) { string filepath = Server.MapPath(@"~/Content/Egitim/Files/") + DosyaAdi;

我想把pdf的网页转换成png格式。我知道我的代码不正确,但我找不到该做什么。此外,我只想使用iTextSharp

以下是源代码:

    public void PDFDisplay(string DosyaAdi, int PerNr, int ID, int FileId, string message)
    {

        string filepath = Server.MapPath(@"~/Content/Egitim/Files/") + DosyaAdi;
        PdfReader pdfReader = new PdfReader(filepath);
        int numberOfPages = pdfReader.NumberOfPages;
        string path = Server.MapPath(@"~/Content/Egitim/Slides/" + DosyaAdi + "/");
        Directory.CreateDirectory(path);

        System.Drawing.Image[] image1 = new System.Drawing.Image[numberOfPages];
        for (int i = 1; i < numberOfPages; i++)
        {
            byte[] pdfPage = pdfReader.GetPageContent(i);
            using (MemoryStream ms = new MemoryStream(pdfPage))
            {
                image1[i] = System.Drawing.Image.FromStream(ms);//error occurs here. Invalid parameter (ms)
            }
            image1[i].Save(path, System.Drawing.Imaging.ImageFormat.Png);

        }
public void PDFDisplay(字符串DosyaAdi、int PerNr、int ID、int FileId、字符串消息)
{
字符串filepath=Server.MapPath(@“~/Content/Egitim/Files/”)+DosyaAdi;
PdfReader PdfReader=新PdfReader(文件路径);
int numberOfPages=pdfReader.numberOfPages;
字符串路径=Server.MapPath(@“~/Content/Egitim/Slides/”+DosyaAdi+“/”);
CreateDirectory(路径);
System.Drawing.Image[]image1=新的System.Drawing.Image[numberOfPages];
对于(int i=1;i

如果您有任何想法,我们将不胜感激。

您假设iText可以将PDF语法(矢量数据)转换为图像(光栅图像)。这种假设是错误的。iText不会将PDF转换为图像!

您正在使用
GetPageContent()
方法。此方法获取页面的内容流。该内容流由更改图形状态和文本状态的运算符和操作数组成,通过这样做,可以定义在页面上绘制的内容

但是,此页面流远远不足以绘制页面,因为每个页面还引用了大量资源:

  • 图像通常存储在单独的PDF对象中。页面流引用它们,但不包含它们
  • 部分语法可以存储在外部对象(称为Form XObject)中。页面流引用这些外部对象,但不包含它们
  • 批注(例如表单字段的小部件批注、文本批注等)不是页面流的一部分。批注作为页面顶部的一个层添加。页面字典的
    /Annots
    条目引用特定页面上的批注
  • 字体从来都不是页面流的一部分。语法指的是页面资源的
    /font
    条目中包含名称的字体
简而言之:你的代码不能工作是正常的。你的问题“如何在c#中将PDF转换为图像?”的答案是:不使用iText


如果您将问题改为:我可以使用哪种工具,那么您的问题将脱离主题,因为堆栈溢出常见问题解答明确指出,您不能发布问题,询问有关工具、库等的建议

此代码有什么问题?您面临的问题是什么?@ChetanRanpariya的参数无效ms@Ceren邮递完整异常,包括其调用堆栈。使用
exception.ToString()
可以轻松获取它。人们无法通过查看代码猜出错误。还要调试代码。只有您可以检查
pdfPage
是否为null或为空。您确定
GetPageContent()
将返回图像?页面通常包含文本,而不是图像如果您不知道
GetPageContent()
方法返回的是什么,请停止评论。请阅读我的答案,并注意我投票将此问题作为“主题外”作为“此代码为什么不起作用”的问题来结束不允许在堆栈溢出上使用。但是,如果我能给出一个建议的话:iText在测试中使用Ghostscript。请查看GitHub上iText的源代码,了解如何执行此操作。特别是查看CompareTool类。事实上,这是@AmedeeVanGasse的好建议