问题标签 [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 投票
2 回答
229 浏览

multithreading - 如何获得有效的 x64 THREADSAFE Ghostscript DLL

主要背景

我们实际上是在尝试获取 Ghostscript x64 DLL 的多线程版本,以便通过 Ghostscript .NET 使用它。该组件应该“允许在单个进程中同时运行多个 Ghostscript 实例”,但是,正如我们在项目中检查的那样,在向应用程序发出并发请求之前工作正常。可以使用相同的方法复制相同的行为Tasks。在这两种情况下引发的错误描述是:

调用“gsapi_new_instance”时发生错误:-100

即使它似乎与 .NET 没有直接关系,我也会发布我们的 C# 方法代码示例,仅用于上下文化。

线程安全解决方案

开始我们的调查,我们在这篇文章中找到了这个 KenS 的答案,表明 Ghostscript DLL 必须使用 GS_THREADSAFE 编译器定义生成。

澄清一下,当我们使用 Ghostscript 9.52 x64 来生成 PDF 时,我们需要为发布配置编译这个 x64 DLL。在尝试在 Windows 10 x64 机器上编译 Ghostscript 源代码后,使用 Visual Studio Community 2017 和 Visual Studio Community 2019,我们终于设法在没有 GS_THREADSAFE 参数的情况下构建和生成所有项目(仅限 VS Community 2019),只是为了确认编译正常,我们检查 DLL 和可执行文件是否正常工作。对于这个过程,我们记住了我们在Ghostscript 官方文档中找到的所有内容。

由于我们没有其他指南来包含此 GS_THREADSAFE 参数,因此我们按照此解决方案中给出的说明进行操作,包括XCFLAGS="-DGS_THREADSAFE=1"在 nmake 构建命令上,将这句话用于Rebuild all选项:

这种方法在构建过程中会出现错误:

函数 gs_log_error 文件 \mkromfs.obj 1 中引用的错误 LNK2019 未解析的外部符号 errprintf_nomem

看起来,文件mkromfs.c有一个名为errprintf_nomem的方法,在设置 GS_THREADSAFE 时找不到该方法。

问题

1 - 是否有任何包含编译为 THREADSAFE 的 x64 DLL 的 Ghostscript 公开版本?

而且,如果不是(这就是我的猜测......)

2 - 是否可以在不更改源代码的情况下将此 DLL 设为 THREADSAFE?

3-请任何人提供分步指南或演练,以使用 GS_THREADSAFE 在 Windows 10 x64 上使用 Visual Studio(甚至任何其他可能的替代方案)构建 x64 Ghostscript DLL?

4 - 一些帖子谈到人们使用 Ghostscript .NET 来管理多线程。我假设这些示例都使用 GS_THREADSAFE DLL ...我们是否通过了任何其他解决方法?

提前非常感谢。

0 投票
1 回答
100 浏览

c# - 我收到一个错误:CS0116 A namspace cannot directly contain members,例如第 3 行的字段或方法

0 投票
0 回答
78 浏览

c# - 在 GhostScript.NET 中转换包含带有 Alpha 的 PNG 的 PDF

我有转换可能包含使用透明度的图像的 PDF 的问题。在这些文档中,转换后,图像将显示黑色而不是透明区域。转换的目标不是透明区域,而是实际的页面颜色——通常是白色。

由于我使用 GhostscriptRasterizer 允许直接转换为 Image 对象并随后在内存中编码为 JPEG 或 PNG,因此我不能使用推荐的使用 GhostscriptPngDevice 的解决方法,或者至少我宁愿​​不使用该方法并为一些按需 PDF 转换编写临时 PNG。

我已经在 GhostScript.NET 源代码中玩过,尝试了不同的方法来注入 BackgroundColor 或影响 MaxBitmap 的值,但无济于事。虽然默认的BackgroundColor已经是白色,而Ghostscript.NET已经自己配置了MaxBitmap为1g。

现在我正在通过在 Acrobat 中打开有问题的文档来解决这个问题,并应用“修复透明度”Inflight 选项来展平 PDF 中的任何透明对象,尽管我确实想要一个不需要手动干预的更持久的解决方案。

如果有人有想法,我很乐意听到。

0 投票
1 回答
156 浏览

c# - Ghostscript.NET 1.2.3“找不到方法”作为函数应用程序运行

我不确定为什么这会失败并var img = rasterizer.GetPage(dpi, 1);出现以下错误:

找不到方法:'System.Drawing.Image Ghostscript.NET.Rasterizer.GhostscriptRasterizer.GetPage(Int32, Int32)'

我的 dll 路径是正确的,并且是 64 位版本。GhostScript Rasterizer 可以打开内存流,然后在GetPage(). 如果我没有注释该行,它会在没有遇到断点的情况下轰炸调试器。

这是代码:

0 投票
1 回答
109 浏览

vb.net - 使用 Ghostscript.net 将 PDF 裁剪为 png

我正在使用带有 VB 语言 Web 应用程序的 Visual Studio 2015,我的问题简而言之,我使用 Ghostscript 提取 pdf 第一页以 png 其工作正常,但如果 pdf 文件名包含空格,则它不会提取 png 并且没有错误显示或写入在其他语言上,错误“页码不在页码范围内!”。我很感激任何帮助。

test.pdf ---> 工作正常

new york.pdf --->什么都没有发生没有错误出现

pdf文件名不是用英文写的--->错误“页码不在页码范围内!”

代码是

0 投票
0 回答
49 浏览

ghostscript - Ghostscript 显示设备 rectangle_request 是否有效?

我正在编写一个与 PDF 相关的小应用程序,因此我选择了 Ghostscript 进行渲染。我已将 Ghostscript v9.54.0 中的 gsdll64.dll 带入我的项目中。该库启动良好,但有一个怪癖:当我使用rectangle_request回调时,它会产生内存访问冲突错误。首先,我认为这是因为 C# 绑定而发生的(最初我在 WPF 平台上,当然是 Ghostscript.NET),但经过数小时的尝试,我最终得到了一个产生相同错误的 C++ 演示应用程序。

以下是我在该测试应用程序中所做的事情:

接下来可以看到回调构成:

我的问题很简单:我做错了什么?=)

