В документации Ghostscript я не нашел аргументов для запроса размеров бумаги PDF-документа.
Я читал о файле pdf_info.ps в подкаталоге lib.
Я пробовал этот код:
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 Jes\303\272s 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
, в некоторых файлах с разными размерами страниц отображается только первая страница.
Я неправильно вменяю имя файла?
ОБНОВИТЬ:
Я попытался использовать GetShortPathName в kernel32, чтобы избавиться от пробелов. Единственная разница в выводе ошибок заключалась в имени файла, который теперь 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
Привет из Парагвая.
Клаудио Богадо Помпа.
1 ответ
Последние версии Ghostscript по умолчанию работают в режиме БЕЗОПАСНОСТИ, который предотвращает доступ программ PostScript (например, pdf_info.ps) к файлам в файловой системе.
В общем, Ghostscript будет пытаться сделать вывод из командной строки, когда файлы должны быть разрешены (например, имя входного файла, в случае выше pdf_info.ps), но он не может знать, что -sFile = должен быть разрешен, потому что эта часть команда просто попадает в интерпретатор PostScript.
Итак, чтобы использовать pdf_info.ps, вам нужно будет либо установить -dNOSAFER
, либо добавить --permit-file-read=
в вашу командную строку. -dNOSAFER
отключает всю защиту, поэтому вы можете не захотеть этого делать, --permit-file-read позволяет программе PostScript читать только указанный каталог. Я рекомендую вам это сделать.
Я также предлагаю вам поэкспериментировать из командной строки, используя обычный исполняемый файл Ghostscript, и переходить к вашему приложению только тогда, когда он у вас правильный.
Если вы планируете распространять это приложение, ознакомьтесь с файлом лицензии.
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.