我确实看到了"PDF to Image using GhostScript. No image file has to be created",但只有(某种程度上)回答了我一半的问题。是否可以使用GhostScriptSharp (或常规的GhostScript dll)将MemoryStream中的pdf转换为MemoryStream中的jpg?我提到了一个使用iTextSharp动态填充的pdf表单,我已经将它定向到MemoryStream以保存到数据库或流到http响应中,如果可以的话,我非常希望避免保存到文件(以及随后的清理)。
在我提到的答案中唯一的答案是,一个人必须去GhostScript dll去做后一部分,但很明显,我需要做一个很好的腿工作,以了解这意味着什么。有谁有好的资源可以帮助我这次旅行吗?
发布于 2014-01-04 15:34:27
问题是,与PostScript语言不同的是,PDF语言本质上需要对文件的随机访问。如果直接将PDF提供给标准输入或管道,Ghostscript将在解释PDF之前将其复制到临时文件中。因此,将PDF作为MemoryStream (或字节数组)传递是没有意义的,因为在解释它之前,它将在磁盘上结束。
看看Ghostscript.NET,它是“内存中”输出的GhostscriptRasterizer示例。
发布于 2015-05-07 10:38:13
Ghostscript.Net是Ghostscript dll的包装器。它现在可以接收流对象,并返回可以保存到流中的图像。下面是我作为ASP页面从内存流中生成PDF的一个例子。我还没有完全找到处理鬼脚本dll的最佳方法,以及在服务器上定位它的位置。
void PDFToImage(MemoryStream inputMS, int dpi)
{
GhostscriptRasterizer rasterizer = null;
GhostscriptVersionInfo version = new GhostscriptVersionInfo(
new Version(0, 0, 0), @"C:\PathToDll\gsdll32.dll",
string.Empty, GhostscriptLicense.GPL);
using (rasterizer = new GhostscriptRasterizer())
{
rasterizer.Open(inputMS, version, false);
for (int i = 1; i <= rasterizer.PageCount; i++)
{
using (MemoryStream ms = new MemoryStream())
{
Image img = rasterizer.GetPage(dpi, dpi, i);
img.Save(ms, ImageFormat.Jpeg);
ms.Close();
AspImage newPage = new AspImage();
newPage.ImageUrl = "data:image/png;base64," + Convert.ToBase64String((byte[])ms.ToArray());
Document1Image.Controls.Add(newPage);
}
}
rasterizer.Close();
}
}https://stackoverflow.com/questions/20913530
复制相似问题