gpt4 book ai didi

c# - Ghostscript.NET 光栅器内存不足

转载 作者:行者123 更新时间:2023-11-30 12:57:36 29 4
gpt4 key购买 nike

我正在使用 Ghostscript.NET ,一个方便的 C# 包装器,用于 Ghostscript 功能。我有一批从客户端发送的 PDF 将在 ASP .NET WebAPI 服务器上转换为图像并返回给客户端。

public static IEnumerable<Image> PdfToImagesGhostscript(byte[] binaryPdfData, int dpi)
{
List<Image> pagesAsImages = new List<Image>();

GhostscriptVersionInfo gvi = new GhostscriptVersionInfo(AppDomain.CurrentDomain.BaseDirectory + @"\bin\gsdll32.dll");

using (var pdfDataStream = new MemoryStream(binaryPdfData))
using (var rasterizer = new Ghostscript.NET.Rasterizer.GhostscriptRasterizer())
{
rasterizer.Open(pdfDataStream, gvi, true);

for (int i = 1; i <= rasterizer.PageCount; i++)
{
Image pageAsImage = rasterizer.GetPage(dpi, dpi, i); // Out of Memory Exception on this line
pagesAsImages.Add(pageAsImage);
}
}
return pagesAsImages;
}

这通常工作正常(我通常使用 500 dpi,我知道它很高,但即使降到 300 我也可以重现此错误)。但是,如果我从客户端给它很多 PDF(例如 150 个单页 PDF),它通常会在 Ghostscript.NET Rasterizer 中遇到内存不足异常。我怎样才能克服这个?这应该线程吗?如果是这样,那将如何工作?使用 64 位版本的 GhostScript 会有帮助吗?提前致谢。

最佳答案

我自己是新手,在这里寻找技术。

根据文档中的例子here ,他们展示了这个:

for (int page = 1; page <= _rasterizer.PageCount; page++)
{
var docName = String.Format("Page-{0}.pdf", page);
var pageFilePath = Path.Combine(outputPath, docName);
var pdf = _rasterizer.GetPage(desired_x_dpi, desired_y_dpi, pageNumber);
pdf.Save(pageFilePath);
pagesAsImages.Add(pdf);
}

您似乎没有保存文件。

我仍在努力让类似的东西也能在我这边工作。目前,我有 2 种方法要尝试,首先使用 GhostscriptProcessor:

private static void GhostscriptNetProcess(String fileName, String outputPath)
{
var version = Ghostscript.NET.GhostscriptVersionInfo.GetLastInstalledVersion();
var source = (fileName.IndexOf(' ') == -1) ? fileName : String.Format("\"{0}\"", fileName);
var gsArgs = new List<String>();
gsArgs.Add("-q");
gsArgs.Add("-dNOPAUSE");
gsArgs.Add("-dNOPROMPT");
gsArgs.Add("-sDEVICE=pdfwrite");
gsArgs.Add(String.Format(@"-sOutputFile={0}", outputPath));
gsArgs.Add(source);
var processor = new Ghostscript.NET.Processor.GhostscriptProcessor(version, false);
processor.Process(gsArgs.ToArray());
}

下面的这个版本与您的相似,并且在我开始寻找其他代码示例之前我开始使用的是:

private static void GhostscriptNetRaster(String fileName, String outputPath)
{
var version = Ghostscript.NET.GhostscriptVersionInfo.GetLastInstalledVersion();
using (var rasterizer = new Ghostscript.NET.Rasterizer.GhostscriptRasterizer())
{
rasterizer.Open(File.Open(fileName, FileMode.Open, FileAccess.Read), version, false);
for (int page = 0; page < rasterizer.PageCount; page++)
{
var img = rasterizer.GetPage(96, 96, page);
img.Save(outputPath);
}
}
}

这会让你到达任何地方吗?

关于c# - Ghostscript.NET 光栅器内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33508801/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com