问题标签 [ghostscript.net]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2106 浏览

c# - Ghostscript.NET - 作为 Windows 服务运行时没有输出文件

我正在编写一个 Windows 服务来扫描一组目录以查找新的 PDF 文件,并使用 Ghostscript.NET 将它们转换为 TIFF。当我将代码作为普通程序编译并运行时,它运行良好,但是当我将相同的代码用作服务时,输出 TIFF 永远不会出现。我已将目标目录设置为允许为每个人编写,并且原始 PDF 已按预期删除,因此对于“本地系统”用户而言,这不应该是权限问题。审核访问失败和成功的目录仅显示成功列表。

有一个功能可以读取 PDF 的颜色填充,以确定它是彩色文档还是彩色扫描的黑白文档。该部分有效,因此访问和阅读 PDF 没有问题。

我还尝试从 Ghostscript 开关中删除“-q”,但没有报告任何错误,“-dDEBUG”输出了太多垃圾,我不知道它在说什么——但没有任何东西被标记为错误。

这是生成的开关的示例输出(从输出日志中提取):

设置在 XML 文件中读取并存储在 GSVals 类中。该类还处理写入系统日志以进行输出,或写入普通程序版本中的文本文件。GSSTDIO 是一个用于处理 GS 输入和输出的类,它只是将所有输出重定向到与 GSVals 相同的日志。程序版本和服务版本之间的唯一代码更改是服务处理代码,输出从文本文件更改为系统日志。Ghostscript 处理没有任何改变。

为了可移植性,它被编译为 x86,但正在 x64 上运行。已安装 GS 9.15,包括 x86 和 x64 版本。GS.NET 是通过 NuGet 安装到 VS 2012 中的版本 4.0.30319。ILMerge 2.13.0307 用于将 GS.NET dll 打包到 exe 中,也是为了便于移植。这些东西在正常的 EXE 和 Windows 服务版本之间都没有改变,正如我所说的,正常的 EXE 没有任何问题。

0 投票
1 回答
10614 浏览

c# - Ghostscript.NET.dll 打印pdf到指定打印机

如何使用 ghostscript api 打印 pdf。我尝试了谷歌,但仍然没有得到正确的解决方案。请帮助我如何完成这项任务。

0 投票
1 回答
2848 浏览

c# - Ghostscript PDF to TIFF设置输出大小c#

我有一个 22 页的 pdf。我正在使用 GhostScript 将 PDF 转换为 TIFF 以供 Tesseract 使用。我做了这个...

我想在传递它以供 Tesseract 使用之前设置 img 大小,但我不能..有什么办法吗?

有这个例子:但是如果我可以传递 pdf 中的每个图像以供 Tesseract 使用

0 投票
1 回答
419 浏览

c# - 如何从任务列表向 GUI 报告进度?

我目前正在开发一个将文件列表从 .ps (PostScript) 转换为 .png 的程序。

最初,这是在一个批处理文件中完成的,一次一个文件。我正在编写使用 Ghostscript.NET dll 异步处理这些文件的代码。通过将这些分成任务,我将处理时间从 30 分钟缩短到了大约 6 分钟。

我希望能够向用户展示这方面的一些进展,这样我的程序就不会看起来像被冻结了。

我对线程的了解足以让自己感到沮丧,因此非常感谢有关最佳方法的任何建议。下面的代码实现了一个 BackgroundWorker 来尝试显示进度。我以前用过 BGWorker 来显示进度,但不是在这样的多个任务上。事实上,这是我第一次在不使用 BGWorker 的情况下进行多线程。

我觉得 BGWorker 可能不是我需要使用的,但在我问之前我想自己尝试一下。

这是我到目前为止的代码:

当我在 BackgroundWorker_DoWork 的代码中添加中断时,一切似乎都正常,但是当它到达 BackgroundWorker.ReportProgress() 时,它永远不会到达 BackgroundWorker_ProgressChanged() 方法。

至少,我可以忍受在运行时将 progressBar.Style 作为选框,以便用户可以看到程序正在运行,但报告实际进度将是理想的。

