dw_1.print(false) Сгенерированный PDF всегда пустой

ll_printed = dw_1.print(FALSE)

IF ll_printed = 1 AND FileLength64(gs_TmpFile) > 100000 THEN

ls_run =gs_GhostScript_Path + "gswin32c -q -sDEVICE=pdfwrite
-sOutputFile=" + gs_TmpFile + ".pdf " + " -dBATCH -dNOPAGEPROMPT -dNOPROMPT-dQUIET -dNOPAUSE" +' ' + gs_TmpFile

END IF

У меня есть этот скрипт, где я проверяю длину файла, я всегда генерирую PS с 11kb. Если я продолжу создавать pdf. это создаст пустой PDF. Иногда он действительно печатает правильную информацию, иногда пустую.


person sccydd    schedule 12.11.2017    source источник


Ответы (1)


Что ж, похоже, вы тестируете размер gs_TmpFile, чтобы убедиться, что он превышает 100 000 байт, и тем не менее вы говорите, что всегда генерируете программу PostScript размером 11 КБ (11 264 байта), так что я не понимаю, как вам удается вызывать Ghostscript в тот случай.

Я предполагаю, что ваш временный файл все еще не завершен или не содержит того, что вы думаете.

Конечно, вы установили -dQUIET, подавляя сообщения, и не удосужились предоставить (или даже захватить) расшифровку Ghostscript. Скорее всего, там есть что-то, что могло бы дать вам подсказку, но, поскольку вы этого не представили, никто не может сказать.

Вам нужно сделать значительно больше отладки этого самостоятельно. Вы должны захватить программу PostScript во время вызова Ghostscript (скопировать ее в новый файл), а также захватить выходные данные Ghostscript. Затем просмотрите созданный PDF-файл, пока не столкнетесь с ошибкой.

Когда вы столкнетесь с ошибкой, вы сможете сравнить программу PostScript, которая была отправлена ​​​​в Ghostscript, с рабочей версией, и у вас будет любая информация, о которой Ghostscript хотел бы, чтобы вы знали, что может помочь вам отладить проблему.

Здесь действительно недостаточно информации, чтобы предложить дополнительную помощь.

person KenS    schedule 12.11.2017
comment
На самом деле отсюда dw_1.print(FALSE) сгенерированный файл уже имеет размер 11 КБ, поэтому я не буду продолжать конвертировать, когда он пуст. Теперь мне интересно, как это dw_1.print(FALSE) приведет к файлу размером 11 КБ, даже если оно имеет значение. - person sccydd; 13.11.2017
comment
PostScript — это язык программирования. Многие системы печати PostScript начинают с определения всех процедур, которые они намерены выполнять, что может быть обширным. Кроме того, многие системы печати создают файлы, совместимые с DSC (Document Structure Convention), которые содержат ряд комментариев с метаданными и имеют определенную структуру. 11 КБ - это не так уж много для созданной компьютером программы PostScript. Из вашего вопроса я понял, что вы говорите, что файл всегда был размером 11 КБ. Если это не так, то я подозреваю, что вы начинаете обрабатывать его до его завершения, и GS выдает ошибку - person KenS; 13.11.2017
comment
Я выделил 120 секунд ожидания, прежде чем он обработает следующий шаг. У этого окна данных есть элемент управления веб-браузером Microsoft ole object, где я перехожу к определенному URL-адресу и жду 120 секунд, прежде чем распечатать окно данных. - person sccydd; 13.11.2017
comment
Что ж, я дал вам предложения по отладке проблемы. На данный момент я больше ничего не могу сказать без дополнительной информации. - person KenS; 13.11.2017
comment
Печать является асинхронным действием. Я предлагаю вам следить за gs_TmpFile. Я не пробовал, но подозреваю, что если gs_TmpFile существует, и вы попытались открыть gs_TmpFile для чтения/блокировки, это не удастся, пока Windows не завершит запись файла. Убедитесь, что вы даете окнам достаточно времени для начала печати, прежде чем заблокировать gs_TmpFile. Дайте мне знать, если вам нужен пример кода. - person Eric Glenn; 05.12.2017