2012-07-06 97 views
0

这里是有问题的代码:为什么我无法用ImageMagickNet打开PDF文件?

MagickNet.InitializeMagick(); 
ImageMagickNET.Image image = new ImageMagickNET.Image(@"C:\temp.pdf"); 
image.Quality = 100; 
image.CompressType = ImageMagickNET.CompressionType.LosslessJPEGCompression; 
image.Write(@"C:\temp.jpg"); 

我相当肯定此代码应工作,但我得到的信息非常例外:External component has thrown an exception.

此异常就行抛出:ImageMagickNET.Image image = new ImageMagickNET.Image(@"C:\temp.pdf");

的InnerException:空

堆栈跟踪:

at Magick.Image.{ctor}(Image* , basic_string<char\,std::char_traits<char>\,std::allocator<char> >*) 
    at ImageMagickNET.Image..ctor(String imageSpec) 
    at WindowsFormsApplication1.Form1.ReadQRCode(String doc) in C:\Users\me\Documents\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.Designer.cs:line 126 
    at WindowsFormsApplication1.Form1.seperatePDFsInOrder(String fileName) in C:\Users\me\Documents\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.Designer.cs:line 109 
    at WindowsFormsApplication1.Form1.InitializeComponent() in C:\Users\me\Documents\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.Designer.cs:line 44 
    at WindowsFormsApplication1.Form1..ctor() in C:\Users\me\Documents\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Form1.cs:line 16 
    at WindowsFormsApplication1.Program.Main() in C:\Users\me\Documents\Visual Studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\Program.cs:line 20 
    at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) 
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) 
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) 
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 
    at System.Threading.ThreadHelper.ThreadStart() 

任何人都有任何想法,我可能会做错吗?

+1

任何内部异常?堆栈跟踪? – Oded 2012-07-06 19:35:28

+0

@Oded对不起。添加到原始帖子。 – PFranchise 2012-07-06 19:38:10

+0

你为什么要将PDF文件加载到图像处理库中?该文件是否确实存在于该位置? – Oded 2012-07-06 19:39:37

回答

2

您似乎在第二个引用行中声明了image = new作为* .pdf文件。最好用c:\tmp.jpg来尝试。或者更好c:\temp\tmp.jpg ...

ImageMagick应用其'我想将该文件解析为PDF' -mode如果它看到后缀* .pdf。 (仅在文件名没有后缀的情况下才应用其魔术文件类型发现例程。)

此外,运行代码的用户可能无法写入文件c:\tmp.jpg。可能有两个原因:

  1. c:\作为目录不可写入此用户。
  2. 该文件已经存在,并且不能被该用户覆盖(它可能属于另一个用户)。

最后,注意ImageMagick的能力来处理PDF文件作为输入依赖于外部“代理”:它不能胜任这项工作本身,它需要在同一台主机上的Ghostscript安装调用它,让它去做...

+0

非常感谢您的评论。当我在星期一回到工作岗位时,我会将其应用于我的问题。你似乎对这个问题非常了解,我想知道你是否可以借给我一些快速建议。我所要做的就是将几页1页PDF转换为图像。我需要处理图像,但不关心保存图像。我是否会以正确的方式进行讨论,或者您会提出一个不同的解决方案?再次感谢! – PFranchise 2012-07-07 15:13:03

+0

此外,正在运行的代码未在编辑c:\中的文件。我刚刚编辑了这个问题的路径。 – PFranchise 2012-07-07 15:17:08

+0

所以**如果你没有保存这些图片,你想要做什么**?什么样的进一步处理?你有没有考虑过这样做呢? – 2012-07-07 15:18:30

相关问题