tml2pdf
Selenium 通過使用 WebDriver 支持市場(chǎng)上所有主流瀏覽器的自動(dòng)化。 Webdriver 是一個(gè) API 和協(xié)議,它定義了一個(gè)語言中立的接口,用于控制 web 瀏覽器的行為。 每個(gè)瀏覽器都有一個(gè)特定的 WebDriver 實(shí)現(xiàn),稱為驅(qū)動(dòng)程序。 驅(qū)動(dòng)程序是負(fù)責(zé)委派給瀏覽器的組件,并處理與 Selenium 和瀏覽器之間的通信。
這種分離是有意識(shí)地努力讓瀏覽器供應(yīng)商為其瀏覽器的實(shí)現(xiàn)負(fù)責(zé)的一部分。 Selenium 在可能的情況下使用這些第三方驅(qū)動(dòng)程序, 但是在這些驅(qū)動(dòng)程序不存在的情況下,它也提供了由項(xiàng)目自己維護(hù)的驅(qū)動(dòng)程序。
Selenium 框架通過一個(gè)面向用戶的界面將所有這些部分連接在一起, 該界面允許透明地使用不同的瀏覽器后端, 從而實(shí)現(xiàn)跨瀏覽器和跨平臺(tái)自動(dòng)化。
# selenium 驅(qū)動(dòng)
https://selenium-python.readthedocs.io/installation.html#drivers
https://selenium-python.readthedocs.io/api.html
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.16.1</version>
</dependency>
// 獲取 java 版本
String version=System.getProperty("java.specification.version");
// 獲取系統(tǒng)類型
String platform=System.getProperty("os.name", "");
platform=platform.toLowerCase().contains("window") ? "win" : "linux";
// 當(dāng)前程序目錄
String current=System.getProperty("user.dir");
System.out.println("current:" + current);
// firefox 運(yùn)行參數(shù)配置
FirefoxOptions options=new FirefoxOptions();
// 無頭模式
options.addArguments("--headless");
// 最大化
options.addArguments("--start-maximized");
FirefoxDriver browser=new FirefoxDriver(options);
Path url=Paths.get(current, "..", "index.html");
System.out.println("url:" + url.toString());
// NOTE 要使用 file 協(xié)議
browser.get(String.format("file://%s", url.toString()));
// 打印設(shè)置
PrintOptions print=new PrintOptions();
Pdf pdf=browser.print(print);
// pdf base64 內(nèi)容
String content=pdf.getContent();
// 解碼內(nèi)容
Base64.Decoder decoder=Base64.getDecoder();
byte[] buffer=decoder.decode(content);
try {
// 將 byte 寫入文件
Path file=Paths.get(String.format("java%s_%s.pdf", version, platform));
Files.write(file, buffer);
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
browser.quit();
}
selenium/java11_linux.pdf · yjihrp/linux-html2pdf-demo - Gitee.com
selenium/java11_win.pdf · yjihrp/linux-html2pdf-demo - Gitee.com
測(cè)試結(jié)果
下一篇 6-LINUX HTML 轉(zhuǎn) PDF-selenium-python
器之心報(bào)道
項(xiàng)目作者:vinayak mehta參與:一鳴
從 PDF 表格中獲取數(shù)據(jù)是一項(xiàng)痛苦的工作。不久前,一位開發(fā)者提供了一個(gè)名為 Camelot 的工具,使用三行代碼就能從 PDF 文件中提取表格數(shù)據(jù)。
PDF 文件是一種非常常用的文件格式,通常用于正式的電子版文件。它能夠很好的將不同的排版格式固定下來,形成版面清晰且美觀的展示效果。然而,對(duì)于想要從 PDF 中提取信息的人們來說,PDF 是個(gè)噩夢(mèng),尤其是表格。
大量的學(xué)術(shù)報(bào)告、論文、分析文章都使用 PDF 展示其中的表格數(shù)據(jù),但是對(duì)于如果想要直接從表格中復(fù)制數(shù)據(jù)則會(huì)非常麻煩。不久前,有一位開發(fā)者提供了一個(gè)可從文字 PDF 中提取表格信息的工具——Camelot,能夠直接將大部分表格轉(zhuǎn)換為 Pandas 的 Dataframe。
Camelot 是什么
據(jù)項(xiàng)目介紹稱,Camelot 是一個(gè) Python 工具,用于將 PDF 文件中的表格數(shù)據(jù)提取出來。
具體而言,用戶可以像使用 Pandas 那樣打開 PDF 文件,然后利用這個(gè)工具提取表格數(shù)據(jù),最后再指定輸出的形式(如 csv 文件)。
代碼示例
項(xiàng)目提供的 PDF 文件如圖所示,假設(shè)用戶需要提取這些文字之間的表格 2-1 中的信息。
PDF 文件。我們需要提取表格 2-1。
使用 Camelot 提取表格數(shù)據(jù)的代碼如下:
>>> import camelot >>> tables=camelot.read_pdf('foo.pdf') #類似于Pandas打開CSV文件的形式 >>> tables[0].df # get a pandas DataFrame! >>> tables.export('foo.csv', f='csv', compress=True) # json, excel, html, sqlite,可指定輸出格式 >>> tables[0].to_csv('foo.csv') # to_json, to_excel, to_html, to_sqlite, 導(dǎo)出數(shù)據(jù)為文件 >>> tables <TableList n=1> >>> tables[0] <Table shape=(7, 7)> # 獲得輸出的格式 >>> tables[0].parsing_report { 'accuracy': 99.02, 'whitespace': 12.24, 'order': 1, 'page': 1 }
以下為輸出的結(jié)果,對(duì)于合并的單元格,Camelot 在抽取后做了空行處理,這是一個(gè)穩(wěn)妥的方法。
安裝方法
項(xiàng)目作者提供了三種安裝方法。首先,你可以使用 Conda 進(jìn)行安裝,這是最簡(jiǎn)單的。
conda install -c conda-forge camelot-py
最流行的安裝方法是使用 pip 安裝。
pip install camelot-py[cv]
還可以從項(xiàng)目中克隆代碼,并使用源碼安裝。
ompdf是一個(gè)可以將HTML生成PD并保留樣式效果的PHP第三方擴(kuò)展。
下面就一步步講解如何使用:
一、通過composer安裝
composer require dompdf/dompdf
安裝過程
二 、編寫測(cè)試代碼
(1)引用autoload.php
include 'vendor/autoload.php';
(2)實(shí)例化Dompdf
$dompdf=new \Dompdf\Dompdf();
(3)加載HTML
$dompdf->loadHtml($html); //$html 為HTML字符串
(4)設(shè)置紙張和方向
$dompdf->setPaper('A4', 'landscape'); //紙張大小和紙張方向
(5)生成PDF并下載
$dompdf->render();
$dompdf->stream('數(shù)據(jù)字典.pdf');
三、導(dǎo)出PDF測(cè)試,發(fā)現(xiàn)中文亂碼了
導(dǎo)出PDF發(fā)現(xiàn)中文亂碼了
四、解決中文亂了問題
(1)下載支持中文的字體包放到根目錄下(和vendor目錄同級(jí)),這里演示使用的是阿里巴巴的普惠字體(字體格式是ttf的,小編原先下載使用的字體格式是otf格式的無效)
(2)下載dompdf字體安裝工具解壓到根目錄(和vendor目錄同級(jí))
下載地址:https://github.com/dompdf/utils
(3)在命令行(CMD定位到根目錄)下執(zhí)行命令
php load_font.php "puhui" Alibaba-PuHuiTi-Light.ttf
執(zhí)行成功后在路徑(vendor\dompdf\dompdf\lib\fonts)下就會(huì)出現(xiàn)剛才的字體
(4)在樣式文件中指定使用剛才安裝的字體
body{font-family:puhui;}
(5)再次導(dǎo)出PDF測(cè)試成功
亂碼問題解決
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。