基于python的电子报实现思路

embedded/2024/12/26 8:09:21/

一种基于PDF生成电子报的思路

  • 需求提出
    • 实现思路:
    • 技术路线
    • 核心代码:

需求提出

最近公司提出了一个电子报的需求,可看网上实现的思路基本上是方正系列的排版软件实现的,公司没必要买这么一套,于是按照自己的思路搞了一个手动版的电子报。学习了一下各大电子报的实现方案,有点简陋,但是实现了电子报的功能。且称他为电子报编辑器

实现思路:

  1. 上传电子报PDF解析页面;
  2. 手动在页面使用canvas划线标记框,双击选定区域弹出富文本编辑框;
  3. 保存标记内容和坐标点到json文件;
  4. 全部标记完成后生成html页面;
  5. 读取json并使用canvas恢复标记,鼠标移动到标记框后半透明显示;
  6. 点击选框区域弹出之间标记的内容;

技术路线

后端使用python,前端使用js+html

核心代码:

检测鼠标所在区域

// 判断点是否在多边形内(射线法)function isPointInPolygon(x, y, polygon) {let inside = false;for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {const xi = polygon[i].x, yi = polygon[i].y;const xj = polygon[j].x, yj = polygon[j].y;const intersect = (yi > y) !== (yj > y) && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;if (intersect) inside = !inside;}return inside;}
  // 画框在页面function draw() {let image = new Image();image.src = imagePaths[currentPage - 1];image.onload = function () {// Clear the canvas and redraw the imagectx.clearRect(0, 0, canvas.width, canvas.height);ctx.drawImage(image, 0, 0, canvas.width, canvas.height);// Draw existing hotspot markings (red polygons)if (marks[currentPage]) {marks[currentPage].forEach(polygon => {ctx.strokeStyle = 'rgba(255, 0, 0, 0.7)';ctx.lineWidth = 2;ctx.beginPath();ctx.moveTo(polygon[0].x, polygon[0].y);polygon.forEach(point => ctx.lineTo(point.x, point.y));ctx.closePath();ctx.stroke();});}// Draw current polygon being drawn (green)if (currentPolygon.length > 1) {ctx.strokeStyle = 'rgba(0, 255, 0, 0.7)';ctx.lineWidth = 2;ctx.beginPath();ctx.moveTo(currentPolygon[0].x, currentPolygon[0].y);currentPolygon.forEach(point => ctx.lineTo(point.x, point.y));ctx.stroke();}};}

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/embedded/148838.html

相关文章

Linux自动挂载与卸载USB设备

一、实现udev规则 创建规则&#xff1a;sudo vi /etc/udev/rules.d/usb.rules SUBSYSTEMS"usb",SUBSYSTEM"block",ACTION"add",RUN{program}"/bin/mkdir /mnt/%k",RUN{program}"/usr/bin/systemd-mount --no-block --collect …

ABAQUS纤维混凝土细观模型基于梁单元建模

钢纤维混凝土&#xff08;SFRC&#xff09;弥补了素混凝土抗裂性的不足&#xff0c;为建立钢纤维混凝土的力学本构模型&#xff0c;本案例通过CAD随机纤维3D插件建立随机分布的纤维线模型&#xff0c;并将模型导入ABAQUS内&#xff0c;通过梁单元纤维模型&#xff0c;研究细观纤…

京东零售数据可视化平台产品实践与思考

导读 本次分享题目为京东零售数据可视化平台产品实践与思考。 主要包括以下四个部分&#xff1a; 1. 平台产品能力介绍 2. 业务赋能案例分享 3. 平台建设挑战与展望 作者&#xff1a;梁臣 京东 数据产品架构师 01平台产品能力介绍 1. 产品矩阵 数据可视化产品是一种利用…

C++ OpenCV中读取YAML文件的详解:定义、用途与实用示例

C OpenCV中读取YAML文件的详解&#xff1a;定义、用途与实用示例 在计算机视觉和图像处理领域&#xff0c;OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个广泛使用的开源库。YAML&#xff08;YAML Ain’t Markup Language&#xff09;作为一种简洁…

Maxscript如何从对象中选择底边或者顶边?

在3dMax中&#xff0c;比如选择了一些墙对象&#xff0c;如何才能使用Maxscript脚本选择所有底部边缘&#xff1f; 有很多方法&#xff0c;我们看一下下面这段代码&#xff1a; if isKindOf $ Editable_Poly do (local minZ $.min.zlocal getEdgeV $.getEdgeVertexlocal bo…

【4 以太网RDMA优化--面向可靠传输】

4 面向可靠传输的优化 在RDMA应用于高性能计算&#xff08;high performance computing&#xff0c;HPC&#xff09;时&#xff0c;IB网络中使用专用网卡和交换机并通过基于信用的流控策略构建无损网络环境。 当RDMA迁移到基于以太网构建的的数据中心网络时&#xff0c;由于普…

【计算机视觉】轮廓检测

一、轮廓检测 在计算机视觉中&#xff0c;轮廓检测是另一个比较重要的任务&#xff0c;不单是用来检测图像或者视频帧中物体的轮廓&#xff0c;而且还有其他操作与轮廓检测相关。 以下代码展示了如何使用 OpenCV 进行 图像阈值处理、寻找图像轮廓 和 绘制轮廓 的完整流程&…

iPhone批量删除照片的方法

对于每一个iPhone用户来说&#xff0c;照片管理是一项日常而重要的任务。随着时间的积累&#xff0c;无数的照片快速填满了我们的存储空间&#xff0c;从美丽的风景到重要的家庭聚会&#xff0c;每一张照片都记录着我们生活中的瞬间。然而&#xff0c;当存储空间即将耗尽时&…