整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          辦公軟件PDF編輯器將大量PDF轉為HTML網頁,提高工作效率的方法

          數字化時代,PDF文檔成為企業和個人在信息存儲和傳輸中常用的格式之一。然而,在某些情況下,我們需要將大量的PDF文件轉換為HTML網頁文件,以便更好地展示、共享和在線瀏覽。為此,首助編輯高手軟件的PDF工具箱為您帶來高效轉換的解決方案,讓大量PDF轉為HTML網頁文件成為一種輕松實現的操作。

          以下是PDF工具箱支持大量PDF批量轉為HTML網頁文件的操作步驟:

          第一步:導入PDF文件

          打開軟件中的PDF工具箱,點擊“添加文件”按鈕或拖拽操作,將待轉換的PDF文件導入軟件。PDF工具箱支持同時導入多個PDF文件,您可以一次性添加需要轉換的所有文件。

          第二步:設置轉換選項

          PDF工具箱提供了豐富的轉換選項,讓您根據需要靈活選擇。比如PDF轉HTML、HTML轉PDF、PDF轉圖片等。

          第三步:選擇保存路徑:

          支持將轉換好的文件保存在原文件相同位置,或者指定位置,根據自己需要而定。

          第四步:執行轉換

          在設置完轉換選項后,點擊“開始轉換”按鈕即可執行轉換操作。PDF工具箱會自動按照您的設置將PDF文件轉換為HTML網頁文件,并保存到指定的文件夾中。

          第五步:處理速度驚人

          轉換過程中,您可以隨時查看轉換進度,確保操作的順利進行,整體處理速度很快,能節省不少時間。

          第六步:查看轉換效果

          支持批量處理功能,您可以一次性轉換多個PDF文件,大幅提升工作效率。轉換好后文件都保存在一起,可以看到都被轉為HTML網頁文件了。

          PDF工具箱作為首助編輯高手軟件的重要功能模塊,提供了高效、準確的PDF轉HTML轉換,還擁有多種其他功能,如AI文章創作、魔法繪圖、圖片批量處理、文本批量操作等。它不僅能滿足個人需求,也適用于企業、學校和機構等多個場景。

          i, 大家好, 我是徐小夕.

          之前有些用戶和朋友希望我基于H5-Dooring開發一款桌面端應用, 最近剛好有時間, 就花了小半天時間使用electron開發了桌面端的軟件Dooring-electron.

          當然這篇文章不會介紹如何從零使用 electron , 而是會提供一種方案, 幫助大家快速的將線上網站轉化為 electron 應用.

          文章最后我也會分享一款我朋友開發的在線工具, 可以不寫一行代碼, 輕松把線上網站轉化為桌面端軟件.

          electron的一些知識

          熟悉Electron的朋友也許知道, Electron繼承了來自 Chromium 的多進程架構,這使得Electron在架構上非常類似于一個現代的網頁瀏覽器。我們可以控制兩種類型的進程:主進程和渲染器

          每個 Electron 應用都有一個單一的主進程,作為應用程序入口。主進程在 Node 環境中運行,我們可以使用所有 Node 的能力。

          那么主進程中我們可以做些什么呢? 主進程的主要目的是使用 BrowserWindow 模塊創建和管理應用程序窗口

          BrowserWindow 類的每個實例創建一個應用程序窗口,且在單獨的渲染器進程中加載一個網頁。 我們可從主進程用 window 的 webContent 對象與網頁內容進行交互。

          有了以上基礎, 我畫了一張dooring-electron 的簡單架構圖方便大家理解:

          想對electron有更多直觀理解的, 也可以參考其官網:

          https://www.electronjs.org/

          實現將線上網站打包成桌面端軟件

          我們知道如果想要加載第三方網絡資源, 可以使用 mainWindow.loadURL(url) 來實現, 所以只需要將網址放到 loadURL 方法中讓 electron 打開即可:

          const mainWindow = new BrowserWindow({
              maximizable: true,
              show: false,
              title: "H5-dooring網站制作平臺",
              fullscreen: false,
              center: true,
              webPreferences: {
                preload: path.join(__dirname, 'preload.js'),
                enableRemoteModule: true,
                nodeIntegration: true,
              },
            });
          
            mainWindow.maximize();
            mainWindow.setAutoHideMenuBar(true);
            mainWindow.loadURL('your website address');
          

          同時如果想要控制網站打開新的頁面時的窗口尺寸, 我們只需要對窗口進行監聽, 來動態設置新窗口的尺寸即可:

          mainWindow.webContents.setWindowOpenHandler((details) => {
              const base = {
                fullscreen: false,
                skipTaskbar: true,
                center: true,
                maximizable: true,
                autoHideMenuBar: false,//自動隱藏菜單欄
                // icon: iconPath,// 窗口圖標
                parent: null ,//指定父窗口
                resizable: true,
                webPreferences: {//網頁功能設置。
                  webSecurity: false,//禁用同源策略
                  nodeIntegration: true,
                  nodeIntegrationInWorker: true,
                  enableRemoteModule: true,
                  contextIsolation: false
                },
              }
              const h5Win = {
                width: 1200,
                minWidth: 1200,
                minHeight: 775,
                height: 775,
                y: 60,
              }
              const otherWin = {
                width: 1200,
                minWidth: 1200,
                minHeight: 800,
                height: 800,
                y: 60,
              }
              if (details.url.indexOf('/preview') > -1) {
             return { 
              action: 'allow',//允許新窗口被創建
              overrideBrowserWindowOptions: {//允許自定義創建的窗口參數
                    ...base,
               ...h5Win,
              }
             }
            }
              if (details.url.indexOf('/ide') > -1) {
             return { 
              action: 'allow',//允許新窗口被創建
              overrideBrowserWindowOptions: {//允許自定義創建的窗口參數
                    ...base,
               ...otherWin,
              }
             }
            }
              if (details.url.indexOf('/h5_plus') > -1) {
             return { 
              action: 'allow',//允許新窗口被創建
              overrideBrowserWindowOptions: {//允許自定義創建的窗口參數
                    ...base,
                    width: 1500,
                    height: 860
              }
             }
            }
            return { 
                action: 'allow',//允許新窗口被創建
                overrideBrowserWindowOptions: {//允許自定義創建的窗口參數
                  ...base,
                  ...otherWin, 
                }
              }
           })
          

          對于網站打包的配置 electron 文檔上介紹的很詳細, 這里我就不一一介紹了, 大家可以在 github 上參考學習:

          • https://github.com/MrXujiang/h5-dooring-electron-demo

          不用寫一行代碼, 輕松將你的網站打包成桌面端軟件

          在線地址:https://webdesk.pigjs.com/builder

          我親自體驗了一下, 使用起來還是相當方便的, 不需要寫一行代碼就可以將網站轉化的桌面端軟件, 以下是一些功能優缺點介紹.

          Webdesk 功能及特點:

          1. 快速轉換:WebDesk可以在幾分鐘內將網頁轉換為桌面應用,無需編碼或復雜的設置
          2. 多平臺支持:可以將網頁轉化成 Window 桌面應用、macOs桌面應用。
          3. 廣泛的應用場景:無論是保存在線課程、工作文檔還是個人網站,WebDesk都是將其轉換為桌面應用的理想選擇。

          Webdesk 缺點:

          1. 無代碼簽名:安裝時可能因未簽名而被系統提示存在安全隱患。
          2. 體積過大:安裝包體積約為 80MB,相對較大
          3. 內存占用高:運行時內存占用較高
          4. 無法離線使用:需要網絡連接才能使用,不支持離線模式

          Webdesk 未來規劃:

          1. 代碼簽名:增加自動或自定義代碼簽名功能,提高安裝安全性。
          2. 應用平臺上架:實現從構建到平臺分發的完整流程
          3. 體積減小:優化安裝包,減小體積,降低內存占用
          4. 離線使用:增加離線使用功能,無需網絡即可使用
          5. 多語言支持:增加多語言支持

          更多 前端 / 低代碼 / 可視化 相關的技術分享和實現, 歡迎 微信 搜索 趣談前端 學習探索.

          使用React和Ant Design創建一個登錄頁面是一個很好的實踐,可以讓你的界面既美觀又功能齊全。


          編寫登錄頁面


          下面是一個簡單的示例,展示了如何使用Ant Design的組件來構建一個基本的登錄表單。


          首先,請確保你已經安裝了React和Ant Design。如果還沒有安裝,可以通過以下命令進行安裝:


          npx create-react-app my-login-app
          cd my-login-app
          npm install antd


          接下來,我們編寫登錄頁面的代碼。在src目錄下,你可以創建一個名為LoginPage.js的新文件,并輸入以下代碼:


          // src/LoginPage.js
          import React, { useState } from 'react';
          import { Form, Input, Button, Checkbox, Typography } from 'antd';
          import 'antd/dist/antd.css';
          
          const { Title } = Typography;
          
          const LoginPage = () => {
            const [username, setUsername] = useState('');
            const [password, setPassword] = useState('');
            const [rememberMe, setRememberMe] = useState(false);
          
            const handleSubmit = (e) => {
              e.preventDefault();
              // 在這里執行登錄邏輯,比如API調用
              console.log('Username:', username, 'Password:', password, 'Remember me:', rememberMe);
            };
          
            return (
              <div style={{ display: 'flex', justifyContent: 'center', height: '100vh', alignItems: 'center' }}>
                <Form onSubmit={handleSubmit} style={{ width: 300 }}>
                  <Title level={3} style={{ textAlign: 'center', marginBottom: 20 }}>登錄</Title>
                  <Form.Item>
                    <Input
                      prefix={<i className="anticon anticon-user" />}
                      placeholder="用戶名"
                      value={username}
                      onChange={(e) => setUsername(e.target.value)}
                    />
                  </Form.Item>
                  <Form.Item>
                    <Input
                      prefix={<i className="anticon anticon-lock" />}
                      type="password"
                      placeholder="密碼"
                      value={password}
                      onChange={(e) => setPassword(e.target.value)}
                    />
                  </Form.Item>
                  <Form.Item>
                    <Checkbox checked={rememberMe} onChange={(e) => setRememberMe(e.target.checked)}>
                      記住我
                    </Checkbox>
                  </Form.Item>
                  <Form.Item>
                    <Button type="primary" htmlType="submit" block>
                      登錄
                    </Button>
                  </Form.Item>
                </Form>
              </div>
            );
          };
          
          export default LoginPage;


          在這個例子中,我們使用了Ant Design的Form、Input、Button、Checkbox和Typography組件來構建登錄表單。表單包括用戶名和密碼輸入框,一個“記住我”復選框,以及一個登錄按鈕。當用戶點擊登錄按鈕時,會觸發handleSubmit函數,你可以在這里添加實際的登錄邏輯,比如發送請求到后端服務器驗證用戶名和密碼。


          最后,別忘了在你的主應用文件(通常是src/App.js)中引入并使用LoginPage組件:


          // src/App.js
          import React from 'react';
          import './App.css';
          import LoginPage from './LoginPage';
          
          function App() {
            return (
              <div className="App">
                <LoginPage />
              </div>
            );
          }
          
          export default App;


          這樣,你就完成了一個基本的使用React和Ant Design的登錄頁面。根據需要,你可以進一步定制樣式和增加表單驗證等功能。


          通過fetch實現ajax請求


          要在登錄成功后發送AJAX請求并根據請求結果跳轉頁面,你可以使用fetch或第三方庫如axios來實現HTTP請求,并利用React的useHistory鉤子來進行路由跳轉。這里我將展示如何結合React Router進行頁面跳轉。


          首先,確保你已安裝React Router:


          npm install react-router-dom


          然后,在你的項目中設置基本的路由。修改src/App.js以包含路由配置:


          // src/App.js
          import React from 'react';
          import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
          import './App.css';
          import LoginPage from './LoginPage';
          import HomePage from './HomePage'; // 假設你有一個HomePage組件作為"/index"的頁面
          
          function App() {
            return (
              <Router>
                <Switch>
                  <Route path="/login" component={LoginPage} />
                  <Route path="/" component={HomePage} />
                </Switch>
              </Router>
            );
          }
          
          export default App;


          接下來,在LoginPage.js中實現登錄邏輯,包括發送AJAX請求并在成功后跳轉到首頁:


          // src/LoginPage.js
          import React, { useState } from 'react';
          import { Form, Input, Button, Checkbox, Typography, message } from 'antd';
          import { useHistory } from 'react-router-dom';
          import 'antd/dist/antd.css';
          
          const { Title } = Typography;
          
          const LoginPage = () => {
            const [username, setUsername] = useState('');
            const [password, setPassword] = useState('');
            const [rememberMe, setRememberMe] = useState(false);
            const history = useHistory();
          
            const handleSubmit = async (e) => {
              e.preventDefault();
          
              try {
                // 假設有一個登錄API在'http://example.com/api/login'
                const response = await fetch('http://example.com/api/login', {
                  method: 'POST',
                  headers: {
                    'Content-Type': 'application/json',
                  },
                  body: JSON.stringify({ username, password }),
                });
          
                if (response.ok) {
                  // 登錄成功,跳轉到主頁
                  history.push('/');
                  message.success('登錄成功!');
                } else {
                  // 登錄失敗,顯示錯誤信息
                  const errorData = await response.json();
                  message.error(`登錄失敗:${errorData.message}`);
                }
              } catch (error) {
                message.error('登錄時發生錯誤,請重試。');
                console.error('Login failed:', error);
              }
            };
          
            return (
              // ...之前展示的表單代碼保持不變
            );
          };
          
          export default LoginPage;


          這段代碼中,我們使用了fetch來發送一個POST請求到登錄API,并且處理了成功和失敗的情況。登錄成功后,使用history.push('/')跳轉到首頁。同時,利用Ant Design的message組件來顯示操作反饋信息。


          請記得替換示例中的API URL 'http://example.com/api/login'為你的實際登錄API地址,并根據實際情況調整錯誤處理邏輯。


          通過axios實現ajax請求


          如果你希望使用axios來替代fetch實現登錄請求,你需要先確保你的項目中已經安裝了axios。如果尚未安裝,可以通過npm或yarn進行安裝:


          npm install axios
          # 或者
          yarn add axios


          接下來,修改LoginPage.js中的登錄請求部分,用axios替換fetch。以下是使用axios實現登錄請求的示例代碼:


          // src/LoginPage.js
          import React, { useState } from 'react';
          import { Form, Input, Button, Checkbox, Typography, message } from 'antd';
          import axios from 'axios';
          import { useHistory } from 'react-router-dom';
          import 'antd/dist/antd.css';
          
          const { Title } = Typography;
          
          const LoginPage = () => {
            const [username, setUsername] = useState('');
            const [password, setPassword] = useState('');
            const [rememberMe, setRememberMe] = useState(false);
            const history = useHistory();
          
            const handleSubmit = async (e) => {
              e.preventDefault();
          
              try {
                // 使用axios發送POST請求
                const response = await axios.post('http://example.com/api/login', {
                  username,
                  password,
                });
          
                if (response.status === 200) {
                  // 登錄成功,跳轉到主頁
                  history.push('/');
                  message.success('登錄成功!');
                } else {
                  // 登錄失敗,顯示錯誤信息
                  message.error('登錄失敗,請檢查用戶名和密碼。');
                }
              } catch (error) {
                // 網絡錯誤或其他異常
                message.error('登錄時發生錯誤,請重試。');
                console.error('Login failed:', error);
              }
            };
          
            return (
              // ...之前展示的表單代碼保持不變
            );
          };
          
          export default LoginPage;


          在這個修改后的版本中,我們使用axios的post方法發送登錄請求,并且同樣處理了成功和失敗的情況。如果請求成功且狀態碼為200,用戶會被重定向到首頁;如果請求失敗或出現異常,則會顯示相應的錯誤信息。


          主站蜘蛛池模板: 免费无码VA一区二区三区| 久久久久国产一区二区| 国产伦精品一区二区三区视频金莲| 亚洲成av人片一区二区三区| 久久久久人妻一区二区三区| 久久精品人妻一区二区三区 | 中文字幕在线视频一区| AV鲁丝一区鲁丝二区鲁丝三区| 国语精品一区二区三区| 免费无码AV一区二区| 国产精品亚洲专区一区| 无码av中文一区二区三区桃花岛| 91精品一区二区三区在线观看| 亚洲日韩国产精品第一页一区| 精品久久久久一区二区三区| 国产主播一区二区三区| 国产精品视频免费一区二区三区| 亚洲AV无码片一区二区三区 | 国产精品视频一区国模私拍| 精品亚洲av无码一区二区柚蜜| 人妖在线精品一区二区三区| 精品熟人妻一区二区三区四区不卡| 久久精品国产第一区二区三区| 少妇特黄A一区二区三区| 日韩一区二区电影| 成人精品一区二区三区不卡免费看| www亚洲精品少妇裸乳一区二区| 精品无码一区二区三区水蜜桃| 老鸭窝毛片一区二区三区| 日本夜爽爽一区二区三区| 国产女人乱人伦精品一区二区| 日本精品视频一区二区三区| 视频在线观看一区二区三区| 无码国产亚洲日韩国精品视频一区二区三区 | 国产成人久久精品麻豆一区| 久久精品无码一区二区三区日韩 | 精品一区二区高清在线观看| 国产精品亚洲高清一区二区| 日韩人妻无码一区二区三区综合部| 国模少妇一区二区三区| 国产美女一区二区三区|