工作中,我們經(jīng)常會(huì)處理很多種類的文件,相信大多數(shù)人處理最多的應(yīng)該是pdf文件吧?我們經(jīng)常使用pdf文件的主要原因就是pdf比較便于查看,也易于傳輸,而且它的體積很小,不會(huì)特別占用設(shè)備的內(nèi)存。但是pdf文件也有一些缺點(diǎn),它不支持在線編輯,不能夠仔細(xì)查看文件中的圖片,所以我們?cè)诠ぷ髦杏袝r(shí)候需要將pdf轉(zhuǎn)成html格式的文件。但是我們怎么把pdf轉(zhuǎn)換成html格式呢?小編今天跟大家分享兩個(gè)超級(jí)簡(jiǎn)單的方法,大家趕快來(lái)看一看吧!
怎么把pdf轉(zhuǎn)換成html格式?
方法一、小圓象PDF轉(zhuǎn)換器
小圓象PDF轉(zhuǎn)換器是一款非常專業(yè)的PDF轉(zhuǎn)換軟件,它不僅支持PDF轉(zhuǎn)Word、Excel、PPT、Html等格式的文件,還有一些PDF小工具,像是PDF加密/解密、PDF合并/拆分、PDF壓縮等,都能幫助學(xué)習(xí)黨和工作黨更好的處理文件。它對(duì)文件的識(shí)別也很精確,轉(zhuǎn)換后文件準(zhǔn)確率很高。同時(shí)它的安全性也很高,不會(huì)泄露用戶任何的隱私。
第一步:進(jìn)入小圓象PDF轉(zhuǎn)換器官網(wǎng)(網(wǎng)址:https://www.xiaoyuanxiang.cn/),點(diǎn)擊客戶端下載,軟件安裝完畢后,打開(kāi)軟件,點(diǎn)擊第一個(gè)功能——PDF轉(zhuǎn)文件。
第二步:在上方各種功能中,選擇——PDF轉(zhuǎn)Html,隨后將文件添加到虛線框內(nèi),等待文件添加完畢,調(diào)整輸出目錄,最后點(diǎn)擊右下角——開(kāi)始轉(zhuǎn)換,就可以轉(zhuǎn)換完成了!
方法二、PDF 24 Tools
這款軟件功能非常豐富,一共有24種功能,每種都很實(shí)用,頁(yè)面很有設(shè)計(jì)感,除了可以將PDF轉(zhuǎn)換為其他格式文件以外,還支持PDF轉(zhuǎn)圖像、從PDF文件中讀取圖像、PDF旋轉(zhuǎn)、刪除PDF頁(yè)面等相關(guān)操作。它轉(zhuǎn)換文件的成功率也比較高,轉(zhuǎn)換后的文件內(nèi)容大致是一樣的,比較適合日常使用。不過(guò)它也有一個(gè)小缺點(diǎn),那就是它的網(wǎng)頁(yè)上會(huì)有一些小廣告。
第一步:進(jìn)入軟件首頁(yè),在眾多功能中找到第一行最后一個(gè)功能——PDF轉(zhuǎn)換器,點(diǎn)擊進(jìn)入下一頁(yè)面。
第二步:選擇第二項(xiàng)——將PDF轉(zhuǎn)換成…,進(jìn)入下一步。
第三步:將本地文件上傳成功后,點(diǎn)擊左下角——格式,選擇HTML格式,再點(diǎn)擊右下角——轉(zhuǎn)換,等待片刻就可以轉(zhuǎn)換成功。
看完這篇文章,大家知道該怎么把pdf轉(zhuǎn)換成html格式了吧?就個(gè)人而言,小編還是更喜歡小圓象PDF轉(zhuǎn)化器一些,它的頁(yè)面很簡(jiǎn)潔,沒(méi)有小廣告,而且操作會(huì)更簡(jiǎn)單些,不知道大家喜歡哪種方法呢?
html 轉(zhuǎn) pdf 技術(shù)方案調(diào)研:從入門(mén)到精通的全方位解析
**引言:**
在Web開(kāi)發(fā)中,有時(shí)我們需要將HTML內(nèi)容轉(zhuǎn)換為PDF格式,以滿足打印、下載或郵件發(fā)送的需求。本文將深入調(diào)研并解析目前主流的HTML轉(zhuǎn)PDF技術(shù)方案,涵蓋從原生API到第三方庫(kù)的多種實(shí)現(xiàn)方式,讓您全面了解各種方案的優(yōu)劣,并通過(guò)具體的代碼實(shí)例幫助您快速掌握實(shí)現(xiàn)技巧。
---
### **一、原生API:打印預(yù)覽生成PDF**
**標(biāo)題:利用瀏覽器內(nèi)置打印功能**
大多數(shù)現(xiàn)代瀏覽器都內(nèi)置了打印預(yù)覽功能,通過(guò)調(diào)整打印設(shè)置,可以選擇“保存為PDF”。雖然這種方式并非直接生成PDF,但對(duì)于簡(jiǎn)單的HTML內(nèi)容轉(zhuǎn)換十分便捷。
```javascript
// 觸發(fā)打印對(duì)話框
window.print();
// 或者更精細(xì)地控制打印內(nèi)容
const myPrintContent = document.getElementById('printable-section');
myPrintContent.style.display = 'block';
myPrintContent.focus();
myPrintContent.print();
```
然而,這種方法的局限性在于無(wú)法自定義PDF的樣式、頁(yè)眉頁(yè)腳等內(nèi)容,而且不適用于自動(dòng)化流程或服務(wù)器端生成PDF。
---
### **二、Headless Chrome Puppeteer**
**標(biāo)題:Headless Chrome Puppeteer的HTML轉(zhuǎn)PDF解決方案**
Puppeteer是由Google開(kāi)發(fā)的Node庫(kù),它提供了一種可控的方式來(lái)通過(guò)Chrome Headless運(yùn)行JavaScript并與頁(yè)面交互,包括生成PDF。
```javascript
const puppeteer = require('puppeteer');
async function generatePDF(url, outputPath) {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url, {waitUntil: 'networkidle2'});
await page.emulateMediaType('print'); // 模擬打印媒體類型,確保樣式正確
await page.pdf({
path: outputPath,
format: 'A4',
printBackground: true, // 是否包含背景色
margin: {
top: '1cm',
bottom: '1cm',
left: '1cm',
right: '1cm'
}
});
await browser.close();
}
generatePDF('http://example.com', 'output.pdf');
```
Puppeteer的優(yōu)點(diǎn)是可以精確控制PDF樣式,支持CSS3,且跨平臺(tái)兼容性好。但需要注意的是,它需要在服務(wù)器端部署Chrome,并占用一定的計(jì)算資源。
---
### **三、jsPDF庫(kù)**
**標(biāo)題:小巧輕便的jsPDF庫(kù)**
jsPDF是一個(gè)純JavaScript編寫(xiě)的PDF生成庫(kù),主要面向輕量級(jí)應(yīng)用場(chǎng)景,可以將HTML內(nèi)容轉(zhuǎn)化為PDF,但對(duì)CSS的支持有限。
```javascript
import jsPDF from 'jspdf';
const doc = new jsPDF();
doc.text('Hello World!', 10, 10);
doc.save('a4.pdf');
// 通過(guò)html2canvas配合實(shí)現(xiàn)HTML轉(zhuǎn)PDF(較復(fù)雜場(chǎng)景)
import html2canvas from 'html2canvas';
import jsPDF from 'jspdf';
async function convertHtmlToPdf(element, filename) {
const canvas = await html2canvas(element);
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF();
pdf.addImage(imgData, 'PNG', 10, 10, 180, 160);
pdf.save(filename);
}
```
jsPDF的優(yōu)點(diǎn)在于輕量、易于集成,適用于簡(jiǎn)單的文字排版和圖表繪制。但因其不直接支持HTML渲染,復(fù)雜HTML內(nèi)容需要借助html2canvas等庫(kù)先轉(zhuǎn)為圖像再插入PDF。
---
### **四、Apache PDFBox**
**標(biāo)題:Java世界的HTML轉(zhuǎn)PDF工具——Apache PDFBox**
Apache PDFBox是一個(gè)開(kāi)源的Java庫(kù),可以處理PDF文檔的創(chuàng)建、修改、提取等操作,同時(shí)也支持HTML轉(zhuǎn)PDF,適用于后端Java環(huán)境。
```java
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.pdfbox.tools.html2pdf.HtmlConverter;
public void convertHtmlToPdf(String html, String outputFilePath) throws IOException {
HtmlConverter.convertToPdf(new File(html), new File(outputFilePath));
}
```
Apache PDFBox雖不是JavaScript庫(kù),但因其強(qiáng)大的功能和對(duì)企業(yè)級(jí)應(yīng)用的良好支持,成為了許多Java項(xiàng)目的選擇。
---
**總結(jié):**
選擇何種HTML轉(zhuǎn)PDF方案取決于具體的應(yīng)用場(chǎng)景和需求。原生打印API適用于簡(jiǎn)單的本地操作,Puppeteer適用于服務(wù)端生成高質(zhì)量PDF,jsPDF適用于輕量級(jí)、純JavaScript環(huán)境,而Apache PDFBox則在Java環(huán)境中表現(xiàn)出眾。理解每個(gè)方案的特性和限制,將有助于我們?cè)趯?shí)際項(xiàng)目中做出合適的選擇。無(wú)論哪種方式,HTML轉(zhuǎn)PDF都是現(xiàn)代Web開(kāi)發(fā)中的一項(xiàng)重要技能,值得深入學(xué)習(xí)和掌握。
嘍,今天是一篇HTML to PDF速食指南。
Java 轉(zhuǎn)換 HTML 到PDF有許多類庫(kù),今天我們介紹一下第三方免費(fèi)的類庫(kù)OpenPDF。
OpenPDF是免費(fèi)的Java類庫(kù) ,遵從LGPL 和 MPL協(xié)議,所以基本上能夠可以隨意使用。OpenPDF是基于iTEXT的,目前來(lái)說(shuō)也是維護(hù)的比較好的Java操作PDF的開(kāi)源軟件。
話不多說(shuō),且看所需要的依賴,
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
<dependency>
<groupId>com.openhtmltopdf</groupId>
<artifactId>openhtmltopdf-core</artifactId>
<version>1.0.6</version>
</dependency>
<dependency>
<groupId>com.openhtmltopdf</groupId>
<artifactId>openhtmltopdf-pdfbox</artifactId>
<version>1.0.6</version>
</dependency>
jsoup可以將html文件轉(zhuǎn)換成輸入流等,也可以遍歷html的DOM節(jié)點(diǎn),提取元素及樣式等。
本篇示例將以下html文件轉(zhuǎn)換成pdf
<html>
<head>
<style>
.center_div {
border: 1px solid #404e94;
margin-left: auto;
margin-right: auto;
background-color: #f6d0ed;
text-align: left;
padding: 8px;
}
table {
width: 100%;
border: 1px solid black;
}
th, td {
border: 1px solid black;
}
body,html,input{font-family:"msyh";}
</style>
</head>
<body>
<div class="center_div">
<h1>Hello java North!</h1>
<div>
<p>convert html to pdf.</p>
</div>
<div>
<table>
<thead>
<th>ROLE</th>
<th>NAME</th>
<th>TITLE</th>
</thead>
<tbody>
<tr>
<td>MARKSMAN</td>
<td>ASHE</td>
<td>THE FROST ARCHER</td>
</tr>
<tr>
<td>MAGES</td>
<td>ANNIE</td>
<td>THE DARK CHILD</td>
</tr>
<tr>
<td>射手</td>
<td>凱塔琳</td>
<td>皮城女警</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
以上html用瀏覽器打開(kāi)如下,亂碼是因?yàn)橹形淖煮w不識(shí)別,下面轉(zhuǎn)換的時(shí)候會(huì)加載對(duì)應(yīng)的字體來(lái)進(jìn)行轉(zhuǎn)換。
使用Java轉(zhuǎn)換HTML到PDF代碼如下:
public class HtmlToPDFOpenSource {
public static void main(String[] args) throws IOException {
HtmlToPDFOpenSource htmlToPDFOpenSource = new HtmlToPDFOpenSource();
htmlToPDFOpenSource.generatePdfByOpenhtmltopdf();
}
private void generatePdfByOpenhtmltopdf() throws IOException {
File inputHtml = new File("E:\\javaNorth\\java-study-note\\javaOpenSource\\src\\main\\resources\\test.html");
//加載html文件
Document document = Jsoup.parse(inputHtml, "UTF-8");
document.outputSettings().syntax(Document.OutputSettings.Syntax.html);
//引入資源目錄,可以單獨(dú)引入css,圖片文件等
String baseUri = FileSystems.getDefault()
.getPath("javaOpenSource\\src\\main\\resources")
.toUri().toString();
try (OutputStream os = new FileOutputStream("javaOpenSource\\src\\main\\resources\\testOpenLeagueoflegends1.pdf")) {
PdfRendererBuilder builder = new PdfRendererBuilder();
builder.withUri("javaOpenSource\\src\\main\\resources\\testOpenLeagueoflegends1.pdf");
builder.toStream(os);
builder.withW3cDocument(new W3CDom().fromJsoup(document), baseUri);
//引入指定字體,注意字體名需要和css樣式中指定的字體名相同
builder.useFont(new File("javaOpenSource\\src\\main\\resources\\fonts\\msyh.ttf"),"msyh",1,BaseRendererBuilder.FontStyle.NORMAL, true);
builder.run();
}
}
}
使用Java代碼轉(zhuǎn)換成PDF如下(示例中使用了微軟雅黑中文字體):
上述html文件中增加如下外部樣式:
<link href="style.css" rel="stylesheet">
并在resources目錄下添加style.css文件,重新生成PDF文件如下。
本片介紹了使用OpenPDF將html文件轉(zhuǎn)換成PDF文件。同時(shí)也使用了自定義字體,外部樣式。但是以下幾點(diǎn)需要格外注意。
全部示例在此:https://github.com/javatechnorth/java-study-note/tree/master/javaOpenSource/src/main/java/pdf
文章來(lái)源:Java技術(shù)指北
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。