如何在命令行中列出 PDF 页面大小
How to list PDF page sizes in the command line
在 Ghostscript 文档中,我没有找到查询 PDF 文档纸张大小的参数。
我在 lib 子目录中了解到一个 pdf_info.ps 文件。
我试过这段代码:
private const string RutaAGhostscript = @"C:\Program Files\gs\gs9.52\bin\gswin64c.exe";
...
Process pTamaños = new Process();
pTamaños.StartInfo.FileName = RutaAGhostscript;
pTamaños.StartInfo.Arguments = " -dNODISPLAY -q -sFile=\"" + RutaSeleccionada + "\" -DumpMediaSizes \"C:\Program Files\gs\gs9.52\lib\pdf_info.ps\"";
pTamaños.StartInfo.UseShellExecute = false;
pTamaños.StartInfo.RedirectStandardOutput = true;
pTamaños.Start();
EscribirArchivo(pTamaños.StandardOutput.ReadToEnd(), RutaResultadoTxt2);
pTamaños.WaitForExit();
我在结果文件中得到了这个输出:
Error: /invalidfileaccess in --file--
Operand stack:
(C:\Users\claudio.bogado\QGMI\Ruben De Jes32s Martinez - 2020-05 Certificado 16\Tramo 3\Certificado 16 Tramo 3.pdf) (r)
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1990 1 3 %oparray_pop 1989 1 3 %oparray_pop 1977 1 3 %oparray_pop 1833 1 3 %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval--
Dictionary stack:
--dict:739/1123(ro)(G)-- --dict:0/20(G)-- --dict:75/200(L)-- --dict:15/128(L)--
Current allocation mode is local
Last OS error: Permission denied
Current file position is 11770
使用我尝试过的 xPDF 工具pdfinfo -box
,一些页面大小不同的文件只显示第一页。
我是不是输入错了文件名?
更新:
我尝试使用 kernel32 的 GetShortPathName 来去除空格。错误输出中的唯一区别是文件名现在是 C:\Users\CLAUDI~1.BOG\QGMI\RUBEND~1\TRAMO3~1\CERTIF~1.PDF
还尝试将反斜杠更改为斜杠,不同之处在于错误消息现在显示 C:/Users/CLAUDI~1.BOG/QGMI/RUBEND~1/TRAMO3~1/CERTIF~1.PDF
来自巴拉圭的问候。
克劳迪奥·博加多·庞帕。
最新版本的 Ghostscript 默认默认为 SAFER 模式,这会阻止 PostScript 程序(如 pdf_info.ps)访问文件系统中的文件。
一般来说,Ghostscript 会尝试从命令行推断何时应该允许文件(例如输入文件名,在上面的例子中 pdf_info.ps),但它不知道 -sFile= 应该是允许,因为命令的那部分只是在 PostScript 解释器中结束。
因此,要使用 pdf_info.ps,您必须在命令行中设置 -dNOSAFER
或添加 --permit-file-read=
。 -dNOSAFER
关闭所有保护,因此您可能不想这样做,--permit-file-read 允许 PostScript 程序仅 读取 指定的目录。我建议你这样做。
我还建议您使用常用的 Ghostscript 可执行文件从命令行进行试验,只有在您的应用程序正确时才移动到您的应用程序。
如果您打算分发此应用程序,请查看许可文件。
在 Ghostscript 文档中,我没有找到查询 PDF 文档纸张大小的参数。
我在 lib 子目录中了解到一个 pdf_info.ps 文件。
我试过这段代码:
private const string RutaAGhostscript = @"C:\Program Files\gs\gs9.52\bin\gswin64c.exe";
...
Process pTamaños = new Process();
pTamaños.StartInfo.FileName = RutaAGhostscript;
pTamaños.StartInfo.Arguments = " -dNODISPLAY -q -sFile=\"" + RutaSeleccionada + "\" -DumpMediaSizes \"C:\Program Files\gs\gs9.52\lib\pdf_info.ps\"";
pTamaños.StartInfo.UseShellExecute = false;
pTamaños.StartInfo.RedirectStandardOutput = true;
pTamaños.Start();
EscribirArchivo(pTamaños.StandardOutput.ReadToEnd(), RutaResultadoTxt2);
pTamaños.WaitForExit();
我在结果文件中得到了这个输出:
Error: /invalidfileaccess in --file--
Operand stack:
(C:\Users\claudio.bogado\QGMI\Ruben De Jes32s Martinez - 2020-05 Certificado 16\Tramo 3\Certificado 16 Tramo 3.pdf) (r)
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 1990 1 3 %oparray_pop 1989 1 3 %oparray_pop 1977 1 3 %oparray_pop 1833 1 3 %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval--
Dictionary stack:
--dict:739/1123(ro)(G)-- --dict:0/20(G)-- --dict:75/200(L)-- --dict:15/128(L)--
Current allocation mode is local
Last OS error: Permission denied
Current file position is 11770
使用我尝试过的 xPDF 工具pdfinfo -box
,一些页面大小不同的文件只显示第一页。
我是不是输入错了文件名?
更新:
我尝试使用 kernel32 的 GetShortPathName 来去除空格。错误输出中的唯一区别是文件名现在是 C:\Users\CLAUDI~1.BOG\QGMI\RUBEND~1\TRAMO3~1\CERTIF~1.PDF
还尝试将反斜杠更改为斜杠,不同之处在于错误消息现在显示 C:/Users/CLAUDI~1.BOG/QGMI/RUBEND~1/TRAMO3~1/CERTIF~1.PDF
来自巴拉圭的问候。
克劳迪奥·博加多·庞帕。
最新版本的 Ghostscript 默认默认为 SAFER 模式,这会阻止 PostScript 程序(如 pdf_info.ps)访问文件系统中的文件。
一般来说,Ghostscript 会尝试从命令行推断何时应该允许文件(例如输入文件名,在上面的例子中 pdf_info.ps),但它不知道 -sFile= 应该是允许,因为命令的那部分只是在 PostScript 解释器中结束。
因此,要使用 pdf_info.ps,您必须在命令行中设置 -dNOSAFER
或添加 --permit-file-read=
。 -dNOSAFER
关闭所有保护,因此您可能不想这样做,--permit-file-read 允许 PostScript 程序仅 读取 指定的目录。我建议你这样做。
我还建议您使用常用的 Ghostscript 可执行文件从命令行进行试验,只有在您的应用程序正确时才移动到您的应用程序。
如果您打算分发此应用程序,请查看许可文件。