问题标签 [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.
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 ...我们是否通过了任何其他解决方法?
提前非常感谢。
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 中的任何透明对象,尽管我确实想要一个不需要手动干预的更持久的解决方案。
如果有人有想法,我很乐意听到。
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()
. 如果我没有注释该行,它会在没有遇到断点的情况下轰炸调试器。
这是代码:
vb.net - 使用 Ghostscript.net 将 PDF 裁剪为 png
我正在使用带有 VB 语言 Web 应用程序的 Visual Studio 2015,我的问题简而言之,我使用 Ghostscript 提取 pdf 第一页以 png 其工作正常,但如果 pdf 文件名包含空格,则它不会提取 png 并且没有错误显示或写入在其他语言上,错误“页码不在页码范围内!”。我很感激任何帮助。
test.pdf ---> 工作正常
new york.pdf --->什么都没有发生没有错误出现
pdf文件名不是用英文写的--->错误“页码不在页码范围内!”
代码是
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
显示设备不支持回调。希望我错了。
image-processing - 将pdf转换为jpg时的Ghostscript Rasterizer遮罩图像
我们正在使用 Ghostscript Rasterizer 将 pdf 转换为 jpg 但对于少数图像,转换后的 jpg 正在擦除带有黑色标记的数据,如上面的屏幕截图所示,它与 Ghostscript 相关还是我们需要添加过滤器屏蔽数据
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 位。
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% 应该表示什么或为什么需要使用它。没有这些知识,我就瞎了眼,只是扔东西希望它能起作用。
谢谢你。
python - Python-GhostScript 命令执行
我已经使用pip install gohstscript在 python 中安装了 ghost 脚本包。
安装成功,我可以看到pip list下的包
现在我想执行ghostscript命令,它给出的错误如下
并且安装路径是
所以现在我需要在环境变量中添加哪个路径或如何执行 gs 命令