2013-08-16 60 views
0

我相信問題僅在於QTextDocument對非標準字體的管理。儘管如此,我會概述我在做什麼,以防我忽略了其他代碼中的某些內容。加載非標準字體並將它們顯示在QTextDocument中

我試圖打印富文本(用qt支持的html標籤格式化的文本)和圖像的混合。輸出可以是PDF或物理打印輸出。

我使用QImage和QTextDocument來創建圖像和文本,然後QPainter和QPrinter實際上將結果以連貫的PDF,xps或打印輸出。該應用程序在Windows 7/8下運行。

我需要將字體更改爲非標準字體;在我的情況下,Myriad Pro Light和Myriad Pro Semibold。這些字體默認情況下不在窗口中,因此我需要首先將它們安裝在機器或應用程序中。

的代碼,剝去最無關緊要的部分,看起來像:

void MyClass::print(QPrinter* printer, MyPrintingSettings settings, QString myRichText) 
{ 
    // load my fancy font 
    QString fontPath = "MyriadPro-Light.otf"; 
    if(!QFile(fontPath).exists() || 
     (QFontDatabase::addApplicationFont(fontPath) == -1)) 
    { 
     //this does not happen. 
     qDebug() << "could not load font " << fontPath << " :-(\n"; 
     return; 
    } 

    // Set the painter and printer for accurate printing of both text 
    // and images, with correct re-scaling, regardless of user-selected 
    // printer properties. 
    printer->pageRect().moveTo(0,0);   
    QPainter m_painter(printer); 
    setWindowSize(settings); 
    setPrintedRectangle(settings); 

    //set the default font for the painter. 
    QFont font; 
    font.setFamily("Myriad Pro Light"); 
    font.setPointSize(settings.defaultFontSize); 
    m_painter.setFont(font); 

    //Create a document for printing. 
    QTextDocument document; 
    document.documentLayout()->setPaintDevice(printer); 
    document.setDefaultFont(font); 
    document.setDocumentMargin(0.0); 

    // I believe this is where the font fails to be correctly used. 
    document.setHtml(myRichText); 

    //drawing/printing. 
    document.drawContents(&m_painter); 
    m_painter.end(); 
} 

所觀察到的輸出取決於具體的富文本字符串:

  • 一個字符串,如:QString myRichText = "my text"中,默認字體被正確使用。這不是一個令人滿意的解決方案,因爲我需要更改富文本字符串中的字體。

  • 對於字符串:QString myRichText = "<span style="font-family:Myriad Pro Light;">my text</span>,字體未正確使用(使用tahoma代替)。

  • 在機器上「手動」安裝字體不會改變任何內容。

  • 獎金問題:我不知道這是否是一個相關的問題。如果我除了「Myriad Pro Light」之外還安裝了「Myriad Pro Semibold」,無論是手動整個機器還是通過QtApplication的代碼,似乎都會混淆兩者之間的名稱:Semibold總是用來代替光源,和<b>標籤導致切換到大膽的tahoma。

所以,長話短說:我如何獲得QTextDocument正確設置基於富文本的花哨的非標準字體?

回答

0

呃。這個問題只是與豐富的文本。

使用此:

QString myRichText = "<span style="font-family:'Myriad Pro Light';">my text</span> 

...工作要好得多。

使用此:

QString myRichText = "<span style="font-family:'Myriad Pro Light' font-weight=100;">my <b>text</b></span> 

...也解決之間的混淆名字 「光」 和 「半大膽」。

感謝所有看過此文的人。

相關問題