正如我之前所说,我没有在线程方面做过大量的工作,我在这个主题上的所有知识几乎都来自 Google 和 StackOverflow。如果有完全不同的方法可以做到这一点,我愿意接受所有批评。

0 投票
1 回答
1084 浏览

asp.net - 如何使用 GhostScript.NET 阅读整个 PDF

我有一个向用户显示图像的网页。该显示旨在确认用户已上传正确的文档。由于安全要求,我决定将图像嵌入到 html 中(这允许所有图像具有相同的 URL)。我的应用程序允许使用几种不同类型的文件,但我的问题是 pdf 文件。

我正在使用 Ghostscript.NET 和 Ghostscript 来阅读我的 pdf 文件并将它们转换为图像,以便我可以嵌入它们。我的 Ghostscript 实现正在读取文件,但我只能显示第一页。我的问题:如何在一页或多页上显示整个 pdf?

我试过了:

上述实现会生成一个非常大的字符串,但是网页上会显示“损坏的图像”图标。

此实现成功打开与文档中的页面数量相等的窗口,但在除一个网页之外的所有网页上显示 pdf 的第一页。其余网页显示“损坏的图像”图标。仅供参考,此方法打开的网页使用:

写入已正确设置的页面。

同样,目标是将整个 pdf 转换为 base64 字符串。它可以显示在多个页面上,也可以显示在一个页面上。你知道怎么做吗?

上传文件大小限制为 5mb,我猜最大的 pdf 将是 5 页,但这不是问题。

0 投票
0 回答
111 浏览

c# - 什么会导致计算机在没有任何明显变化的情况下运行缓慢?

在过去的几个月里,我一直在开发一个应用程序,它使用 Ghostscript.net 将 PS 文件转换为 PNG,然后将它们合并到另一个 PDF 文档中。

有 100 多个 PS 文件可以转换为 PNG。这是通过 Ghostscript.net 完成的,并且是多线程的。我没有发布任何代码,因为我认为我的问题不一定与代码相关。在过去的几个月里,我已经对该程序进行了数百次测试,没有出现任何问题。昨天我又去测试了,多线程部分运行的非常慢。在这部分 CPU 使用率徘徊在 100% 左右,但输出的生成时间呈指数增长。

我尝试运行此应用程序的较旧、更稳定的版本,但遇到了同样的问题。我还将它正在运行的文件数量减少到只有 1 个 PS 文件,但它的运行速度仍然非常慢。任何超过 4 个 PS 文件的文件都会在尝试运行大约 5 分钟后“超时”或引发异常。

我在其他计算机上运行我的应用程序,内存和处理能力更少,其他计算机运行它没有问题。

我的问题基本上是,我的机器可能发生了什么导致这些问题?哪里是开始调查的好地方。我使用的是工作电脑,所以我的访问级别是有限的。当我只用 4 个 PS 文件运行程序时,转换过程花了很长时间,但之后执行的代码似乎没有性能问题。我正在使用带有 Intel core i7 和 16GB RAM 的 Windows 7 机器。

编辑:所以我已经确定了这个问题(并认为它使这个问题与这个论坛更相关)。通常,当使用 Ghostscript 应用程序将 .ps 转换为 .pdf 时,会为每个输出文件创建一个临时文件。应用程序终止后,会话中创建的临时文件将被删除。我深入研究了 AppData\Temp\ 中的临时文件(经过更多研究,我现在知道 Ghostscript 将使用 TEMP 环境变量来确定这些文件的存储位置)并注意到有一堆 _teXXXX。 tmp 文件(略超过 65,000 个)。我还注意到这些 _teXXXX.tmp 文件都以数百个为一组,具有相同的创建日期/时间。

显然,当使用 Ghostscript.net dll 时,这些文件不会被处理掉。有一段时间,您不会看到减速,因为当 dll 请求临时文件名时,它会继续计数并返回一个文件名块。经过几个月的测试,它一定是用尽了它所使用的命名约定中的可用名称,导致它开始变慢(搜索整个范围以找到一个未使用的名称),然后最终导致它停止运行所有一起。

删除所有这些临时文件后,我的应用程序运行正常。

