예제 #1
0
 def addItems(self, parent, items):
     pub = JPPub()
     for r in items:
         item = QTreeWidgetItem(parent)
         item.setText(0, r["fMenuText"])
         item.setIcon(0, QIcon(pub.getIcoPath(r["fIcon"])))
         item.jpData = r
         item.FullPath = (parent.FullPath + '\\' + r["fMenuText"])
         lst = [l for l in self.items if l["fParentId"] == r["fNMID"]]
         self.addItems(item, lst)
         item.setExpanded(1)
예제 #2
0
class MyThreadReadAddition(QThread):
    """加载附件图片的线程类, 每生成一个对象,都通过信号把数据发出
    本线程只负责从已经加载完成的数据字典中的一行生成图片对象
    图片的集合应由主界面维护
    """
    onePixmCreated = pyqtSignal(picInfo)
    oneFileLoaded = pyqtSignal(str)

    def __init__(self, addtionalData):
        super().__init__()
        # self.cachePath = os.path.join(os.getcwd(), "cache")
        # if not os.path.exists(self.cachePath):
        #     os.mkdir(self.cachePath)
        self.addtionalData = addtionalData
        self.defHeight = 200
        self.pub = JPPub()
        cfg = ConfigInfo()
        self.maxViewPdfPages = int(cfg.viewpdf.maxpages)

    def render_pdf_page(self, page_data, r, i):
        imageFormat = QImage.Format_RGB888
        pagePixmap1 = page_data.getPixmap(matrix=fitz.Matrix(1, 1),
                                          alpha=False)
        pageQImage1 = QImage(pagePixmap1.samples, pagePixmap1.width,
                             pagePixmap1.height, pagePixmap1.stride,
                             imageFormat)
        # 生成 pixmap 对象
        QPixmapCache.clear()
        tempPixmap = QPixmap()
        tempPixmap.convertFromImage(pageQImage1)
        # fn = os.path.join(self.cachePath, "{}_{}.jpg".format(r.md5FileName, i))
        # tempPixmap.save(fn, "JPG")
        temp = picInfo()
        temp.md5FileName = r.md5FileName
        temp.pageIndex = i
        temp.Md5FileIndex = r.file_index
        temp.pageIndex = i
        temp.originalName = r.original_name
        a, b = os.path.splitext(r.original_name)
        temp.icoText = "P{} {}".format(i, a)
        # temp.viewPicPath = fn
        temp.viewPixmap = tempPixmap
        return temp

    def createEveryPixmapFromFile(self):
        for i, r in enumerate(self.addtionalData):
            if r.deleted:
                continue
            #################################
            # 找到要显示文件的真实路径(数据库中已经存在的和新添加的不同,用于防止用户重复添加同一文件)

            filePath = r.md5FilePath if (r.archives_pk) else r.original_path
            if os.path.exists(filePath):
                QPixmapCache.clear()
                expName = r.file_type.upper()
                docDic = {
                    "XLS": 0,
                    "XLSX": 0,
                    "DOC": 1,
                    "DOCX": 1,
                    "ZIP": 2,
                    "RAR": 3
                }
                icoLst = ["excel.png", "word.png", "zip.png", "rar.png"]
                if expName in docDic.keys():
                    pi = picInfo()
                    icoName = icoLst[docDic[expName]]
                    pi.iconPath = self.pub.getIcoPath(icoName)
                    pi.originalPath = filePath
                    pi.originalName = r.original_name
                    pi.md5FileName = r.md5FileName
                    pi.viewPixmap_Ico = QPixmap(pi.iconPath)
                    self.onePixmCreated.emit(pi)
                elif expName in ["JPG", "PNG", "BMP"]:
                    pi = picInfo()
                    pi.originalPath = r.original_path
                    pi.viewPicPath = r.original_path
                    pi.originalName = r.original_name
                    pi.md5FileName = r.md5FileName
                    pi.viewPicPath = r.md5FilePath
                    pi.viewPixmap = QPixmap(r.md5FilePath)
                    self.onePixmCreated.emit(pi)
                elif expName == "PDF":
                    doc = fitz.open(filePath)
                    # 当PDF页数过多时,只显示图标
                    if doc.pageCount > self.maxViewPdfPages:
                        pi = picInfo()
                        pi.iconPath = self.pub.getIcoPath('pdf_2.png')
                        pi.originalPath = filePath
                        pi.originalName = r.original_name
                        pi.md5FileName = r.md5FileName
                        pi.viewPixmap_Ico = QPixmap(pi.iconPath)
                        self.onePixmCreated.emit(pi)
                    else:
                        for i in range(doc.pageCount):
                            pageData = doc.loadPage(i)
                            pi = self.render_pdf_page(pageData, r, i)
                            self.onePixmCreated.emit(pi)
                    doc.close()
                    del doc
            else:
                logging.getLogger().error("文件没有找到:{}".format(filePath))
            self.oneFileLoaded.emit(r.original_name)

    def run(self):
        self.createEveryPixmapFromFile()