1

我有一个使用非标准字体的 word 文档。它不是嵌入式的,而是安装在有问题的机器上。在 Word 2010 中,当我在指定某个打印机驱动程序(HP Color LaserJet 2800 系列 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,
4

2 回答 2

1

在我看到这一点的某些系统上,重新启动服务器解决了我的问题。有时在安装真字体后,您似乎需要重新启动服务器。

事实上,在我的某些系统上,重新启动后,我确实看到字体被嵌入了。为什么通过 Word 应用程序做同样的事情不需要重新启动,但通过自动化却需要 - 我不知道。

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

于 2012-05-30T20:00:00.657 回答
1

您使用的打印机驱动程序有各种影响字体处理的设置。他们控制...

  • ...是否嵌入字体(“将字体下载到打印机”“使用打印机字体”)和
  • ...如果它是嵌入的,那​​么它是如何完成的('As TrueType''Convert to Outlines''使用替换表'等)

警告:我现在无法在真正的 Windows 系统上查找它,我从记忆中引用了这些要点。

现在这些打印机驱动程序设置可以由管理员设置,这将使它们成为所有用户的默认设置。

反过来,每个用户也可以将这些设置更改为不同的模式。

现在我的理论来了:

  • 当您从 Word 应用程序进行测试时,您肯定会在以特定用户身份登录时进行测试,并且该用户的设置将应用于生成的 PostScript。

  • 当您以编程方式进行测试时,您可能会遇到此过程作为另一个不同的用户运行的情况,该用户启用了不同的设置。

这条赛道当然值得关注,即使只是为了排除这种可能性......

于 2012-05-29T20:19:16.610 回答