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)
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()