整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          Python數據展示 - 生成表格圖片

          Python數據展示 - 生成表格圖片

          前一篇文章介紹了推送信息到企業微信群里,其中一個項目推送的信息是使用Python自動生成的表格,本文來講講如何用Python生成表格圖片。

          選一個合適庫

          Python最大的優點就是第三方庫豐富,基本你要什么功能,都能找到別人實現好的庫,幾行代碼一調用就完事了。

          Pytable

          項目地址:https://github.com/HiroshiARAKI/pytable

          最先找到的是日本人開發的pytab庫,它是基于matplotlib來畫圖的,默認參數下生成的表格外觀一般般,而且顯示不了中文字符,字體也很小,效果不理想。

          我一開始還抱著死磕的心態,把這個庫的源碼下載下來魔改,改了字體和大小,生成的表格終于能看了,但排版還是會出各種奇奇怪怪的問題,比如文字溢出單元格之類的,心累……

          Plotly

          官網地址:https://plotly.com/

          后面找到了一個新的庫:plotly,官網的介紹是:

          The front end for ML and data science models

          專門為機器學習和數據科學設計的前端展示工具,單純拿來畫表格還算大材小用了~ 它是用網頁來渲染的,看例子效果還可以,我就換成這個plotly試試,嗯,真的可以,那就這個了。

          本文會分別介紹這兩個庫的使用,包括我魔改了pytab的地方。

          (不過還是推薦plotly,網頁渲染就是好)

          pytab

          首先安裝

          pip install pytab
          

          然后我把畫表格的代碼封裝成一個函數

          import uuid
          from typing import List, Dict, Optional, Tuple
          
          import pytab
          
          def draw_table(data: Dict[str, list]):
              """
              畫表格
          
              :param data: 數據格式 {
                  'a': [1.0, 2.1, 3.5, 4.0, 2.0, 1.0, 2.1, 3.5, 4.0, 2.0, ],
                  'b': [5.7, 6.1, 7.2, 8.3, 1.2, 5.7, 6.1, 7.2, 8.3, 1.2, ],
                  }
              :return:
              """
              # 設置字體,不然顯示不了中文
              pytab.plt.rcParams["font.sans-serif"]=["SimHei"]
              pytab.table( 
                  data=data,
                  data_loc='center',
                  # th_type='dark',
                  th_c='#aaaaee',  # 設置表頭背景顏色
                  td_c='gray',  # 設置數據行背景顏色
                  table_type='striped',
                  figsize=(len(data.keys()), int(len(data.values()) / len(data.keys()) + 1)),
                  # fontsize=18,
              )
          
              # pytab.show()
              temp_file=os.path.join(tempfile.gettempdir(), f'{uuid.uuid4().hex}.jpg')
              print(temp_file)
              pytab.save(temp_file)
              return temp_file
          

          按照注釋的這個數據格式,a和b是表頭列名,后面的數組是每一列的數據,很好理解

          {
              'a': [1.0, 2.1, 3.5, 4.0, 2.0, 1.0, 2.1, 3.5, 4.0, 2.0, ],
              'b': [5.7, 6.1, 7.2, 8.3, 1.2, 5.7, 6.1, 7.2, 8.3, 1.2, ],
          }
          

          畫出來的表格是這樣的

          再來試試中文顯示會怎么樣

          {
              '列1': [1.0, 2.1, 3.5, 4.0, 2.0, 1.0, 2.1, 3.5, 4.0, 2.0, ],
              '列2': [5.7, 6.1, 7.2, 8.3, 1.2, 5.7, 6.1, 7.2, 8.3, 1.2, ],
          }
          

          畫出來是這樣

          有點丑吧,勉強能看

          OK~ 關于pytab的就不多折騰了,畢竟上限就在這了

          接下來看看plotly

          plotly

          首先安裝

          pip install plotly
          

          話不多說,老規矩,我又是寫成一個函數

          import uuid
          from typing import List, Dict, Optional, Tuple
          
          import plotly.graph_objects as go
          import plotly.io as pio
          
          def draw_table(headers: List[str], cells: List[list]):
              """
              畫表
          
              :param headers: header=dict(values=['A Scores', 'B Scores'])
              :param cells: cells=dict(values=[[100, 90, 80, 90], [95, 85, 75, 95]])
              :return:
              """
              pio.kaleido.scope.default_width=len(','.join(headers)) * 20
              pio.kaleido.scope.default_height=250 + len(cells[0]) * 20
              fig=go.Figure(data=[go.Table(header=dict(values=headers), cells=dict(values=cells))])
              # fig.show()
              image_file=os.path.join(tempfile.gettempdir(), f'{uuid.uuid4().hex}.jpg')
              print('write image to', image_file)
              fig.write_image(image_file)
              return image_file
          

          這次的參數格式更前面的pytab不一樣,要傳兩個參數,都是數組類型

          第一個是表頭,第二個數組是單元格

          先來個例子試試

          draw_table(['列A', '列B'], [[100, 90, 80, 90], [95, 85, 75, 95]])
          

          然后把上面函數代碼里的fig.show()注釋去掉,可以看到生成的表格圖片效果

          運行后可以發現自動打開了瀏覽器,因為這個庫是使用網頁來渲染表格的,效果如下

          效果比前面那個pytab好一些,哈哈~

          文章來自https://www.cnblogs.com/deali/p/16122021.html

          們都知道,Word中的表格是一個非常有用的工具,可以讓我們在文檔中輕松添加和編輯各種數據。但有時候我們可能會遇到一個問題:當表格作為圖片插入時,我們就不能直接編輯它了。這可怎么辦呢?

          別擔心,我們有兩種方法來解決這個問題。第一種是手動重新創建表格,第二種是使用OCR工具。讓我們來看看這兩種方法的具體步驟。

          第一種方法:手動重新創建表格

          首先,我們需要將圖片作為參考,利用Word中的表格插入工具手工創建一個新表格。然后,通過鍵入的方式輸入圖片中的文字內容。這個方法需要一定的時間和耐心,但對于不太復雜的表格來說,應該還是比較容易的。

          第二種方法:使用OCR工具

          OCR是Optical Character Recognition的縮寫,即光學字符識別,是一種將圖像中的文字轉換為可編輯文本的技術。我們可以使用OCR工具來將圖片中的表格轉換為可編輯的格式。下面以金鳴表格文字識別大師為例,介紹具體步驟:

          1. 將Word文件另存為HTML格式,這樣Word中的圖片就會自動保存在一個單獨的、與HTML文件同名的文件夾中。

          2. 打開金鳴表格文字識別大師,將上一步保存的圖片的文件夾拖入到軟件的圖片列表中,也可以直接將word文檔拖入進去,它會自動轉為圖片,當然,您也可以像上圖那樣直接添加進去。

          3. 選擇表格識別模式,輸出格式選擇Word。

          4. 點擊提交識別按鈕,等待識別完成。

          5. 識別完成后,我們就可以得到一份可編輯的Word文檔了。在這個文檔中,我們可以自由地編輯表格里面的內容。

          以上就是兩種將圖片中的表格轉換為可編輯格式的方法。雖然手動重新創建表格需要較多時間和勞動力,但如果表格比較簡單,這個方法還是不錯的選擇。而使用OCR工具則會更加快捷方便,尤其適合處理大量圖片中的表格。無論您選擇哪種方法,都能夠讓表格變得更加靈活、易于編輯,提高工作效率。

          #表格#

          經常在一些報告業務場景,客戶常常要求可以實現導出html、pdf、xmind格式的報告文件,生成pdf格式文件,網絡上有很多開源的解決方案,但是生成html格式開源免費的解決方案很少,下面我給我大家介紹一下,如何解決這些問題

          pdf

          • iText,生成PDF文檔,還支持將XML、Html文件轉化為PDF文件;
          • Apache PDFBox,生成、合并PDF文檔;
          • docx4j,生成docx、pptx、xlsx文檔,支持轉換為PDF格式。

          這些框架都支持,這里不再詳細介紹,具體用戶可以在github上,進行查閱

          html

          可以用一些收費的框架,可以做到,比如Aspose,但是在這里介紹一個思路,去解決這個問題,大家肯定對導出excel表格很熟悉把,填充數據與表格,然后還可以設置標頭樣式與單元格樣式,那么我們可以按照這個思路,進行開發一個簡易版本的導出html文件。

          • 代碼邏輯
          @Test
              void listToHtmlTableTest() throws IOException {
                  List<String> headers=List.of("Name", "Age", "City");
                  List<List<String>> data=List.of(
                          List.of("gz", "25", "beijing"),
                          List.of("jelly", "30", "he ze")
                  );
                  //頭樣式
                  String headStyle="border: 1px solid #000000;";
                  //表格樣式
                  String bodyStyle="border: 1px solid #000000;";
                  //轉成html標簽
                  String htmlTable=HtmlTable.convertDataToHtml(headers, data,headStyle,bodyStyle);
                  //輸出html文件
                  String fileName="output.html";
                  try (BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(fileName))) {
                      bufferedWriter.write(htmlTable);
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
          
              }
          
           public static String convertDataToHtml(List<String> headers, List<List<String>> data,String headStyle,String bodyStyle) {
                  StringBuilder html=new StringBuilder();
                  html.append("<table>");
                  // table headers
                  html.append("<thead><tr>");
                  for (String header : headers) {
                      html.append("<th style=\"").append(headStyle).append("\">").append(header).append("</th>");
                  }
                  html.append("</tr></thead>");
          
                  // table body
                  html.append("<tbody>");
                  for (List<String> row : data) {
                      html.append("<tr>");
                      for (String cell : row) {
                          html.append("<td style=\"").append(bodyStyle).append("\">").append(cell).append("</td>");
                      }
                      html.append("</tr>");
                  }
                  html.append("</tbody>");
                  html.append("</table>");
                  return html.toString();
              }代碼運行效果
          • 代碼運行效果

          • 優化點

          可配置樣式

          導出封裝

          支持圖片

          支持模板導出

          xmind

          開源sdk:https://github.com/xmindltd/xmind-sdk-js

          需要前端實現,因為官方沒有提供java版本sdk

          每天不斷更,精彩不停止,明天見,我是行者

          記得留個關注、點贊、評論喲,讓我們一起去看星辰大海,品味代碼人生


          主站蜘蛛池模板: 无码人妻久久一区二区三区| 亚洲AV日韩综合一区尤物| 精品人体无码一区二区三区| 亚洲高清日韩精品第一区| 国产在线视频一区二区三区| 久久久久人妻精品一区 | 国产精品区AV一区二区| 在线观看国产一区二三区| 日韩av无码一区二区三区| 亚洲日韩一区精品射精| 日韩成人无码一区二区三区 | 日韩国产一区二区| 伊人色综合一区二区三区 | 亚洲色无码专区一区| 福利一区福利二区| 亚洲一区中文字幕在线电影网 | 精品国产毛片一区二区无码| 亚洲国产精品自在线一区二区| 蜜桃AV抽搐高潮一区二区| 中文字幕亚洲一区| 人妻精品无码一区二区三区| 中文国产成人精品久久一区| 精品一区二区三区在线成人 | 一区二区三区免费看| 日韩三级一区二区| 久久亚洲一区二区| 国产麻豆媒一区一区二区三区| 99久久国产精品免费一区二区| 日本高清一区二区三区| 久久久久无码国产精品一区| 日本免费一区尤物| 偷拍激情视频一区二区三区| 国产成人无码AV一区二区在线观看| 国产欧美色一区二区三区 | 精品国产一区二区三区无码| 国产高清一区二区三区四区| 在线成人综合色一区| 91精品福利一区二区三区野战| 99久久精品国产高清一区二区| 日韩一区二区三区不卡视频| 国产91久久精品一区二区|