Заменяемые шрифты и Word Automation

У меня есть текстовый документ, в котором используется нестандартный шрифт. Он не встроен, а установлен на рассматриваемой машине. В Word 2010, когда я печатаю это в файл пост-скрипта при указании определенного драйвера принтера (HP Color LaserJet 2800 Series PS), этот шрифт прекрасно встраивается (подмножество). Это если я делаю это из самого приложения Word.

Если я попытаюсь сделать это программно, используя msword::_Document::Printout и указав тот же драйвер принтера, рассматриваемый шрифт будет заменен чем-то другим. Я знаю, что в обоих случаях используется один и тот же драйвер принтера. Файлы .ps, сгенерированные для обоих методов, указывают имя драйвера принтера вверху. Есть ли какая-то причина, по которой автоматизация таким образом заменит шрифт, а само приложение - нет?

CComVariant vIgnore; 
vIgnore.vt = VT_ERROR;
vIgnore.scode = DISP_E_PARAMNOTFOUND;

CComVariant vFalse = false;
CComVariant vTrue = true;
CComVariant vOutputFile(m_csTempOutputFile);
CComVariant vOneCopy((int)1);  

 ...
 ....

 m_piApp->SetActivePrinter( (LPCTSTR) csPrinterName); 

 m_Doc.PrintOut(
        &vFalse,//Background, return control while printing? FALSE
        &vFalse,//Append, append output to existing file? FALSE, overwrite file
        &vIgnore,//Range, the page range
        &vOutputFile,//OutputFileName, name of printtofile file
        &vIgnore,//From, starting page (ignored)
        &vIgnore,//To, ending page (ignored)
        &vIgnore,//Item, what content to print, DEFAULT
        &vOneCopy,//Copies, number of
        &vIgnore,//Pages, page range
        &vIgnore,//PageType, even only, odd only, etc
        &vTrue,//PrintToFile, TRUE
        &vIgnore,//Collate,
        &vIgnore,//ActivePrinterMacGX, (mac feature only)
        &vIgnore,//ManualDuplexPrint,
        &vIgnore,//PrintZoomColumn, (printing several pages on one page)
        &vIgnore,//PrintZoomRow,
        &vIgnore,//PrintZoomPaperWidth,
        &vIgnore);//PrintZoomPaperHeight,

person Dan G    schedule 17.05.2012    source источник
comment
и довольно забавно, если вместо распечатки я использую Saveas API для сохранения в формате PDF - снова подставляется шрифт. Если я делаю то же самое через сам Word, он встраивается нормально.   -  person Dan G    schedule 22.05.2012


Ответы (2)


В некоторых из моих систем, где я вижу это, перезагрузка сервера решила мою проблему. Иногда кажется, что после установки шрифта true type необходимо перезагрузить сервер.

И действительно, в некоторых из моих систем после перезагрузки я видел, как шрифт внедрялся. Почему для выполнения того же действия в приложении Word не потребовалась перезагрузка, а для автоматизации потребовалась — я понятия не имею.

http://www.idautomation.com/kb/ttf-printing.html

person Dan G    schedule 30.05.2012
comment
Если это проблема, вы, вероятно, можете избежать полной перезагрузки сервера, перезапустив только службу диспетчера очереди: net stop spooler, а затем net start spooler. - person Kurt Pfeifle; 31.05.2012
comment
Это также соответствует моему опыту — иногда требуется перезагрузка. Остановка и запуск службы диспетчера очереди в моем случае не имели значения. - person woddle; 08.04.2015

Драйвер принтера, который вы используете, имеет различные настройки, влияющие на работу со шрифтами. Они контролируют...

  • ...независимо от того, встроен шрифт или нет ('Загрузить шрифты в принтер' или 'Использовать шрифты принтера') и
  • ...ЕСЛИ встроено, то как это делается ('Как TrueType', 'Преобразовать в Outlines', ' Использовать таблицу подстановки' и т. д.)

Предупреждения: я не могу сейчас найти это в реальной системе Windows, я цитирую эти пункты по памяти.

Теперь эти параметры драйвера принтера могут быть установлены администратором, что сделало бы их значениями по умолчанию для всех пользователей.

Каждый пользователь, в свою очередь, также мог изменить эти настройки на другой режим.

Теперь вот моя теория:

  • когда вы выполняете свой тест из приложения Word, вы делаете это наверняка, войдя в систему как определенный пользователь, и настройки этого пользователя применяются к сгенерированному PostScript.

  • когда вы выполняете тест программно, вы можете оказаться в ситуации, когда этот процесс выполняется от имени другого, другого пользователя, у которого включены другие настройки.

Следовать по этому пути, безусловно, стоит, хотя бы для того, чтобы исключить такую ​​возможность...

person Kurt Pfeifle    schedule 29.05.2012
comment
Очень хорошее предложение. На самом деле я играл с параметрами загрузки в качестве программных шрифтов в самом драйвере, и мне не повезло. Хотя недавно мне немного повезло с моей проблемой. Смотрите мой ответ. спасибо - person Dan G; 31.05.2012