我有一个使用非标准字体的word文档。它不是嵌入式的,而是安装在有问题的计算机上。 在 Word 2010 中,当我在指定某个打印机驱动程序(HP Color LaserJet 2800 系列 PS(的同时将其打印到后脚本文件时,该字体可以很好地嵌入(子集(。 那是如果我从 Word 应用程序本身执行此操作。
如果我尝试使用 msword::_Document::P rintout 以编程方式执行此操作并指定相同的打印机驱动程序,则有问题的字体会被替换为其他字体。我知道在这两种情况下都使用相同的打印机驱动程序。为这两种方法生成的 .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,
在我看到这种情况的一些系统上,重新启动服务器解决了我的问题。似乎有时在安装真类型字体后,您需要重新启动服务器。
事实上,在我的一些系统上,重新启动后,我确实看到字体被嵌入了。为什么通过 Word 应用程序做同样的事情不需要重新启动,但通过自动化却需要 - 我不知道。
http://www.idautomation.com/kb/ttf-printing.html
您使用的打印机驱动程序具有影响字体处理的各种设置。他们控制...
- 。字体是否嵌入(">将字体下载到打印机">或"使用打印机字体"(和
- 。如果它是嵌入的,那么如何完成("作为 TrueType"、">转换为大纲"、">使用替换表">等(
警告:我现在无法在真正的Windows系统上查找它,我从内存中引用了这些观点。
现在,这些打印机驱动程序设置可以由管理员设置,这将使它们成为所有用户的默认设置。
反过来,每个用户也可以将这些设置更改为不同的模式。
现在我的理论来了:
-
当您从 Word 应用程序执行测试时,您肯定是在以特定用户身份登录时执行此操作,并且此用户的设置将应用于生成的 PostScript。
-
以编程方式执行测试时,可能会遇到以下情况:此过程以启用了不同设置的另一个不同用户身份运行。
这条轨道当然是值得的,即使只是为了排除这种可能性......