2015-08-21 84 views
0

我嘗試從QTextDocument打印pdf文件。文檔內容由setHtml()設置。 簡化示例:QTextDocument打印爲pdf和unicode

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。

在窗口它使pdf與tahoma字體嵌入子集。如何強制QPrinter或QPrintEngine從此(或任何其他)字體嵌入更多字符?

+0

'setHtml'調用*非常*可疑。請明確創建一個QString,然後使用qDebug()將其轉儲,然後將其傳遞給'setHtml'。 – peppe

+0

將此文本轉儲到qDebug()在控制檯中給出了相同的結果(波蘭語字母中的問號)。 這個八進制編碼是可疑的?我從uic生成的文件中獲取它,並且它在我從代碼設置小部件文本時起作用。 – Dorian

+0

這是因爲'const char *' - >'QString'轉換可能無法達到你想要的效果(特別是在Qt 4上)。你在使用它嗎?是否使用QString :: fromUtf8代替?如何使用相應的HTML轉義? – peppe

回答

0

正如pepe在評論中提出的那樣。我需要來包裝這個字符串之一:

  • 的QString :: fromUtf8
  • TR()(加盟翻譯部分的情況下)
  • 使用html轉義序列
  • (例如&#261針對E)。

我在程序中的原始HTML是從tr()部件構建的,但我忘了八進制轉義其中的一些。 (這工作在海灣合作委員會,而不是在msvc,甚至與utf-8與BOM)