要使用的是wkhtmltopdf的Python封裝——pdfkit
安裝
1. Install python-pdfkit:
$ pip install pdfkit
2. Install wkhtmltopdf:
$ sudo apt-get install wkhtmltopdf
sudo yum intsall wkhtmltopdf
brew install Caskroom/cask/wkhtmltopdf
使用
一個簡單的例子:
import pdfkit
pdfkit.from_url('http://google.com', 'out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
pdfkit.from_string('Hello!', 'out.pdf')
你也可以傳遞一個url或者文件名列表:
pdfkit.from_url(['google.com', 'yandex.ru', 'engadget.com'], 'out.pdf')
pdfkit.from_file(['file1.html', 'file2.html'], 'out.pdf')
也可以傳遞一個打開的文件:
with open('file.html') as f:
pdfkit.from_file(f, 'out.pdf')
如果你想對生成的PDF作進一步處理, 你可以將其讀取到一個變量中:
# 設置輸出文件為False,將結果賦給一個變量
pdf = pdfkit.from_url('http://google.com', False)
你可以制定所有的 wkhtmltopdf 選項 http://wkhtmltopdf.org/usage/wkhtmltopdf.txt. 你可以移除選項名字前面的 '--' .如果選項沒有值, 使用None, False or * 作為字典值:
options = {
'page-size': 'Letter',
'margin-top': '0.75in',
'margin-right': '0.75in',
'margin-bottom': '0.75in',
'margin-left': '0.75in',
'encoding': "UTF-8",
'no-outline': None
}
pdfkit.from_url('http://google.com', 'out.pdf', options=options)
默認情況下, PDFKit 將會顯示所有的 wkhtmltopdf 輸出. 如果你不想看到這些信息,你需要傳遞一個 quiet 選項:
options = {
'quiet': ''
}
pdfkit.from_url('google.com', 'out.pdf', options=options)
由于wkhtmltopdf的命令語法 , TOC 和 Cover 選項必須分開指定:
toc = {
'xsl-style-sheet': 'toc.xsl'
}
cover = 'cover.html'
pdfkit.from_file('file.html', options=options, toc=toc, cover=cover)
當你轉換文件、或字符串的時候,你可以通過css選項指定擴展的 CSS 文件。
# 單個 CSS 文件
css = 'example.css'
pdfkit.from_file('file.html', options=options, css=css)
# Multiple CSS files
css = ['example.css', 'example2.css']
pdfkit.from_file('file.html', options=options, css=css)
你也可以通過你的HTML中的meta tags傳遞任意選項:
body = """
<html>
<head>
<meta name="pdfkit-page-size" content="Legal"/>
<meta name="pdfkit-orientation" content="Landscape"/>
</head>
Hello World!
</html>
"""
pdfkit.from_string(body, 'out.pdf') #with --page-size=Legal and --orientation=Landscape
配置
每個API調用都有一個可選的參數。這應該是pdfkit.configuration()API 調用的一個實例. 采用configuration 選項作為初始化參數。可用的選項有:
示例 :針對wkhtmltopdf不在系統路徑中(不在$PATH里面)
PATH里面):
config = pdfkit.configuration(wkhtmltopdf='/opt/bin/wkhtmltopdf'))
pdfkit.from_string(html_string, output_file, configuration=config)
問題
IOError:'No wkhtmltopdf executable found':
確保 wkhtmltopdf 在你的系統路徑中(PATH), 會通過 configuration進行了配置 (詳情看上文描述)。 在Windows系統中使用where wkhtmltopdf命令 或 在 linux系統中使用 which wkhtmltopdf 會返回 wkhtmltopdf二進制可執行文件所在的確切位置.
如果出現這個錯誤意味著 PDFKit不能處理一個輸入。你可以嘗試直接在錯誤信息后面直接運行一個命令來查看是什么導致了這個錯誤 (某些版本的 wkhtmltopdf會因為段錯誤導致處理失敗)
確保兩項:
1)、你的系統中有中文字體
2)、在html中加入
下面是我隨便寫的一個HTML表格:
<html>
<head><meta charset="UTF-8"></head>
<body>
<table width="400" border="1">
<tr>
<th align="left">Item....</th>
<th align="right">1</th>
</tr>
<tr>
<td align="left">衣服</td>
<td align="right">1.10</td>
</tr>
<tr>
<td align="left">化妝品</td>
<td align="right">.00</td>
</tr>
<tr>
<td align="left">食物</td>
<td align="right">0.40</td>
</tr>
<tr>
<th align="left">tOTAL</th>
<th align="right">01.50</th>
</tr>
</table>
</body>
</html>
下面是生成的PDF截圖
習目標
將指定的純文本文檔轉換為HTML文件。
實現目標
在瀏覽器中打開最終生成的HMTL文件,呈現下圖的樣式。
關鍵內容
python數據挖掘,python爬蟲
練習這個項目,最好具備一些HTML基礎。
如果沒有接觸過,這里我做一下簡單的介紹。
HTML文件是我們常見的網頁文件,其中包含HTML源代碼。
HTML源代碼由HTML標簽組成,這些標簽往往是成對出現(個別除外)。
一個簡單的HTML示例代碼:
<html>
<head>
<meta charset="gbk">
<title>...</title>
</head>
<body>
<h1>一級標題</h1>
<p>我是段落內容。</p>
</body>
</html>
上方的代碼復制到一個文本文檔中,并將文件后綴改為“.html”,在瀏覽器中打開即可看到效果。
這里我們看到了一些標簽:
另外,在這個案例中我們還會用到一些標簽。
案例分析
當我們了解了HTML的結構和各種標簽的作用,接下來,我們分析一下,如何進行文檔與HTML的轉換。
1、原始文檔中的標題都是大寫英文字母開頭和英文字母結尾。
2、文檔中除了標題,就是段落和列表,段落和列表的區別是:列表中包含列表項。
3、段落中存在換行。
4、列表項(以“●”開頭)需要放置于列表中。
3、文檔中“*”之間的內容需要加重顯示。
實現過程
一、定義處理原始文檔內容的模塊(util.py)
1、定義一個生成器“lines”,能夠為原始文檔結尾添加空行。
def lines(file):
for line in file:
yield line # 生成文件的每一行內容
yield '\n' # 為文件末尾添加空行,保證最后添加到block的行能夠被生成。
為什么需要在文檔末尾添加空行,可以看下方生成器“blocks”代碼中的注釋進行理解。
2、定義一個生成器“blocks”,對原始文檔內容進行讀取,當讀取到空行,將已讀取的內容連接為內容塊并生成。
def blocks(file):
block = []
for line in lines(file):
if line.strip(): # 如果讀取的行不是空行
block.append(line) # 添加行內容到列表
elif block: # 如果讀取空行(如果文件末尾不是空行,則不會執行下方語句塊,導致上方語句塊最后一次添加的內容無法生成。)
yield ''.join(block).strip() # 連接列表中所有的行內容
block = []
二、定義處理文檔的主程序模塊(main01.py)
在這個模塊中,我們需要導入一些需要使用的內置模塊。
以下是主程序的具體代碼,大家可以通過注釋理解整個處理過程。
import sys, re
from util import *
print('<html><head><meta charset="gbk"><title>doc.txt</title></head><body>') # 添加HTML基本標簽
blocks = blocks(sys.stdin) # 獲取系統標準輸入
for block in blocks: # 遍歷文件內容
block = re.sub('\*(.+)\*', '<strong>\1</strong>', block) # 替換內容塊中兩個星號間的內容為加重樣式
block = re.sub(r'\n *- *(.+)', '\n<li>\1</li>', block) # 替換內容塊中以“-”開頭的內容為列表項
block = re.sub(r'([^:>])\n', '\1<br/>\n', block) # 替換內容塊中換行符“\n”為換行標簽
if re.match(r'(^[A-Z][\w ]+[A-Za-z]$)', block): # 匹配大寫字母開頭和以字母結尾的內容
print('<h1>' + block + '</h1>') # 添加一級標題標簽
elif '<li>' in block: # 如果內容塊包含列表項
print('<ul>' + block + '</ul>') # 添加項目列表標簽
else:
print('<p>' + block + '</p>') # 添加段落標簽
print('</body></html>') # 添加HTML結束標簽
當我們完成以上代碼的編寫,就可以通過命令行終端執行代碼。
python main01.py <doc.txt> doc.html
通過以上命令就能夠讓主程序讀取項目文件夾下的“doc.txt”,并且經過處理后輸出文件“doc.html”。
這個文件會自動出現在PyCharm左側文件列表中,在文件名稱上點擊鼠標右鍵,選擇瀏覽器中打開(Open in Browser),就能夠使用指定的瀏覽器進行瀏覽了。
在下一篇練習項目的教程中,我們將通過另外一種復雜的,但是具有很好擴展性的方式重新實現這個項目。
在很多人都熱衷于玩手機,甚至于有些人用手機就可以實現辦公了,那么如果有時候出門在外,身邊沒有電腦,但是又急需要轉換PDF文件的時候該怎么辦?不要著急,你可以試試這個神器——迅捷PDF轉換器! 沒錯,用手機就可以!
迅捷PDF轉換器是一款簡單且實用的辦公軟件。可以一鍵完成PDF文件和OFFice、HTML、TXT和圖片文檔之間的格式轉換,感受免費且快捷的轉換,讓你不再為PDF格式而憂愁。
那要怎么給PDF轉換格式呢?今天小編給大家舉兩個栗子~
第一步:點擊【PDF轉換】的【PDF轉換Word】進入轉換頁面,選擇需要轉換的文件,選擇完畢,點擊【確定轉換】。
這是原來的PDF文件:
第二步:PDF文件開始轉換,然后只需要幾秒,即可轉換完成。
第三步:轉換完成,點擊【查看文檔】,就可以發現變成Word文檔格式并且可以編輯啦!
第一步:點擊【轉為PDF】的【EXCEL轉PDF】,選擇文件,然后點擊【確定轉換】。
第二步:同樣也是要稍等幾秒。然后顯示轉換完成后,即可打開查看PDF文檔啦!
這是一開始的Excel文件:
轉換為PDF之后:
是不是很神奇?而且整個過程非常快哦~只需要很短的時間就可以完成PDF的格式轉換哦!除了PDF的轉換,還有其他有趣的小功能呢?
■拍照識別文字:可以掃描圖片的文字,將其提取出來,指尖上的掃描儀!
■拍照翻譯:可以通過拍照來翻譯,支持中英文互換翻譯哦,準確率超高!
■WIFI傳輸:可以在WIFI狀態下在線傳輸文件,不消耗你的流量!
■PDF壓縮:可以在線給你的PDF瘦身,節省空間!
怎么樣?這個小小的APP沒想到這么全能?你是否心動了呢?心動不如行為,自己試一試唄!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。