1

私のコードは次のようなものです:

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)

出力の「サンプルテキスト」は、コンピュータでは「TimesNewRoman」ではなく「Sans」のままです。コンピュータに「TimesNewRoman」フォントがあることを確認しました。これはバグのようです。PyQtを使用しています。 v4.9.5。

編集:私はUbuntu12.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には影響しません。

4

1 に答える 1

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)

Times New Roman がシステムにインストールされていないため、Courier を使用しました。

于 2012-10-07T11:15:38.740 に答える