PS:我也在研究 Ghostscript 的开源;设备/devdsp.c 特别是。尽管代码量让我不知所措,但我强烈地感觉到rectangle_request显示设备不支持回调。希望我错了。

0 投票
0 回答
81 浏览

image-processing - 将pdf转换为jpg时的Ghostscript Rasterizer遮罩图像

我们正在使用 Ghostscript Rasterizer 将 pdf 转换为 jpg 但对于少数图像,转换后的 jpg 正在擦除带有黑色标记的数据,如上面的屏幕截图所示,它与 Ghostscript 相关还是我们需要添加过滤器屏蔽数据

0 投票
1 回答
115 浏览

imagemagick - MagicNET 将 PDF 转换为黑白 (1bit) PNG

我们的一位客户需要将 PDF 运输标签转换为 PNG 图像。PDF 图像需要为 300 DPI,位深为 1(纯黑白,无灰度)。

我已经完成了这项工作,但有些问题我找不到任何解决方案。

我的代码

结果

当使用以下设置(BitDepth(1) + 300 DPI)运行此代码时,PNG 图像为 1169x2303 和(4Bit 深度)。

当使用以下设置运行此代码时(已删除 BitDepth(1) + 300 DPI),PNG 图像为 1169x2303 和(32 位深度)。

这给了我 2 个主要问题,当 BitDepth 设置为 1 时,为什么 PNG 图像仍然是 4 位?其次,该 4 位图像的质量非常糟糕,条码扫描仪无法读取。感觉就像图像在写作过程中以某种方式调整了大小。我需要具有 32 位图像的“清晰度”,但需要 1 位。

有人可以在这里指出我正确的方向吗,感觉我缺乏图像转换的专业知识。

谢谢!

PS:我正在使用 Magick.NET-Q8-AnyCPU (7.23.3)

测试建议1

结果图像以黑线作为所有内容的边框,没有任何文本填充黑色,但图像现在按预期为 1 位。

0 投票
0 回答
303 浏览

c# - 使用 GhostScript.net 将 PDF 转换为文本,尝试将文本发送到匿名管道而不是将其写入磁盘时出现错误

我正在使用 Ghostscript 通过 GhostScript.NET 包装库将 PDF 文件转换为文本。在将文本写入文件(“-sOutputFile=”+ outputPipeHandle)时,我正在对其进行转换,但我宁愿将其写入流(“-o”+ outputPipeHandle)。这是我在 C# 中的尝试:

我的错误如下 - 我不太关心警告,因为我是关于“无法打开文件 958”的致命错误 - 因为我认为它会在内存中。

更新

作为其他参考,我基本上使用了他们网站上 GhostScript.net 示例中的这段代码: PipedOutputSample.cs

我能看到的唯一区别是我将设备更改为“txtwrite”而不是“pdfwrite”。

更新 2

仔细阅读文档后

请注意,在 MS Windows 系统上,% 字符对于命令处理器 (shell) 也有特殊含义,因此您必须将其加倍。

当我碰巧在 Windows 上时,我将我的 outputPipeHandle 命名为: string outputPipeHandle = "%%handle%%" + int.Parse(gsPipedOutput.ClientHandle).ToString("X2");

所以我不再收到上述关于无法访问文件的错误。相反,我在这一行上的断点已到达

但是在尝试将该数据字段的值复制到我的变量时,它完全脱离了我的线程......跳过了我的捕获,甚至我的 finally 块。我没有看到任何关于它为什么在输出控制台中爆发的消息。某种 GhostScript 指针错误???

我仍然不知所措。我什至不知道 %handle% 应该表示什么或为什么需要使用它。没有这些知识,我就瞎了眼,只是扔东西希望它能起作用。

谢谢你。

0 投票
0 回答
36 浏览

python - Python-GhostScript 命令执行

我已经使用pip install gohstscript在 python 中安装了 ghost 脚本包。

安装成功,我可以看到pip list下的包

现在我想执行ghostscript命令,它给出的错误如下

并且安装路径是

所以现在我需要在环境变量中添加哪个路径或如何执行 gs 命令