轶哥博客

妄图改变世界的全栈程序员。

Node.js打印PDF文件

在Windows平台,使用Node.js实现原生打印PDF通常需要借助C++。例如node-printer,需要安装Python、Visual Studio,同时还需要使用node-pdfium进行PDF转EMF。

也有一些二进制(exe)命令行打印解决方案,但是都有一些缺陷。

例如:

  • 借助 Adobe Reader 或 Acrobat 实现打印,则Windows XP、7、10需要安装不同版本的 DPF 软件,并且在打印时会打开该软件。
  • Sumatra PDF可以静默进行命令行打印,但是在80mm热敏纸打印机中的打印效果较差(不清晰)。

理论上这些方案支持所有能在Windows中安装驱动的打印机,包括非串口的热敏纸打印机。大多数方案都是基于PDFium的实现,如果您有足够的时间精力,可以深入研究PDFium

JS推测Base64图片类型

部分业务中会碰到Base64图片文本。

例如:

  • 微信JS-SDK - “拍照或从手机相册中选图接口”,wx.chooseImage与wx.request结合获取Base64数据。“获取本地图片接口”,wx.getLocalImgData返回Base64数据。
  • 微信小程序中,图片访问地址受到白名单限制,有可能采用base64数据直接在接口返回。
  • 某种读卡器获取到的图片数据以Base64格式返回。

如果返回的图片数据中不包含格式前缀(甚至某个微信接口在ios中错误返回image/jgp类型),那就需要推测图片类型。

Electron 预加载远程页面提升用户体验

使用场景

Electron 内置 ChromiumNode.js,为了提升用户体验,通常 Electron 封装的前端静态文件存储在客户端本地。但总有一些特殊情况,会使用到部分远程页面。

比如微信扫码登录,需要远程访问微信的登录站点,获得扫码结果后跳转到我们自己的服务器,然后通知到主进程来关闭对应的渲染进程。目前这个问题有更高效的解决方案,详见博文《无刷新微信扫码登陆解决方案》

再比如,部分页面还没有实现前后端分离,为了产品尽快上线,也需要嵌入远程URL。

直接在Electron中访问远程地址是有风险的,控制远程地址切回本地页面也是较为繁琐的。

以上需求可以使用webview标签实现。这是Electron为我们提供的一个特殊组件,类似于iframe但跟iframe不同,确保了应用的安全性。类似于AndroidioswebviewCrosswalk,Electron中的webview也支持和渲染进程相互通讯。

Node.js 网页截图服务 - 网页快照API

Puppeteer 是 Headless Chrome Node API。也就是谷歌将Chrome无头浏览模式的接口封装成Node.js的API。利用Puppeteer实现网页截图/网页快照服务是非常容易的。

webpage-capture是基于Puppeteer实现带权限认证(多APP授权)、配备消息队列管理的网页快照API。

源代码:https://github.com/yi-ge/webpage-capture
功能:可对百万级网页数据进行截图采集的API服务。
Swagger文档:https://snapshot.openapi.site/documentation

创业之殇——管理

最近一年,我一直在研究优秀的项目、写代码、学东西。

我也不知道为什么突然谈起管理这个话题。

小公司也需要管理

有人说“小公司最好没有管理,一定要做减法”。从某种角度上看或许是对的,“跟战略对口的人共事,团队成员一定要那种能够自我驱动的人”。

这个说法在几年前可能我会非常赞同,但是就现在看来,这话说得太绝对。

选人要看品质,但是“完全自我驱动的人,和完全需要踢着屁股往前走的人,是两个极端,现实中都是很少的(——格总在人间)”,有自驱动力的人也需要鼓励,也需要管理

如果有自我驱动力的员工,他的成绩没有得到认可,对他来说他的感觉可能就是:“每天都好像在考试,但是从来不公布分数。总是不知道自己做得好不好,也不知道以后会怎么样...” (节选来自插座学院创始人“何川”文章)。

他没有安全感,也没有成就感。

公司如果不能让好员工全心投入到工作中,就留不住好员工

当你对即将离职的员工说:“你做的很好,你很优秀,我跟其他领导也一直在表扬你”这些话的时候,已经晚了。

PHP 7.3正式版+常见拓展的Docker镜像

2018年12月6日PHP官方发布了PHP 7.3.0 正式版。恰逢最近在写一个PHP在线练习的网站,特意去翻了一下7.3.0正式版的Docker镜像。

因为官方镜像只包含了最基本的模块,像pdo_mysqlredis之类的模块并没有包含进去。在hub.docker.com中找到一个相对比较合适的 PHP 7.2 版本的Dockerfilehttps://hub.docker.com/r/phpdocker/phpdocker/),却发现作者将MariaDBRedis ServerNode.js等内容给编进了Image。

我比较喜欢干净的Docker Image,一个镜像只做一个事情。像MySQLRedis之类的数据库,可以单独启动相应的模块。

因此我在前人的基础上,移除了MariaDBRedis ServerNode.js并升级PHP版本到7.3.0正式版。

树莓派挂载硬盘Shell脚本

快速挂载Raspberry PI硬盘,可挂载USB硬盘。
注意:此脚本一次性将硬盘整个空间分为一个区,格式化为ext4格式,如果需要分多个区请手工操作。

理论上此脚本适合大部分Linux系统,不推荐在服务器中使用这样的脚本。

  上一页下一页