【问题标题】:QTextDocument print to pdf and unicodeQTextDocument 打印到 pdf 和 unicode
【发布时间】:2015-11-15 00:27:32
【问题描述】:

我尝试从 QTextDocument 打印 pdf 文件。文档的内容由 setHtml() 设置。 简化示例:

QTextDocument document;
document.setHtml("<h1>My html \304\205</h1>"); // Octal encoded ą

QPrinter printer(QPrinter::HighResolution);
printer.setPageSize(QPrinter::A4);
printer.setOutputFormat(QPrinter::PdfFormat);

printer.setOutputFileName("cert.pdf");
document.print(&printer);

它在 Windows (msvc) 上无法正常工作。我得到带有“?”的pdf文件代替大多数波兰语字符。它适用于ubuntu。

在 windows 上它制作带有 tahoma 字体嵌入子集的 pdf。如何强制 QPrinter 或 QPrintEngine 嵌入此(或任何其他)字体的更多字符?

【问题讨论】:

  • setHtml 的电话非常可疑。请显式创建一个 QString 并使用 qDebug() 转储它,然后将其传递给 setHtml
  • 将此文本转储到 qDebug() 会在控制台中得到相同的结果(波兰字母中的问号)。这个八进制编码有问题吗?我从 uic 生成的文件中获取它,当我从代码中设置小部件文本时它可以工作。
  • 这是因为 const char * -> QString 转换可能无法满足您的需求(尤其是在 Qt 4 上)。你在用吗?改用 QString::fromUtf8 有什么不同吗?换成相应的 HTML-escape 怎么样?
  • 你是对的。谢谢佩佩。 fromUtf8、tr() 和 html 转义序列都有效。

标签: windows qt pdf


【解决方案1】:

正如 pepe 在 cmets 中建议的那样。我需要包装这个字符串之一:

  • QString::fromUtf8
  • tr()(在连接翻译部分的情况下)
  • 使用 html 转义序列(例如 ą 表示 ę)

我在程序中的原始 html 是从 tr() 部分构建的,但我忘了用八进制转义其中的一些。 (它适用于 gcc,而不适用于 msvc,即使使用带有 BOM 的 utf-8)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    • 2011-02-05
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多