如何在 C# 中将 PDF 转换为图像? [复制]

Posted

技术标签:

【中文标题】如何在 C# 中将 PDF 转换为图像? [复制]【英文标题】:How to convert PDF to Image in c#? [duplicate] 【发布时间】:2018-12-18 04:57:49 【问题描述】:

我想将 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);

        

任何想法都将不胜感激,谢谢。

【问题讨论】:

这段代码有什么问题?您遇到了什么问题? @ChetanRanpariya ms 参数无效 @Ceren 发布完整的异常,包括其调用堆栈。您可以通过Exception.ToString() 轻松获取。人们无法仅通过查看代码来猜测出什么问题。同时调试你的代码。只有您可以检查pdfPage 是否为空或为空 顺便说一句,您确定GetPageContent() 会返回图像吗?页面通常包含文本,而不是图像 如果您不知道GetPageContent() 方法返回的内容,请停止评论。阅读我的回答,并注意我投票决定将此问题作为“离题”结束,因为 Stack Overflow 上不允许提出“为什么此代码不起作用”的问题。 【参考方案1】:

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

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

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

图像通常存储在单独的 PDF 对象中。页面流引用它们,但不包含它们。 部分语法可以存储在外部对象中,称为Form XObject。页面流引用这些外部对象,但不包含它们。 注解(例如表单字段的小部件注解、文本注解等)不是页面流的一部分。注释作为图层添加到页面顶部。页面字典的/Annots 条目是指特定页面上的注释。 字体绝不是页面流的一部分。语法通过名称引用字体,该名称是页面资源的 /Fonts 条目的条目。 ...

简而言之:您的代码无法运行是正常的。您的问题“如何在 c# 中将 PDF 转换为图像?”的答案是:不是 iText!

如果您将问题更改为:我可以使用哪个工具,那么您的问题就会偏离主题,因为 Stack Overflow 常见问题解答明确指出您不能发布问题来询问有关工具、库的建议。 ..

【讨论】:

但是,如果我能给出一个建议:iText 在测试中使用 Ghostscript。查看 GitHub 上 iText 的源代码,了解如何操作。特别看一下 CompareTool 类。 确实,这是来自@AmedeeVanGasse 的好建议

以上是关于如何在 C# 中将 PDF 转换为图像? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中将 .docx 转换为 .pdf [关闭]

如何在 Android 中将 PDF 页面转换为图像?

如何在 c# 中的 iTextSharp pdf 中将位图显示为 jpeg 格式

如何在硒 c# 中将 Blob 图像转换为位图图像

如何在 C# 中将日期字符串转换为 DateTime 对象? [复制]

如何在 C# 中将 E+ 数字从字符串转换为十进制? [复制]