如何在c#中将PDF转换为图像?
我想把pdf的网页转换成png格式。我知道我的代码不正确,但我找不到该做什么。此外,我只想使用iTextSharp 以下是源代码:如何在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;
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
如果您将问题改为:我可以使用哪种工具,那么您的问题将脱离主题,因为堆栈溢出常见问题解答明确指出,您不能发布问题,询问有关工具、库等的建议此代码有什么问题?您面临的问题是什么?@ChetanRanpariya的参数无效ms@Ceren邮递完整异常,包括其调用堆栈。使用
exception.ToString()
可以轻松获取它。人们无法通过查看代码猜出错误。还要调试代码。只有您可以检查pdfPage
是否为null或为空。您确定GetPageContent()
将返回图像?页面通常包含文本,而不是图像如果您不知道GetPageContent()
方法返回的是什么,请停止评论。请阅读我的答案,并注意我投票将此问题作为“主题外”作为“此代码为什么不起作用”的问题来结束不允许在堆栈溢出上使用。但是,如果我能给出一个建议的话:iText在测试中使用Ghostscript。请查看GitHub上iText的源代码,了解如何执行此操作。特别是查看CompareTool类。事实上,这是@AmedeeVanGasse的好建议