當今數(shù)字化時代,PDF文檔已成為我們傳遞和保存信息的重要形式之一。然而,有時候我們需要將這些PDF文檔內(nèi)容轉換為HTML網(wǎng)頁或圖片,以便更好地展示和傳播。使用首助編輯高手軟件,您可以輕松實現(xiàn)這一目標,批量轉換PDF文檔為HTML網(wǎng)頁和圖片。下面,讓我們一起來了解這款軟件的獨特功能及具體操作步驟。
一、專業(yè)且高效的PDF轉換工具
它是一款專門針對PDF文檔轉換等強大功能的專業(yè)軟件,它不僅具備高效穩(wěn)定的性能,還擁有豐富的功能和工具,可以滿足您各種不同的PDF轉換需求。通過這款軟件,您可以輕松將PDF文檔批量轉為HTML網(wǎng)頁和圖片,提高工作效率。
二、具體步驟:如何使用軟件實現(xiàn)PDF文檔批量轉為HTML網(wǎng)頁與圖片
1.安裝并啟動軟件,其中支持AI文章創(chuàng)作、魔法繪圖、圖片批量處理、文本批量操作,點擊“PDF工具箱”功能模塊。
2.如果要將文檔轉為html,就將格式轉換切換為“pdf轉html”,點擊“添加文件”按鈕,選擇需要轉換的pdf文檔,支持同時添加多個文件。
3.選擇新文件保存位置,支持保存在原文件相同位置,或者指定位置
4.如果選擇指定位置的話,可以進入“選擇新位置”窗口,選擇好文件的保存路徑,電腦的任意文件夾都行
5.點擊“開始轉換”按鈕,等待軟件自動完成轉換過程。等轉換完成,可以看到pdf文檔均被轉為html
6.如果想要將pdf轉為圖片,可以將格式轉換選項切換為“pdf轉圖片”,再去轉換,轉換后一組圖片一個文件夾自動分類保存著,雙擊文件件進去查看,pdf均被轉為圖片格式了
三、軟件的優(yōu)勢特點
高效穩(wěn)定:軟件具備高效穩(wěn)定的轉換性能,可以快速批量處理大量PDF文檔,保證轉換過程的流暢與穩(wěn)定。
多樣化的輸出格式:除了支持轉換為HTML網(wǎng)頁和圖片外,該軟件還支持其他多種格式,,滿足您多樣化的需求。
豐富的編輯功能:還提供了豐富的編輯工具和功能,如文本編輯、圖像處理、AI文章創(chuàng)作、魔法繪圖等等。
個性化設置:您可以右擊控制面板,其中支持多種軟件皮膚的選擇,以滿足特定的需求和喜好。
四、總結
軟件以其專業(yè)高效的功能和特點,為您的PDF文檔批量轉為HTML網(wǎng)頁和圖片提供了便捷的解決方案。通過簡單的操作步驟和強大的編輯功能,您可以輕松實現(xiàn)各種PDF文檔的轉換和處理。這款軟件不僅提高了您的工作效率和質(zhì)量,還為您的其他編輯和處理需求提供了全面的支持。如果您還在為繁瑣的PDF轉換過程煩惱,不妨嘗試一下首助編輯高手軟件,相信它會成為您工作中的得力助手。
篇文章我們講解了webpack中的loader,并且使用less、less-loader、css-loader、style-loader,將一個在js中import的less文件通過webpack將樣式打包到了頁面中,但是我們發(fā)現(xiàn),頁面中樣式確實是有了,但是頁面的樣式是通過style標簽的形式寫入到了頁面中,在實際開發(fā)中我們其實更傾向于使用link標簽導入樣式,這時候應該怎么做呢?
一、使用mini-css-extract-plugin插件
這個插件能將CSS提取為獨立的文件,對每個包含css的js文件都會創(chuàng)建一個CSS文件,支持按需加載css和sourceMap。
首先安裝插件
cnpm install mini-css-extract-plugin --save-dev
安裝完插件后其實就是設置了,下面是簡單的設置信息:
const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); module.exports = { mode:"development", entry:{ "common":"./src/js/common.js", "index":"./src/js/index.js", "login":"./src/js/login.js" }, output:{ filename:"js/[name].js", }, plugins:[ new CleanWebpackPlugin(), new HtmlWebpackPlugin({ template:'./src/index.html', filename:'index.html', chunks:["common","index"], hash:true }), new HtmlWebpackPlugin({ template:'./src/login.html', filename:'login.html', chunks:["common","login"], hash:true }), new MiniCssExtractPlugin({ filename:'css/[name].css', chunkFilename:'[id].css' }) ], module:{ rules:[ // { // test:/\.less$/, // use:[ // {loader:"style-loader"}, // {loader:"css-loader"}, // {loader:"less-loader"} // ] // } { test:/\.less$/, use:[ { loader:MiniCssExtractPlugin.loader }, "css-loader", "less-loader" ] }, ] } }
在webpack.config.js中我們首先定義插件,然后在plugins項中實例化插件(前面講到了插件需要安裝、定義、實例化三步),最后在module中定義處理less的規(guī)則,注釋掉的部分是講解loader的時候使用的,沒刪掉是要做個比較。
plugins項中mini-css-extract-plugin的實例化參數(shù)filename其實和output,html-webpack-plugin中定義的filename,完全一樣,就是給輸出文件起名字(有人可能會說不是在output中定義了嗎,其實webpack入口與輸出只是js,其他的是靠插件或者loader來處理,所用不要弄混)。
chunkFilename和html-webpack-plugin中的chunk類似,但是后面的[id].css不好理解(實在明白就這樣寫就行,固化的不會變),其實這個地方?jīng)]法寫實際具體的名字的,因為這是下面的loader中mini-css-extract-plugin插件內(nèi)部自己產(chǎn)生的。
再來看rules中的定義,我們?nèi)サ袅藄tyle-loader,因為我們不是要把樣式寫的頁面中,我們是希望link單獨的css文件。規(guī)則的意思就是遇到js中導入的以.less為結尾的文件使用less-loader來處理,然后轉換成css,然后讓css-loader處理樣式內(nèi)部的一些關于url,或者@import等一些css的問題,然后交給下一個loader,這個時候的loader變成了mini-css-extract-plugin中的loader了,這個laoder就是將css單獨提取出來放入頁面中,如下圖:
二、處理圖片資源
頁面中有三種圖片的引用方式,一種是html頁面中的 img標簽,一種是樣式中類似background:url(),一種是是腳本中創(chuàng)建圖片并插入頁面的。那么我們就將這三種方式都嘗試一下。項目目錄如下圖:
增加了三個圖片,其實就是一個圖片就是名字不一樣而已。然后分別修改less文件,js文件,html文件,各個文件內(nèi)容如下:
index.less
index.js
index.html
圖片資源的處理有很多l(xiāng)oader可以用,這里我們使用url-loader,對于頁面中的img標簽,我們使用html-withimg-loader。
安裝loader:
cnpm install url-loader html-withimg-loader --save-dev
然后配置webpack.config.js:
const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); module.exports = { mode:"development", entry:{ "common":"./src/js/common.js", "index":"./src/js/index.js", "login":"./src/js/login.js" }, output:{ filename:"js/[name].js", }, plugins:[ new CleanWebpackPlugin(), new HtmlWebpackPlugin({ template:'./src/index.html', filename:'index.html', chunks:["common","index"], hash:true }), new HtmlWebpackPlugin({ template:'./src/login.html', filename:'login.html', chunks:["common","login"], hash:true }), new MiniCssExtractPlugin({ filename:'css/[name].css', chunkFilename:'[id].css' }) ], module:{ rules:[ { test:/\.less$/, use:[ { loader:MiniCssExtractPlugin.loader, options:{ publicPath:"../" } }, "css-loader", "less-loader" ] }, { test:/\.(png|svg|jpg|gif)$/, use:[ { loader:'url-loader', options:{ limit:10240, name:"imgs/[name].[ext]", } } ] }, { test:/\.(htm|html)$/, use:["html-withimg-loader"] } ] } }
這里需要注意幾點:
第一、minicssextractplugin中添加了一個配置publicPath,為什么不把它放到output中?因為output中的pubicPath會影響所有路徑。這里面我們只是想讓css-loader處理完css后只解決樣式表里的路徑問題。
第二、url-loader,limit參數(shù),當圖片文件小于10K的時候,將文件轉換成dataUrl格式的圖片減少鏈接請求,name參數(shù)就是生成的文件名稱,當然前面的imgs是dist目錄下的imgs文件夾。
第三、遇到html或者htm結尾的文件時使用html-withimg-loader處理里面的圖片資源。
前端的模塊化開發(fā)不建議在頁面中直接使用圖片鏈接,要在js中導入圖片,但我感覺不太現(xiàn)實,畢竟img標簽不是擺設。
接下來運行 npx webpack命令,效果如下:
我們的圖片是50多K大小所以dist目錄下生成了imgs文件夾,并且將src中的圖片考了過來。
如果我們將limit的值改為102400后,圖片將直接轉換成dataurl格式,不在保存到dist目錄下,入下圖:
我們可以發(fā)現(xiàn)他們的鏈接地址是有區(qū)別的。
三、總結
我們分了五節(jié)內(nèi)容簡單的描述了webpack4最基本的一些知識點,主要包括:
1、安裝
前提條件安裝node
在項目中使用npm init -y,初始化項目,主要是創(chuàng)建了一個package.json的文件,用來記錄項目信息以及依賴關系。
為了避免插件或者loader下載不了,介紹了cnpm。
2、入口與輸出
webpack.config.jswebpack的配置文件
npx webpack運行webpack的命令
最基本的入口與輸出的概念
3、插件
clear-webpack-plugin 清除dist目錄的插件
html-webpack-plugin 簡化html創(chuàng)建的一個插件,并且關聯(lián)js
mini-css-extract-plugin 單獨提起css為文件的插件
4、加載器(loader)
model模式(開發(fā)模式,產(chǎn)品模式)
less-loader、css-loader、style-loader、url-loader、html-withimg-loader
這些知識點只是讓初學者快速的跑起來一個webpack,避免踩坑,在實際的項目中遇到問題時可以知道具體知道從哪方面入手來解決問題。
如果內(nèi)容中有錯誤,歡迎大家指正。謝謝!
兩天有個客戶需要把網(wǎng)頁轉為pdf,之前也沒開發(fā)過類似的工具,就在百度搜索了一波,主要有下面三種
在百度(我一般用必應)搜索“在線網(wǎng)頁轉pdf”就有很多可以做這個事的網(wǎng)站,免費的如
各種pdf的操作都有,免費使用,速度一般。
官網(wǎng)地址https://tools.pdf24.org/zh
PDF24 Tools
開源免費項目,使用golang寫的,提供在線轉
官網(wǎng)地址http://doctron.lampnick.com/
doctron在線體驗demo
還有挺多其他的,可以自己搜索,但是都不符合我的預期。
Doctron,這是我今天要介紹的重頭戲。
Doctron是基于Docker、無狀態(tài)、簡單、快速、高質(zhì)量的文檔轉換服務。目前支持將html轉為pdf、圖片(使用chrome(Chromium)瀏覽器內(nèi)核,保證轉換質(zhì)量)。支持PDF添加水印。
管他的,先把代碼下載下來再說
git clone https://gitcode.net/mirrors/lampnick/doctron.git
倉庫
運行
go build
./doctron --config conf/default.yaml
運行截圖
轉pdf,訪問http://127.0.0.1:8080/convert/html2pdf?u=doctron&p=lampnick&url=<url>,更換鏈接中的url為你需要轉換的url即可。
轉換效果
然后就可以寫程序去批量轉換需要的網(wǎng)頁了,但是我需要轉換的網(wǎng)頁有兩個需求
1、網(wǎng)站需要會員登錄,不然只能看得到一部分
2、需要把網(wǎng)站的頭和尾去掉的
這就為難我了,不會go語言啊,硬著頭皮搞了,肯定有個地方打開這個url的,就去代碼慢慢找,慢慢調(diào)試,功夫不負有心人,終于找到調(diào)用的地方了。
第一步:添加網(wǎng)站用戶登錄cookie
添加cookie之前
添加cookie之后
第二步:去掉網(wǎng)站頭尾
chromedp.Evaluate(`$('.header').css("display" , "none");
$('.btn-group').css("display" , "none");
$('.container .container:first').css("display" , "none");
$('.breadcrumb').css("display" , "none");
$('.footer').css("display" , "none")`, &ins.buf),
打開網(wǎng)頁后執(zhí)行js代碼把頭尾隱藏掉
第三步:程序化,批量自動生成pdf
public static void createPDF(String folder , String cl , String pdfFile, String urlhref) {
try {
String fileName = pdfFile.replace("/", ":");
String filePath = folder + fileName;
File srcFile = new File(filePath);
File newFolder = new File("/Volumes/disk2/myproject" + File.separator + cl);
File destFile = new File(newFolder, fileName);
if(destFile.exists()){
return;
}
if(srcFile.exists()){
//移動到對應目錄
if(!newFolder.exists()){
newFolder.mkdirs();
}
FileUtils.moveFile(srcFile , destFile);
return;
}
if(!newFolder.exists()){
newFolder.mkdirs();
}
String url = "http://127.0.0.1:8888/convert/html2pdf?u=doctron&p=lampnick&url="+urlhref;
HttpEntity<String> entity = new HttpEntity<String>(null, null);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<byte[]> bytes = restTemplate.exchange(url, HttpMethod.GET, entity, byte[].class);
if (bytes.getBody().length <= 100) {
if(urlList.containsKey(urlhref)){
Integer failCount = urlList.get(urlhref);
if(failCount > 3){
System.out.println("下載失敗:" + cl + " / " + pdfFile +" " + urlhref);
return;
}
failCount++;
urlList.put(urlhref , failCount);
}else{
urlList.put(urlhref , 1);
}
createPDF(folder , cl , pdfFile , urlhref);
}else{
if (!destFile.exists()) {
try {
destFile.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
}
try (FileOutputStream out = new FileOutputStream(destFile);) {
out.write(bytes.getBody(), 0, bytes.getBody().length);
out.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
最終成果:
文件夾分類存放
pdf文件
*請認真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。