def browser(self): """ 将内容复制到word,另存为html文件后,用浏览器打开查看 """ from pyxllib.file.docxlib import rebuild_document_by_word file = fire.Fire(rebuild_document_by_word, self.cmds['subinput'], 'browser') browser(file)
def xrefstr(self): """查看pdf文档的所有对象""" xrefstr = [] n = self.doc._getXrefLength() for i in range(1, n): # 注意下标实际要从1卡开始 # 可以边遍历边删除,不影响下标位置,因为其本质只是去除关联引用而已 xrefstr.append(self.doc._getXrefString(i)) browser('\n'.join(xrefstr))
def setToC(self): """设置书签目录 可以调层级、改名称、修改指向页码 """ toc = self.doc.getToC() toc[1][1] = '改标题名称' self.doc.setToC(toc) file = File('a.pdf', Dir.TEMP).to_str() self.doc.save(file, garbage=4) browser(file)
def browser(_self, opt='html'): if opt == 'html': data = _self.get_text('html') # html、xhtml 可以转网页,虽然排版相对来说还是会乱一点 data = ''.join(data) etag = get_etag(data) f = File(etag, Dir.TEMP, suffix='.html') f.write(data) browser(f) else: raise ValueError
def page_add_ele(self): """往页面添加元素 添加元素前后xrefstr的区别: https://paste.ubuntu.com/p/Dxhnzp4XJ2/ """ self.doc.select([0]) page = self.doc.loadPage(0) # page.insertText(fitz.Point(100, 200), 'test\ntest') file = File('a.pdf', Dir.TEMP).to_str() dprint(file) self.doc.save(file, garbage=4) browser(file)
def browser(doc, file_name=None, fmt='html', retain=False): """ 这个函数可能会导致原doc指向对象被销毁,建议要不追返回值doc继续使用 """ res = doc.save(file_name, fmt, retain=retain) if retain: outfile, doc = res else: outfile = res browser(outfile) return doc
def pagetext(self): """单页上的文本""" page = self.doc[0] # 获得页面上的所有文本,还支持参数: html,dict,xml,xhtml,json text = page.getText('text') dprint(text) # 获得页面上的所有文本(返回字典对象) textdict = page.getText('dict') textdict['blocks'] = textdict['blocks'][:-1] browser(pprint.pformat(textdict))
def browser(self, opt='pdf'): if opt == 'pdf': f = self.src_file browser(self.src_file) elif opt == 'html': ls = [] for i in range(self.page_count): page = self.load_page(i) ls.append(page.get_text('html')) data = '\n'.join(ls) etag = get_etag(data) f = File(etag, Dir.TEMP, suffix='.html') f.write(data) browser(f) else: raise ValueError(f'{opt}') return f
def _print_df_result(df, outfmt='text'): # subinput可以强制重置输出类型 # TODO argparser可以对str类型进行参数解析? # if 'browser' in kwargs['subinput']: # outfmt = 'browser' # elif 'html' in kwargs['subinput']: # outfmt = 'html' # elif 'text' in kwargs['subinput']: # outfmt = 'text' if outfmt == 'html': # content = df.to_html().replace('–', '-') # 很多app会出现一个utf8特殊的-,转gbk编码会出错+ try: # utools里按gbk会有很多编码问题,如果不能直接显示,就打开浏览器看 print(df.to_html()) except UnicodeEncodeError: browser(df) elif outfmt == 'browser': browser(df) else: with pd.option_context('display.max_colwidth', -1, 'display.max_columns', 20, 'display.width', 200): # 上下文控制格式 print(df)
def to_html(cls, pdf_file): """ 相比fitz,pdfminer能正常提取出下划线 文本重叠比fitz更严重,整体来说其实更不好用~~ """ from io import StringIO from pdfminer.high_level import extract_text_to_fp from pdfminer.layout import LAParams output_string = StringIO() with open(str(pdf_file)) as fin: extract_text_to_fp(fin, output_string, laparams=LAParams(), output_type='html', codec=None) # 打开浏览器查看重建的html效果 f = pdf_file.with_suffix('.html') f.write(output_string.getvalue()) browser(f)
def browser(_self): """注意,这里会去除掉合并单元格""" browser(pd.DataFrame(_self.values))
def browser(self): """ 转pdf,使用浏览器的查看效果 """ pdf_file = self.to_pdf() browser(pdf_file)
def rearrange_pages(self): """重新布局页面""" self.doc.select([0, 0, 1]) # 第1页展示两次后,再跟第2页 file = writefile(b'', 'a.pdf', root=Dir.TEMP, if_exists='replace') self.doc.save(file, garbage=4) # 注意要设置garbage,否则文档并没有实际删除内容压缩文件大小 browser(file)
def getToC(self): """获得书签目录""" toc = self.doc.getToC() browser(toc)