整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

办公软件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,用户会被重定向到首页;如果请求失败或出现异常,则会显示相应的错误信息。