python写一个GUI小程序:Word和PDF互转。但是有中文乱码以及图片乱码问题,求大佬解决!

该文章介绍了一个基于Tkinter的小程序,用于将Word文档转换为PDF或反之,通过处理编码问题确保文本在转换过程中的正确显示。
摘要由CSDN通过智能技术生成
#有中文和图片乱码问题

import tkinter as tk
from tkinter import filedialog, messagebox
from docx import Document
from reportlab.pdfgen import canvas
import fitz
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont

class FileConverterGUI:
    def __init__(self, root):
        self.root = root
        self.root.title("文件转换小程序")
        self.root.geometry("400x200+200+200")

        self.var = tk.IntVar()

        self.word_radio = tk.Radiobutton(self.root, text="Word转换PDF", variable=self.var, value=1)
        self.word_radio.pack()

        self.pdf_radio = tk.Radiobutton(self.root, text="PDF转换Word", variable=self.var, value=2)
        self.pdf_radio.pack()

        self.convert_button = tk.Button(self.root, text="开始转换", command=self.choose_file_type)
        self.convert_button.pack()

    def choose_file_type(self):
        file_type = self.var.get()

        if file_type == 1:  # Word to PDF
            input_file = filedialog.askopenfilename(title="选择Word文件:", filetypes=[("Word files", "*.docx")])
            if input_file:
                output_file = filedialog.asksaveasfilename(title="保存为PDF", defaultextension=".pdf", filetypes=[("PDF files", "*.pdf")])
                if output_file:
                    self.convert_to_pdf(input_file, output_file)
                    messagebox.showinfo("Success", "转换成功!")
        elif file_type == 2:  # PDF to Word
            input_file = filedialog.askopenfilename(title="选择PDF文件:", filetypes=[("PDF files", "*.pdf")])
            if input_file:
                output_file = filedialog.asksaveasfilename(title="保存为Word", defaultextension=".docx", filetypes=[("Word files", "*.docx")])
                if output_file:
                    self.convert_to_word(input_file, output_file)
                    messagebox.showinfo("Success", "转换成功!")

    def convert_to_pdf(self, input_docx, output_pdf):
        doc = Document(input_docx)
        pdf_canvas = canvas.Canvas(output_pdf)
        pdfmetrics.registerFont(UnicodeCIDFont("STSong-Light"))
        pdf_canvas.setFont("STSong-Light", 12)
        for para in doc.paragraphs:
            pdf_canvas.drawString(100, 800, para.text.encode('latin-1', 'replace').decode('latin-1'))

        pdf_canvas.save()

    def convert_to_word(self, input_pdf, output_docx):
        pdf_document = fitz.open(input_pdf)
        word_document = Document()

        for page_num in range(pdf_document.page_count):
            page = pdf_document[page_num]
            text = page.get_text("text").encode('latin-1', 'replace').decode('latin-1')
            word_document.add_paragraph(text)

        word_document.save(output_docx)

if __name__ == "__main__":
    root = tk.Tk()
    app = FileConverterGUI(root)
    root.mainloop()


  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值