【问题标题】:Process not using fonts处理不使用字体
【发布时间】:2015-04-08 14:29:52
【问题描述】:

我正在尝试在由 exe 进程 (phantomjs) 生成的 PDF 中打印汉字。然而,这些字符以“?”结尾。该进程是在 C# 中的 Worker Role 中创建的。

在同一虚拟机上的 cmd 窗口中手动创建相同的进程时,一切正常。

但是,中文语言包是从可以手动成功创建 PDF 的同一管理员帐户安装的。

为了确保所有用户从语言包中看到相同的字体,我将设置添加到机器上的所有系统用户as described here

进程是这样​​从 C# 开始的

Process.Start(new ProcessStartInfo
{
    UseShellExecute = true,
    FileName = "phantomjs.exe",
    Arguments = "pdf.js"
});

那怎么可能,我的手动cmd-window进程正确使用了中文字体,而C#启动的进程却没有呢?

【问题讨论】:

  • 很难说不知道phantomjs 在做什么。但一般来说,不能指望那些不是为在非交互式环境中运行而设计的程序。如果您将其配置为在真实用户帐户中运行,特别是至少以交互方式登录一次的用户帐户,则可能值得检查它是否可以工作。
  • @HarryJohnston Phantomjs 是一个无头浏览器。我使用它的方式是渲染一个静态 html 页面,在 javascript 中添加内容,然后打印到 pdf 甚至是 png 屏幕截图。与使用常规浏览器相同,但不是交互式的。不同寻常的是,字体是在服务器端而不是客户端使用的。
  • 让我改写一下:如果不查看 phantomjs 中失败的特定代码,很难说。
  • 啊抱歉 :) phantomjs 运行的代码不太可能失败。打印正确,只是没有转换为问号的汉字。拉丁文本很好,也使用标准字体。个别汉字应该使用 SimSun 字体,但他们没有。我认为,在安装语言包时,用户会获得额外的注册表条目,这些条目会将这些字体添加到字体选择池中。
  • 无法渲染字体。我真的不明白为什么它需要用户注册表中的任何信息才能做到这一点;在 Windows 上,字体不是按用户安装的。但是暂时假设它正在用户注册表中查找某些内容,我最好的猜测是,这是在用户首次交互登录时添加到注册表中的内容。因此,请尝试在已交互登录的用户帐户的上下文中运行它。

标签: c# windows azure process phantomjs


【解决方案1】:

原来错误的字符编码会导致问号。 从内容输入到 HTML 文档和输出设置的所有内容都必须使用正确的编码(例如 UTF-8),然后才能正常工作。

【讨论】:

    猜你喜欢
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 2016-03-09
    • 2020-12-03
    • 1970-01-01
    • 2011-09-12
    • 2014-04-11
    相关资源
    最近更新 更多