Ghostscript.NET 处理器对象有一个“Dispose()”方法,但这似乎并没有解决问题。当我在多线程环境中进行这些转换时,我将尝试以单线程方式运行它们,看看问题是否仍然存在。我将此作为错误提交,因为目前我似乎无法找到解决方案。现在,我将只实现一些代码并在运行完成后自己删除这些文件。

0 投票
1 回答
1207 浏览

c# - Ghostscript.net 多线程问题

我有一个 Sharepoint 应用程序,它使用 Ghostscript.net 包装器将 pdf 文档光栅化为 png。现在我正在使用他们网站上的示例。但是我遇到的问题是当我尝试同时转换为 pdf 时。使用此代码一次只能工作一个。但是当我尝试同时转换 2 个 pdf 时,出现错误“调用 'gsapi_new_instance' 时发生错误:-100”。

否则,如果我使用rasterizer.Open(pdfStream, version, true);I 错误“算术运算导致溢出”

我应该改用 GhostscriptProcessor 还是 Viewer 实例?有没有人有这个代码的好例子?

0 投票
2 回答
1822 浏览

c# - ghostscript.net rasterizer 'gsapi_init_with_args' 制作:-15 错误

当我运行此代码时:

我收到此错误

错误在这一行: rasterizer.Open(stream, latestVersion, false);

任何人都可以指出导致这种情况发生的原因是什么?

我在本地机器上运行它。在包管理器控制台上安装了 Ghostscript。一切似乎都是正确的,但它很简单是行不通的。

0 投票
0 回答
342 浏览

c# - 报告服务:自定义程序集的权限错误

我在报表生成器上使用自定义程序集时遇到问题。我设法将我的程序集添加到 Report Builder 并允许它在文本框中显示一个单词“Hello”。当我开始添加稍微复杂的代码时,比如将 Ghostscript.NET 代码添加到我的程序集中,我遇到了很多障碍。

这些是我遇到问题的代码:

这里使用的“目录”变量是获取gsdll64.dll所在的当前程序集目录的目录。因此,我可以将它传递给 GhostscriptVersionInfo 构造函数。

但是在运行报告时我收到了来自报告生成器的错误:

请求“System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”类型的权限失败

在 Report Builder Policy 文件“RSPreviewPolicy.config”中,我添加了一些代码组并为 FileIOPermission 添加了一个权限集:

但没有任何效果。我担心如果我解决了这个问题,接下来会调用 GhostscriptVersionInfo 行,这是第二行代码。

有谁可以给​​我一些想法如何解决这个问题?这是我将 pdf 转换为图像并将其显示在报告上的唯一选择。

0 投票
1 回答
3553 浏览

c# - Ghostscript.NET pdf 到图像在 Windows azure 上不起作用

我正在尝试使用Ghostscript.NET将 pdf 第一页转换为图像,它在本地 IIS 上运行良好,但在 Azure Web 应用程序上失败,并出现以下错误:

[GhostscriptException:无法为符号“gsapi_revision”创建导出函数的委托]
Ghostscript.NET.GhostscriptLibrary.Initialize() +865
Ghostscript.NET.GhostscriptLibrary..ctor(GhostscriptVersionInfo 版本,来自内存的布尔值) +178
Ghostscript.NET .Interpreter.GhostscriptInterpreter..ctor(GhostscriptVersionInfo version, Boolean fromMemory) +48
Ghostscript.NET.Viewer.GhostscriptViewer.Open(String path, GhostscriptVersionInfo versionInfo, Boolean dllFromMemory) +75
Ghostscript.NET.Viewer.GhostscriptViewer.Open(Stream stream, GhostscriptVersionInfo 版本信息,布尔 dllFromMemory) +59
Ghostscript.NET.Rasterizer.GhostscriptRasterizer.Open(Stream stream, GhostscriptVersionInfo versionInfo, Boolean dllFromMemory) +40
VirtualWindow.Dropzone.Pages.Home.btnUpload_Click(Object sender, EventArgs e) +270
System.Web.UI.WebControls.Button.OnClick (EventArgs e) +116
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +108
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12
System. Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)+31 System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)+3582

我的代码如下

我做错了什么?