我正在使用 Ghostscript9.0,我尝试从 pdf 文件生成具有24 位深度的 LZW TIFF 图像,我总是使用以下命令获得位深度 = 1 GS:
gswin32.exe -dSAFER -dBATCH -dNOPAUSE -r200 -sDEVICE=tifflzw -sOutputFile=tmp.tiff myfile.pdf
Run Code Online (Sandbox Code Playgroud)
我查了几本手册:
http://ghostscript.com/doc/current/Devices.htm
http://www.ghostscript.com/doc/8.54/Use.htm
但我没有找到任何参数来做到这一点。
我添加了一个图像示例比例,我想用它来生成gs:

在这里我们可以看到位深度 (profondeur de couleur) = 24 并且图像使用 LZW 压缩
我的扫描仪可以进纸,但不能进行双面扫描。因此,如果我扫描双面打印的多页文档,我最终会得到两个 pdf 文件,一个包含所有奇数页(奇数页 pdf 文件),另一个包含所有偶数页(奇数页 pdf 文件)。偶数页 pdf 文件)。
我觉得应该可以有一个 Ghostscript 脚本来合并两个文件,这样偶数页 pdf 文件中的每一页都将作为每个其他页面添加到奇数页 pdf 文件中。
有人知道该怎么做吗?
优选地,脚本将采用参数,使得第一个参数指定输出文件,第二个参数指定奇数页pdf文件,第三个参数指定偶数页pdf文件。
我正在使用 Ghostscript ( ) 附带的 Windows postscript 打印驱动程序lib/ghostpdf.inf从打印作业生成 postscript 文件。
但是 postscript 驱动程序没有经过数字签名,因此 Windows 8 和 Windows Server 2012 不允许在不启动进入“允许未签名驱动程序”模式的情况下安装它。
您知道是否有任何签名版本可与最新的 Windows 版本一起使用?
如果情况并非如此,我可以自己编译和签名,但是我无法在http://git.ghostscript.com/ghostpdl.git上提供的 git 存储库中找到 postscript 打印驱动程序的源代码。因为我不熟悉构建驱动程序,所以我可能只是监督它。
有人可以给我一个提示,我可以在哪里找到 postscript 驱动程序文件来自己编译它吗?
编辑: .INF 文件如何告诉 Windows 驱动程序二进制文件所在的位置?我已经研究过“ClassGUID”,但它对于所有驱动程序都是相同的,并且注册表项说明了有关C:\Windows\System32\ntprint.dll. 我认为这对于这个问题来说并不重要,是吗?
是否可以转换 PDF 文件并为输出使用与输入 PDF 相同的名称?
我知道可以通过执行单独的重命名命令来解决问题。但我想弄清楚这是否可以用 GS 来完成。
现在我可以通过执行以下操作来更改 PDF 版本:
gswin32c -q -dNOPAUSE -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \
-sOutputFile=a.pdf -dBATCH b.pdf
Run Code Online (Sandbox Code Playgroud)
但是输入文件和输出文件名称必须不同,如果我这样做......
gswin32c -q -dNOPAUSE -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \
-sOutputFile=b.pdf -dBATCH b.pdf
Run Code Online (Sandbox Code Playgroud)
......它不起作用。
我认为当文件试图覆盖自己时,内部有些东西搞砸了。
有没有办法只使用 Ghostscript 来解决这个问题?
我如何更改此 powershell 脚本
Start-Process –FilePath “C:\Data\PROJECTS\ABC.pdf” –Verb Print -PassThru | %{sleep 10;$_} | kill
Run Code Online (Sandbox Code Playgroud)
到:
例如,我想将 ABC.pdf 的第 3、4、7 页打印成三个单独的文件,分别称为 ABC_3.png、ABC_4.png 和 ABC_7.png;图像文件可以是任何格式(.png、.jpg、.tif 等)。
我计划调用 .csv 列表来获取所有参数值(例如要打印的页码、带页码的输出名称、新文件位置的文件路径等),但我不知道如何设置 powershell 语法。谢谢你。
更新:
我使用下面的脚本在此任务上取得了进展,该脚本调用了 ghostcript。除了我似乎无法将我的 -dFirstPage 和 -dLastPage 设置为来自我的 csv 的参数之外,它执行了 1-3 项操作……我收到了 powershell 错误:
Invalid value for option -dFirstPage=$pg, use -sNAME = to define string constants
Run Code Online (Sandbox Code Playgroud)
如果我用一个数字替换 $pg ,它似乎工作正常。我将如何使用 -sNAME 来解决这个问题?
新脚本
#Path to your Ghostscript EXE
$tool = 'C:\Program Files\gs\gs9.19\bin\gswin64c.exe'
$files = Import-CSV …Run Code Online (Sandbox Code Playgroud) 我正在使用 C# 包装器使用 Ghostscript 将 PDF 转换为图像,但是我似乎无法正确引用 dll。我将 DLL 存储在 bin 文件夹中(也不知道这是否是保存它的最佳位置)这是我的代码:
byte[] fileData = null;
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream))
{
fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength);
}
string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
Ghostscript.NET.Rasterizer.GhostscriptRasterizer rasterizer = null;
Ghostscript.NET.GhostscriptVersionInfo vesion = new Ghostscript.NET.GhostscriptVersionInfo(new Version(0, 0, 0), path + @"\gsdll64.dll", string.Empty, Ghostscript.NET.GhostscriptLicense.GPL);
Stream inStream = new MemoryStream(fileData);
MemoryStream outStream = new MemoryStream();
List<Image> imageList = new List<Image>();
using (rasterizer = new Ghostscript.NET.Rasterizer.GhostscriptRasterizer())
{
rasterizer.Open(inStream, vesion, false);
for (int i = 1; i <= rasterizer.PageCount; …Run Code Online (Sandbox Code Playgroud) 我怎样才能读取目录 d:\ 中包含的文件而batchscript不是像这样一个一个的文件。我已经尝试过以下方法:
@echo off
"C:\Program Files\gs\gs9.25\bin\gswin32c.exe" -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dPDFSETTINGS=/printer -dColorImageResolution=90 -dAutoRotatePages=/None -dBATCH -dNOPAUSE -sOutputFile=d:\d\koran.pdf *d:\a\01.pdf d:\a\02.pdf d:\a\03.pdf d:\a\04.pdf d:\a\05.pdf d:\a\06.pdf d:\a\07.pdf d:\a\08.pdf d:\a\09.pdf d:\a\10.pdf d:\a\11.pdf d:\a\12.pdf d:\a\13.pdf d:\a\14.pdf d:\a\15.pdf d:\a\16.pdf d:\a\17.pdf d:\a\18.pdf d:\a\19.pdf d:\a\20.pdf d:\a\21.pdf d:\a\22.pdf d:\a\23.pdf d:\a\24.pdf*
exit
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下命令行将普通 PDF 文件转换为 PDF/A:
gs -dPDFA -dBATCH -dNOPAUSE -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sPDFACompatibilityPolicy=1 -sOutputFile=output.pdf input.pdf
Run Code Online (Sandbox Code Playgroud)
但是,我收到消息
GPL Ghostscript 9.26: UTF16BE text string detected in DOCINFO cannot be represented in XMP for PDF/A1, reverting to normal PDF output
Run Code Online (Sandbox Code Playgroud)
gs 恢复为普通 PDF。显然,该消息源于gs 的这个代码片段,但我们在那里读到该消息仅在pdev->PDFACompatibilityPolicy == 0. 我的理解是-sPDFACompatibilityPolicy=1命令行中的参数旨在防止这种情况。
问:为什么 gs 表现得好像所需的策略是 0 而不是 1?还有另一种方法可以将策略设置为 1 吗?
此外,正如它让我感到好奇:
问:有没有办法查看导致原始问题的奇怪 DOCINFO 类型或首先预防它?使用 Acrobat Reader,我看不到文件中的任何“可疑”内容。如果有帮助: input.pdf 是在 Word 的 Window 上生成的(我什至尝试使用 UseISO19005-1 设置,该设置应该生成 PDF/A,但无论如何都会出现问题)。
我有一些postcript格式的图表,由gnuplot生成.我需要在图表上放置一些识别信息.如何编写一些指令来执行此操作?我想在图表的右上角写一个数字(.ps文件).
ghostscript ×10
pdf ×8
postscript ×2
printing ×2
c# ×1
driver ×1
graphics ×1
image ×1
merge ×1
pdftk ×1
powershell ×1
shell ×1
tiff ×1
windows ×1