我的代码是这样的:
from PyQt4 import QtGui
doc = QtGui.QTextDocument()
d_font = QtGui.QFont('Times New Roman')
doc.setDefaultFont(d_font)
cur = QtGui.QTextCursor(doc)
cur.insertText('sample text')
writer = QtGui.QTextDocumentWriter()
writer.setFormat(writer.supportedDocumentFormats()[1])
writer.setFileName('CV')
writer.write(doc)
输出中的“示例文本”在我的计算机上仍然是“Sans”而不是“Times New Roman”。我确保我的计算机上有'Times New Roman'字体。我怀疑这是一个错误。我m使用PyQt v4.9.5。
编辑:我正在使用Ubuntu 12.04。我很确定PyQt4可以找到字体,因为以下代码可以工作:
d_font = QFont('Times New Roman')
char_fmt = QTextCharFormat()
char_fmt.setFont(d_font)
cur.insertText('Times New Roman', char_fmt)
在以odt / odt格式保存时,似乎并不支持所有格式化,但在打印到pdf时,一切都按预期工作。
from PyQt4.QtGui import *
import sys
doc = QTextDocument()
cur = QTextCursor(doc)
d_font = QFont('Times New Roman')
doc.setDefaultFont(d_font)
table_fmt = QTextTableFormat()
table_fmt.setColumnWidthConstraints([
QTextLength(QTextLength.PercentageLength, 30),
QTextLength(QTextLength.PercentageLength, 70)
])
table = cur.insertTable(5,2, table_fmt)
cur.insertText('sample text 1')
cur.movePosition(cur.NextCell)
cur.insertText('sample text 2')
# Print to a pdf file
# QPrinter: Must construct a QApplication before a QPaintDevice
app = QApplication(sys.argv)
printer = QPrinter(QPrinter.HighResolution)
printer.setOutputFormat(QPrinter.PdfFormat)
printer.setOutputFileName('sample.pdf')
# Save to file
writer = QTextDocumentWriter()
writer.setFormat(writer.supportedDocumentFormats()[1])
writer.setFileName('sample.odt')
writer.write(doc)
setDefaultfonts和setColumnWidthConstraints影响sample.pdf,但不影响sample.odt。
答案 0 :(得分:1)
我可以在使用PyQt4.8.5的Ubuntu Oneiric盒子上看到相同的行为。我不认为这是一个错误。书面文本的字体取决于用于写入文本的光标的字体。
以下内容对您有用:
from PyQt4 import QtGui
doc = QtGui.QTextDocument()
cur = QtGui.QTextCursor(doc)
d_font = QtGui.QFont('Courier')
c_format = QtGui.QTextCharFormat()
c_format.setFont(d_font)
cur.setCharFormat(c_format)
cur.insertText('sample text')
writer = QtGui.QTextDocumentWriter()
writer.setFormat(writer.supportedDocumentFormats()[1])
writer.setFileName('CV')
writer.write(doc)
我使用过Courier,因为我的系统上没有安装Times New Roman。