繁体   English   中英

从PDF转换ImageMagick和Ghostscript时出错

[英]Error with ImageMagick and Ghostscript converting from PDF

我们正在将Magick.Net版本7.0与Ghostscript 9.16一起使用。 我们正在阅读PDF,并将其转换为tif或jpg图像。 当我们一次运行一次并转换PDF时,一切工作正常。

这是一个会被许多系统使用的应用程序,因此我们进行了小负载测试,以确保可以处理多个请求。 只要我们使用不同的PDF文件,一切都将很好运行。 如果我们尝试多次运行同一PDF文件(使用同一PDF同时执行5个请求),则会遇到错误。 我们收到的错误是PDFDelegateFailed。 我们不确定为什么会发生此错误,并且如果尝试其他格式(例如从tif到jpg),则不会有问题。

ImageMagick.MagickDelegateErrorException:

ESBService.exe:PDFDelegateFailed [ghostscript库9.16] -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap = 500000000 -dAlignToPixels = 0 -dGridFitTT = 2“ -sDEVICE = pngalpha” -dTextAlphaBits = 4 -dGraphics-AlphaBits r96x96“” -sOutputFile = C:/ Users / esbsvc / AppData / Local / Temp / magick-4668LPfdzdzRfLYF%d“” -fC:/ Users / esbsvc / AppData / Local / Temp / magick-4668wanF98SE_8PK“” -fC:/ Users / esbsvc / AppData / Local / Temp / magick-4668L3mJE6M2iUZV“ :(空)'@ error / pdf.c / ReadPDFImage / 788,位于ImageMagick.Wrapper.MagickImageCollection.HandleException(MagickException异常),位于ImageMagick.Wrapper.MagickImageCollection.Read(字节) []数据,位于ImageMagick.MagickImageCollection.Read(Byte []数据,MagickReadSettings readSettings),位于__DynamicCode.Typeaeb039071464a22ae6518eaa5ec46c.OnExecute(PipelineContext1上下文),位于c:\\ emps \\ esbsvc \\ appData \\ Local.42。 cs:112行

任何帮助,将不胜感激MikeH。

有两个可能的问题:

1)C#代码使用的是Ghostscript DLL的单个副本,并且您尚未将其构建为线程安全的(我不记得Windows当前的默认设置)。 实际上,您正在运行多个线程而不是进程。

2)您在文件访问上发生冲突。 为了解释PDF文件,有必要在文件周围跳很多,我猜想有两个进程试图同时重定位文件指针,而一个失败。

与图像格式不同,ImageMagick无法直接处理PDF文件(PDF不是图像格式,它要复杂得多),因此它不需要调用Ghostscript。 如果要对PostScript文件尝试相同的操作,则可能会遇到相同的问题。 但是,由于PostScript文件是线性读取的,因此您可能没有问题。

如果捕获Ghostscript反向通道输出(并停止使用-dQUIET),则可能会获得一些更有用的信息。

由于您说“这将受到许多系统的攻击”,因此请检查AGPL的条款,并确保您的使用与许可证一致。

Ghostscript的API文档( http://www.ghostscript.com/doc/current/API.htm )指出以下内容:

Win32 DLL gsdll32.dll可以同时被多个程序使用,但在每个进程中只能使用一次。

您使用的Magick.NET版本无法正确处理此问题。 我刚刚将补丁推送到ImageMagick的GIT存储库,以确保该DLL只能使用一次。 第一个线程将使用内存中的库,第二个/第三个/等等。 线程将被迫使用命令行。 Magick.NET 7.0.0.0022刚刚发布,并包含此更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM