8๊ฐ. PDF ๋ด๋ณด๋ด๊ธฐ

1. ๋ชฉํ
- ํ์ฌ QTextEdit ์ ์์ฑ๋ ๋ด์ฉ์ PDF ํ์ผ๋ก ๋ด๋ณด๋ด๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค
- QPrinter ๋ฅผ ์ผ๋ฐ ํ๋ฆฐํฐ๊ฐ ์๋๋ผ PDF ์ถ๋ ฅ ์ ์ฉ ์ฅ์น์ฒ๋ผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ตํ๋ค
- ํ์ผ ์ ์ฅ ๊ฒฝ๋ก๋ฅผ ๋ฐ๊ธฐ ์ํด QFileDialog, ํ์ฅ์ ์ฒ๋ฆฌ๋ฅผ ์ํด QFileInfo ๋ฅผ ํ์ฉํ๋ค
- ํ์ด์ฌ open ํจ์๋ก ํ์ผ์ ์ฐ์ง ์๊ณ Qt ์ถ๋ ฅ ์์คํ ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค
2. ์ ์ฒด ๋ก์ง
# mainwindow.py
. . .
class MainWindow(QMainWindow):
def __init__(self, parent=None):
. . .
self.ui.actionExport_PDF.triggered.connect(self.export_pdf)
. . .
def export_pdf(self):
fn, _ = QFileDialog.getSaveFileName(
self,
"Export PDF",
"",
"PDF Files (*.pdf);;All Files (*)"
)
if not fn:
return
info = QFileInfo(fn)
if info.suffix() == "":
fn += ".pdf"
printer = QPrinter(QPrinter.PrinterMode.HighResolution)
printer.setOutputFormat(QPrinter.OutputFormat.PdfFormat)
printer.setOutputFileName(fn)
document = self.editor.document()
document.print_(printer)
QMessageBox.information(self, "PDF ๋ด๋ณด๋ด๊ธฐ", f"PDF ํ์ผ๋ก ์ ์ฅ๋์์ต๋๋ค.\n\n{fn}")
# main.py
import sys
from PySide6.QtWidgets import QApplication
from mainwindow import MainWindow
if __name__ == "__main__":
app = QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec())
3. ํ์ํ import + ์ฃผ์ ์ค๋ช
๋์ผ
4. ๋ฉ๋ด ์ก์
๊ณผ ์ฌ๋กฏ ์ฐ๊ฒฐํ๊ธฐ (actionExport_PDF ↔ preview_dialog)

class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# QTextEdit ์ ์์ฃผ ์ ๊ทผํ๋ฏ๋ก ๋ณ์นญ์ ๋ง๋ค์ด ๋๋ค
self.editor = self.ui.textEdit
# 9.8 PDF ๋ด๋ณด๋ด๊ธฐ ๊ธฐ๋ฅ
# ํ์ผ ๋ฉ๋ด์ Export PDF ํญ๋ชฉ, ํด๋ฐ ์์ด์ฝ, ๋จ์ถํค๋
# ๋ชจ๋ actionExport_PDF ์ ์ฐ๊ฒฐ๋์ด ์๊ณ
# ์ฌ๊ธฐ์ ๊ทธ ์๊ทธ๋์ export_pdf ๋ฉ์๋์ ์ฐ๊ฒฐํ๋ค
self.ui.actionExport_PDF.triggered.connect(self.export_pdf)
5. PDF ๋ด๋ณด๋ด๊ธฐ ๊ธฐ๋ฅ ๊ตฌํ ํจ์

def export_pdf(self):
# 1 ์ ์ฅํ PDF ํ์ผ ์ด๋ฆ์ ์ฌ์ฉ์์๊ฒ ์
๋ ฅ๋ฐ๋ ์ ์ฅ ๋ํ์์๋ฅผ ์ฐ๋ค
# ๋ฐํ๊ฐ์ (ํ์ผ ๊ฒฝ๋ก ๋ฌธ์์ด, ์ ํ๋ ํํฐ ๋ฌธ์์ด) ์ด๋ค
fn, selected_filter = QFileDialog.getSaveFileName(
self,
"Export PDF", # ๋ํ์์ ์ ๋ชฉ
"", # ์ด๊ธฐ ๋๋ ํฐ๋ฆฌ (๋น์ ๋๋ฉด ๊ธฐ๋ณธ ๊ฒฝ๋ก ์ฌ์ฉ)
"PDF Files (*.pdf);;All Files (*)" # ํ์ผ ํ์ ํํฐ
)
# 2 ์ฌ์ฉ์๊ฐ ์ทจ์๋ฅผ ์ ํํ๋ฉด fn ์ด ๋น ๋ฌธ์์ด์ด๋ฏ๋ก ๋ฐ๋ก ํจ์ ์ข
๋ฃ
if not fn:
return
# 3 ์ฌ์ฉ์๊ฐ .pdf ๋ฅผ ์ง์ ์
๋ ฅํ์ง ์์ ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด
# QFileInfo ๋ก ํ์ฅ์๋ฅผ ๊ฒ์ฌํ๋ค
info = QFileInfo(fn)
if info.suffix() == "":
# ํ์ฅ์๊ฐ ์์ผ๋ฉด pdf ๋ฅผ ์๋์ผ๋ก ๋ง๋ถ์ธ๋ค
fn += ".pdf"
# 4 QPrinter ๋ฅผ ์์ฑํ๊ณ PDF ์ถ๋ ฅ ์ ์ฉ์ผ๋ก ์ค์ ํ๋ค
printer = QPrinter(QPrinter.PrinterMode.HighResolution)
# ์ถ๋ ฅ ํฌ๋งท์ PDF ๋ก ์ง์ ํ๋ฉด
# ์ค์ ํ๋ฆฐํฐ๋ก ๊ฐ์ง ์๊ณ ์ง์ ํ ํ์ผ๋ก ์ถ๋ ฅ๋๋ค
printer.setOutputFormat(QPrinter.OutputFormat.PdfFormat)
# ์ถ๋ ฅ ๋์ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์์์ ๊ฒฐ์ ํ fn ์ผ๋ก ์ง์ ํ๋ค
printer.setOutputFileName(fn)
# 5 QTextEdit ๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ QTextDocument ๊ฐ์ฒด๋ฅผ ์ป์ด์
# ๊ทธ ๋ฌธ์๋ฅผ QPrinter ์ ์ถ๋ ฅํ๋ค
document = self.editor.document()
document.print_(printer)
# 6 ์์
์ด ๋๋ฌ์์ ์ฌ์ฉ์์๊ฒ ์๋ ค ์ฃผ๋ ์ ๋ณด ๋ฉ์์ง ๋ฐ์ค
QMessageBox.information(self, "PDF ๋ด๋ณด๋ด๊ธฐ", f"PDF ํ์ผ๋ก ์ ์ฅ๋์์ต๋๋ค.\n\n{fn}")
์ฌ๊ธฐ์๋ ํ์ด์ฌ์ open ํจ์๋ก ํ์ผ์ ์ง์ ์ฐ์ง ์๊ณ
Qt ์ถ๋ ฅ ์์คํ
(QPrinter + QTextDocument.print_)๋ง ์ฌ์ฉํ๊ณ ์๋ค๋ ์ ์ด ์ค์ํฉ๋๋ค.
6. ์คํ ํ ์คํธ
7. ํ์ต ์ฃผ์ ํฌ์ธํธ
QPrinter ๋ฅผ PDF ์ถ๋ ฅ ์ฅ์น๋ก ์ฌ์ฉํ๋ ํจํด
- ์๋๋ ์ค์ ํ๋ฆฐํฐ ์ ์ด์ฉ ํด๋์ค์ง๋ง
OutputFormat ์ PdfFormat ์ผ๋ก ์ค์ ํ๋ฉด
ํ๋ฆฐํธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ ๊ฑฐ์ ๊ฐ์ ๊ฒฝ๋ก๋ก PDF ํ์ผ์ ์์ฑํ ์ ์๋ค
ํ์ผ ๊ฒฝ๋ก ์ ํ๊ณผ ํ์ฅ์ ๋ณด์
- QFileDialog.getSaveFileName ์ผ๋ก ์ฌ์ฉ์์๊ฒ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฅ๋ฐ๊ณ
- QFileInfo.suffix ๋ก ํ์ฅ์๋ฅผ ๊ฒ์ฌํด ์๋์ผ๋ก pdf ๋ฅผ ๋ถ์ด๋ ํจํด์
๋ค๋ฅธ ํ์ผ ํ์ ์ ์ฅ ๊ธฐ๋ฅ์์๋ ์ฌ์ฌ์ฉํ ์ ์๋ค
QTextEdit ์ QTextDocument ์ ์ญํ ๋ถ๋ฆฌ
- ํ๋ฉด์ ๋ณด์ด๋ ์์ ฏ์ QTextEdit ์ด๊ณ
์ค์ ๋ด์ฉ์ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด๋ QTextDocument ์ด๋ค - ํ๋ฆฐํธ๋ PDF ๋ด๋ณด๋ด๊ธฐ๋ document.print_ ์๊ฒ ๋งก๊ธด๋ค
๋๋ถ์ ํ์ด์ง ๋๋๊ธฐ, ์ค๋ฐ๊ฟ, ํฐํธ ๋ ๋๋ง ๋ฑ์ ์ง์ ๊ณ์ฐํ ํ์๊ฐ ์๋ค
ํ์ด์ฌ ํ์ผ ์ ์ถ๋ ฅ ๋์ Qt ์ถ๋ ฅ ์์คํ ํ์ฉ
- open ๊ณผ write ๋ก ์ง์ PDF ํ์ผ์ ๋ง๋๋ ๋์
QPrinter ์ Qt ์ ๋ ๋๋ง ์์ง์ ์ฌ์ฉํด
ํ๋ฉด๊ณผ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๋ค - ์ธ์ ๊ธฐ๋ฅ(9.6), ํ๋ฆฐํธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ(9.7), PDF ๋ด๋ณด๋ด๊ธฐ(9.8)๊ฐ
๋ชจ๋ QPrinter ๋ฅผ ์ค์ฌ์ผ๋ก ๊ฐ์ ์ถ๋ ฅ ๊ฒฝ๋ก๋ฅผ ๊ณต์ ํ๋ค๋ ์ ์ ๊ฐ์กฐํ๋ฉด ์ข๋ค
UI ์ค๊ณ์ ์ฝ๋ ๋ถ๋ฆฌ
- form.ui ์์ ๋ง๋ actionExport_PDF ๋ฅผ
ํ์ด์ฌ ์ฝ๋์์ export_pdf ์ฌ๋กฏ์ ์ฐ๊ฒฐํ๋ ๊ตฌ์กฐ๋
๋ค๋ฅธ ๋ฉ๋ด ํญ๋ชฉ๋ค๊ณผ ๋์ผํ ํจํด์ ๋ฐ๋ฅธ๋ค - ํ์๋ค์ด ์ด ํจํด์ ์ต์ํด์ง๋ฉด
์ดํ ํธ์ง ๊ธฐ๋ฅ, ๋ฌธ์ ์คํ์ผ, ๋ฌธ๋จ ์ ๋ ฌ, ํฐํธ/์ปฌ๋ฌ/๋์๋ง๊น์ง
๋์ผํ ๋ฐฉ์์ผ๋ก ํ์ฅํ ์ ์๋ค
๋จ๊ณ๋ณ ์์ฑ ํ์ผ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote




