test only

https://drive.google.com/viewer?url=https://www.labnol.org/files/word.docx

使用插件將html -> pdf

要在React中使用react-pdf將一段HTML代碼轉換為PDF,您可以按照以下步驟進行操作:

1. 安裝react-pdf:在您的React項目中,使用npm或yarn安裝react-pdf庫。

? ?如果使用npm:
? ?```
? ?npm install @react-pdf/renderer
? ?```

? ?或者如果使用yarn:
? ?```
? ?yarn add @react-pdf/renderer
? ?```

2. 創建一個React組件:創建一個React組件,用于渲染您要轉換為PDF的HTML代碼。

? ?```javascript
? ?import React from 'react';
? ?import { Page, Document, StyleSheet } from '@react-pdf/renderer';

? ?const MyPDF = () => {
? ? ?return (
? ? ? ?<Document>
? ? ? ? ?<Page>
? ? ? ? ? ?{/* 在這里放置您要轉換為PDF的HTML代碼 */}
? ? ? ? ? ?<div>
? ? ? ? ? ? ?<h1>Hello, PDF!</h1>
? ? ? ? ? ? ?<p>This is an example HTML content.</p>
? ? ? ? ? ?</div>
? ? ? ? ?</Page>
? ? ? ?</Document>
? ? ?);
? ?};

? ?export default MyPDF;
? ?```

? ?在上述示例中,我們創建了一個名為`MyPDF`的React組件。在`<Document>`和`<Page>`組件中,我們可以放置要轉換為PDF的HTML代碼。在這個例子中,我們簡單地放置了一個包含標題和段落的`<div>`。

3. 使用react-pdf渲染PDF:在您的React應用中,您可以使用react-pdf的`<PDFViewer>`組件或`<PDFDownloadLink>`組件來渲染和下載PDF。

? ?a. 使用`<PDFViewer>`組件:如果您想在應用中直接顯示PDF,您可以使用`<PDFViewer>`組件。

? ?```javascript
? ?import React from 'react';
? ?import { PDFViewer } from '@react-pdf/renderer';
? ?import MyPDF from './MyPDF';

? ?const App = () => {
? ? ?return (
? ? ? ?<div>
? ? ? ? ?{/* 在這里放置其他內容 */}
? ? ? ? ?<PDFViewer>
? ? ? ? ? ?<MyPDF />
? ? ? ? ?</PDFViewer>
? ? ? ?</div>
? ? ?);
? ?};

? ?export default App;
? ?```

? ?在上述示例中,我們將`<MyPDF>`組件包裹在`<PDFViewer>`組件中,這樣就可以在應用中顯示PDF。

? ?b. 使用`<PDFDownloadLink>`組件:如果您想提供一個下載鏈接,讓用戶點擊下載PDF,您可以使用`<PDFDownloadLink>`組件。

? ?```javascript
? ?import React from 'react';
? ?import { PDFDownloadLink } from '@react-pdf/renderer';
? ?import MyPDF from './MyPDF';

? ?const App = () => {
? ? ?return (
? ? ? ?<div>
? ? ? ? ?{/* 在這里放置其他內容 */}
? ? ? ? ?<PDFDownloadLink document={<MyPDF />} fileName="mypdf.pdf">
? ? ? ? ? ?{({ blob, url, loading, error }) =>
? ? ? ? ? ? ?loading ? 'Loading document...' : 'Download now!'
? ? ? ? ? ?}
? ? ? ? ?</PDFDownloadLink>
? ? ? ?</div>
? ? ?);
? ?};

? ?export default App;
? ?```

? ?在上述示例中,我們將`<MyPDF>`組件作為`<PDFDownloadLink>`組件的`document`屬性傳遞,并指定要下載的PDF文件名為"mypdf.pdf"。根據`blob`、`url`、`loading`和`error`屬性,我們可以在組件中根據下載狀態顯示相應的內容。

請注意,以上示例是基本的示例,您可以根據自己的需求和具體的HTML代碼進行調整和擴展。您可以在`<MyPDF>`組件中放置更復雜的HTML代碼,并使用react-pdf提供的其他組件和樣式進行更高級的PDF生成和自定義。

方法 1?

要在React中使用Mammoth將Blob類型轉換為HTML,您可以按照以下步驟進行操作:

1. 首先,確保您的React項目已經安裝了Mammoth。您可以使用以下命令來安裝它:
```shell
npm install mammoth
```

2. 在您的React組件文件中,導入Mammoth庫:
```javascript
import * as mammoth from "mammoth";
```

3. 創建一個處理Blob轉換的函數。這個函數將接受一個Blob對象作為參數,并返回一個Promise,以便在轉換完成后進行處理。可以在組件類或函數組件中創建此函數。
```javascript
function convertBlobToHTML(blob) {
? return new Promise((resolve, reject) => {
? ? const reader = new FileReader();
? ? reader.onloadend = function () {
? ? ? const arrayBuffer = reader.result;
? ? ? mammoth.extractRawText({ arrayBuffer: arrayBuffer })
? ? ? ? .then((result) => {
? ? ? ? ? const html = result.value; // 轉換后的HTML內容
? ? ? ? ? resolve(html);
? ? ? ? })
? ? ? ? .catch((error) => {
? ? ? ? ? reject(error);
? ? ? ? });
? ? };
? ? reader.readAsArrayBuffer(blob);
? });
}
```

4. 在您的React組件中,使用上述函數來處理Blob對象:
```javascript
function MyComponent() {
? // 處理Blob轉換的函數
? const handleConvertBlob = async (blob) => {
? ? try {
? ? ? const html = await convertBlobToHTML(blob);
? ? ? // 在這里可以處理轉換后的HTML內容
? ? ? console.log(html);
? ? } catch (error) {
? ? ? console.error("轉換出錯:", error);
? ? }
? };

? // 示例調用
? const exampleBlob = new Blob([/* Blob數據 */], { type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document" });
? handleConvertBlob(exampleBlob);

? return (
? ? // 組件的JSX內容
? );
}
```

請注意,上述代碼僅提供了將Blob轉換為HTML的基本邏輯,您可能需要根據具體的需求進行適當的調整和錯誤處理。同時,您需要確保正確地引入Mammoth庫并在項目中包含所需的文件。

方法2 codebox上的

https://codesandbox.io/p/devbox/brave-vaughan-gx8rk?file=%2Fsrc%2Fcomponents%2Fdrivers%2Fdocx-viewer.jsx%3A3%2C1-42%2C1

這段代碼是一個React組件,它使用了`mammoth`庫來將DOCX文件轉換為HTML,并在組件的`componentDidMount`生命周期方法中執行轉換操作。

代碼分析如下:

1. 導入React和mammoth庫:
```javascript
import React, { Component } from 'react';
import mammoth from 'mammoth';
```

2. 導入樣式和Loading組件:
```javascript
import 'styles/docx.scss';
import Loading from '../loading';
```

3. 定義一個繼承自`Component`的類組件:
```javascript
export default class extends Component {
? // 組件的生命周期方法
? componentDidMount() {
? ? // 創建一個XMLHttpRequest對象
? ? const jsonFile = new XMLHttpRequest();
? ? // 發送GET請求,獲取DOCX文件的路徑
? ? jsonFile.open('GET', this.props.filePath, true);
? ? jsonFile.send();
? ? jsonFile.responseType = 'arraybuffer';
? ? jsonFile.onreadystatechange = () => {
? ? ? // 檢查請求狀態和響應狀態碼
? ? ? if (jsonFile.readyState === 4 && jsonFile.status === 200) {
? ? ? ? // 使用mammoth庫將DOCX轉換為HTML
? ? ? ? mammoth.convertToHtml(
? ? ? ? ? { arrayBuffer: jsonFile.response },
? ? ? ? ? { includeDefaultStyleMap: true },
? ? ? ? )
? ? ? ? .then((result) => {
? ? ? ? ? // 創建一個div元素,并將轉換后的HTML內容賦值給innerHTML
? ? ? ? ? const docEl = document.createElement('div');
? ? ? ? ? docEl.className = 'document-container';
? ? ? ? ? docEl.innerHTML = result.value;
? ? ? ? ? // 將轉換后的HTML內容插入到id為'docx'的元素中
? ? ? ? ? document.getElementById('docx').innerHTML = docEl.outerHTML;
? ? ? ? })
? ? ? ? .catch((a) => {
? ? ? ? ? console.log('alexei: something went wrong', a);
? ? ? ? })
? ? ? ? .done();
? ? ? }
? ? };
? }

? // 渲染組件
? render() {
? ? return (
? ? ? <div id="docx">
? ? ? ? <Loading />
? ? ? </div>);
? }
}
```

此組件的渲染函數(`render`)返回一個`div`元素,其中包含一個id為'docx'的容器元素和一個`Loading`組件。在組件的`componentDidMount`方法中,使用XMLHttpRequest對象獲取指定路徑的DOCX文件,然后通過`mammoth`庫將其轉換為HTML。轉換完成后,將轉換后的HTML內容插入到id為'docx'的容器元素中。

請注意,該代碼中的文件路徑(`this.props.filePath`)和樣式文件路徑(`styles/docx.scss`)是需要根據實際情況進行調整的。此外,還需要確保項目中正確引入了`mammoth`庫和`Loading`組件的文件。

在react中展示HTML

在React組件中展示HTML內容可以使用`dangerouslySetInnerHTML`屬性。這個屬性允許您將HTML字符串作為內容插入到組件的DOM元素中,但需要注意潛在的安全風險。

以下是一個示例展示如何在React組件中展示HTML內容:

```javascript
import React from 'react';

function MyComponent() {
? const html = '<p>This is a paragraph.</p>';

? return (
? ? <div dangerouslySetInnerHTML={{ __html: html }} />
? );
}

export default MyComponent;
```

在上述示例中,我們定義了一個變量`html`,其中包含要展示的HTML內容。然后,我們在`<div>`元素上使用了`dangerouslySetInnerHTML`屬性,并將`html`變量設置為`__html`屬性的值。這樣React會將`html`中的內容作為HTML代碼插入到`<div>`元素中。

需要注意的是,`dangerouslySetInnerHTML`屬性的命名是有意義的,它提醒我們在使用時要小心,確保插入的HTML內容來自可信的來源,以防止跨站腳本攻擊(XSS)等安全問題。請確保您信任并驗證要展示的HTML內容,以防止潛在的安全風險。

此外,還可以考慮使用其他庫或組件來處理HTML內容的展示和渲染,例如`react-html-parser`或`react-render-html`等庫。這些庫提供更多的功能和選項,可以更安全地處理和渲染HTML內容。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719637.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719637.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719637.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[python] 構建數據流水線(pipeline)

Plum 是一個用于構建數據流水線&#xff08;pipeline&#xff09;的 Python 庫&#xff0c;它旨在簡化和優化數據處理流程&#xff0c;使得數據流轉和處理變得更加清晰、高效和可維護。下面我將更詳細地介紹 Plum 的特點、功能和使用方法。 Plum 的主要特點和功能&#xff1a;…

利用Vue3的新API(customRef)實現防抖效果

customRef是創建一個自定義的 ref&#xff0c;然后顯式聲明對其依賴追蹤和更新觸發的控制方式。因為ref是直接更新的&#xff0c;數據修改會馬上更新&#xff0c;而customRef可以認為控制更新的過程&#xff0c;比如可以利用這個api控制 空格輸入限制、數據更新速度控制、違規內…

小語言模型(SLM)介紹

大型語言模型&#xff08;LLM&#xff09;&#xff0c;如GPT、Claude等的出現&#xff0c;證明了它們是人工智能領域的一項變革性步伐&#xff0c;徹底革新了機器學習模型的強大性質&#xff0c;并在改變AI生態系統中發揮了重要作用&#xff0c;促使生態系統中的每個成員都必須…

石頭里的傳奇故事—沉積巖

“ 沉積巖者&#xff0c;地質歷史之積淀者也。” 野外發現層狀延伸的巖石出露&#xff0c;發現的巖石呈現灰白色&#xff0c;主要礦物為磨圓度好的石英顆粒&#xff0c;石英粒徑為1-2mm。巖石質地堅硬。石英顆粒間填充物黏土物質&#xff0c;滴加鹽酸未見氣泡&#xff0c;斜層…

springboot242基于SpringBoot的失物招領平臺的設計與實現

失物招領平臺 摘 要 科學技術的不斷發展&#xff0c;計算機的應用日漸成熟&#xff0c;其強大的功能給人們留下深刻的印象&#xff0c;它已經應用到了人類社會的各個層次的領域&#xff0c;發揮著重要的不可替換的作用。信息管理作為計算機應用的一部分&#xff0c;使用計算機…

C++ 之LeetCode刷題記錄(三十七)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 開始cpp刷題之旅。 目標&#xff1a;執行用時擊敗90%以上使用 C 的用戶。 17. 電話號碼的字母組合 給定一個僅包含數字 2-9 的字符串&#xff0c;返回所有它能表…

LeetCode25 搜索插入位置

題目 給定一個排序數組和一個目標值&#xff0c;在數組中找到目標值&#xff0c;并返回其索引。 如果目標值不存在于數組中&#xff0c;返回它將會被按順序插入的位置。 示例 示例 1:輸入: nums [1,3,5,6], target 5 輸出: 2 示例 2:輸入: nums [1,3,5,6], target 2 輸出: …

OceanPen Art AI繪畫系統內容講解

在一個崇高的目標支持下&#xff0c;不停地工作&#xff0c;即使慢&#xff0c;也一定會獲得成功。 —— 愛因斯坦 演示站點&#xff1a; ai.oceanpen.art官方論壇&#xff1a; www.jingyuai.com &#x1f4a1;技術棧 前端&#xff1a;VUE3后端&#xff1a;Java數據&#xf…

【硬件相關】SMART硬盤健康狀態監測

文章目錄 一、前言1、SMART技術介紹2、SMART功能作用3、SMART運行原理 二、部署實踐1、SMART軟件安裝2、SMART操作命令2.1、狀態查詢2.2、健康測試 3、SMART信息解讀 三、異常預測 一、前言 Wikipedia&#xff1a; Self-Monitoring,_Analysis_and_Reporting_Technology 1、SMAR…

5G網絡架構與組網部署01--5G網絡架構的演進趨勢

目錄 1. 5G網絡架構的演進趨勢 1.1 5G移動通信系統整體架構 1.2 4G移動通信系統整體架構 1.3 4G與5G移動通信系統整體架構對比 1.4 核心網架構演進 1.5 無線接入網演進 1. 整體架構組成&#xff1a;接入網&#xff0c;核心網 2. 5G網絡接入網和核心網對應的網元&#xff…

es集群的詳細搭建過程

目錄 一、VM配置二、集群搭建三、集群配置 一、VM配置 VM的安裝 VMware Workstation 15 Pro的安裝與破解 VM新建虛擬機 VM新建虛擬機 二、集群搭建 打開新建好的服務器&#xff0c;node1&#xff0c;使用xshell遠程連接 下載es&#xff1a;https://www.elastic.co/cn/down…

內網穿透的應用-如何修改Nginx服務location代理轉發規則結合cpolar實現無公網ip環境訪問內網站點

文章目錄 1. 下載windows版Nginx2. 配置Nginx3. 測試局域網訪問4. cpolar內網穿透5. 測試公網訪問6. 配置固定二級子域名7. 測試訪問公網固定二級子域名 1. 下載windows版Nginx 進入官方網站(http://nginx.org/en/download.html)下載windows版的nginx 下載好后解壓進入nginx目…

問題解決:各版本的vc_redist下載地址 缺少msvcr100.dll、msvcr120.dll、msvcr140.dll

Visual C Redistributable for Visual Studio各版本的官方鏈接。解決缺少msvcr100.dll、msvcr120.dll、msvcr140.dll的問題。 下面全部為官方鏈接&#xff1a; Microsoft Visual C Redistributable 2019 x86: https://aka.ms/vs/16/release/VC_redist.x86.exe x64: https://ak…

【S32DS報錯】-5-提示Secure Debug might be enabled on this device錯誤

【S32K3_MCAL從入門到精通】合集&#xff1a; S32K3_MCAL從入門到精通https://blog.csdn.net/qfmzhu/category_12519033.html 問題背景&#xff1a; 在S32DS IDE中使用PEmicro&#xff08;Multilink ACP&#xff0c;Multilink Universal&#xff0c;Multilink FX&#xff09…

自適應控制算法講解-案例(附C代碼)

目錄 一、自適應控制算法的基本原理 二、自適應控制算法分類 三、案例 3.1自適應PID控制 1&#xff09; 模型識別 2&#xff09;動態調整PID參數邏輯 3&#xff09;PID控制器 自適應控制算法是一種高級控制算法&#xff0c;用于處理那些參數不確定或者動態變化的系統。這類…

SwiftUI 在 App 中彈出全局消息橫幅(下)

功能需求 在 SwiftUI 開發的 App 界面中,有時我們需要在全局層面向用戶展示一些消息: 如上圖所示:我們彈出的全局消息橫幅位于所有視圖之上,這意味這它不會被任何東西所遮擋;而且用戶可以點擊該橫幅關閉它。這是怎么做到的呢? 在本篇博文中,您將學到以下內容 功能需求…

iOS-設置指定邊圓角(左上、左下等)

以UILabel舉例&#xff0c;效果圖如下&#xff1a; 方法一僅支持iOS11以上 方法一&#xff1a; [_sleepStateLabel.layer setMasksToBounds:YES]; [_sleepStateLabel.layer setCornerRadius:12]; [_sleepStateLabel.layer setMaskedCorners:kCALayerMinXMinYCorner | kCALaye…

個人項目介紹3:火車站篇

項目需求&#xff1a; 一比一精確顯示火車站主建筑和站臺模型。實時響應車輛信息&#xff08;上水&#xff0c;吸污&#xff0c;換乘&#xff09;并同步顯示&#xff0c;實時響應車輛進出站信息&#xff0c;并以動畫形式模擬。實時響應報警信息&#xff0c;并能在三位中顯示&a…

#WEB前端(CCS選擇器)

1.實驗&#xff1a;CCS選擇器 2.IDE&#xff1a;VSCODE 3.記錄&#xff1a; 子代選擇器、后代選擇器、相鄰兄弟選擇器、類選擇器、偽元素選擇器&#xff08;鼠標懸停&#xff09;、ID選擇器、調用選擇器&#xff08;全選&#xff09; 4.代碼&#xff1a; <!DOCTYPE html…

java generics(泛型)

在定義類、接口和方法時&#xff0c;泛型使類型(類和接口)成為參數。與方法聲明中使用的形參非常相似&#xff0c;類型參數為您提供了一種方法&#xff0c;可以用不同的輸入重用相同的代碼。不同之處在于形式參數的輸入是值&#xff0c;而類型參數的輸入是類型。 使用泛型有許…