html无损转换pdf,Pdf2html :高保真PDF至HTML转换

高保真PDF至HTML转换

pdf2htmlEX介绍

传统pdf2html有两种:

一种相当于pdf2text加一些比较弱的格式,基本跟pdf2text也差不了多少

另一种是把所有渲染成图片然后嵌到一个html,结果是文字信息都丢失(不能选择,拷贝),生成的文件还巨大。

pdf2htmlEX结合二者优点,既保留了文字,又保留了格式。

具体来说有如下特性

1.从pdf提取字体

2.保证渲染准确性,针对web进行优化(包括减少文件大小,文字行合并,(为HTML文字选择)字体重编码等等)

3.其他内容用图片显示

4.单文件输出,一个HTML搞定一切

pdf2htmlEX开源主页地址

详细介绍

中文讨论组

编译流程:

官方编译文档:https://github.com/coolwanglu/pdf2htmlEX/wiki/Building

对环境要求较高,建议使用最新机器,本例安装采用centos7

YUM基本包:

yum install cmake gcc gcc-c++ gnu-getopt java-1.8.0-openjdk libpng-devel fontforge-devel cairo-devel poppler-devel libspiro-devel poppler-data libjpeg-turbo-devel git fontconfig-devel glibc-static glibc-devel libtool-ltdl-devel zlib-devel poppler-glib-devel mk-configure.noarch libjpeg-turbo libtiff giflib-devel libXt-devel automake bzip2 libuninameslist-devel libspiro dbus-python-devel pango-devel chrpath uuid-c++ uuid uthash-devel.noarch jpackage-utils.noarch gettext libxml2-python27 libxml2-python26 python27-python-devel libxslt-python26 libxslt libxslt-devel python-devel python-javapackages.noarch –nogpgcheck poppler-cpp poppler-cpp-devel libstdc++48-static openjpeg-devel libjpeg libjpeg-devel libpng freetype freetype-devel libxml2 libxml2-devel zlib glibc glib2 glib2-devel bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel libtool libtool-libs libevent-devel libevent openldap openldap-devel nss_ldap openldap-clients openldap-servers libtool-ltdl bison vim wget make crontabs mlocate ntp lrzsz autoconf libx* qt-* qt4-devel libtiff libopen* gtk2 gtk2-devel gtk2-devel-docs kernel-devel gtk-doc cjkuni-uming-fonts cjkuni-ukai-fonts

编译openjpeg:

wget http://downloads.sourceforge.net/openjpeg.mirror/openjpeg-2.1.0.tar.gz;

tar -xzf openjpeg-2.1.0.tar.gz;

cd openjpeg-2.1.0;

cmake .;

make && make install;

编译poppler:

wget http://poppler.freedesktop.org/poppler-0.35.0.tar.xz;

tar -xf poppler-0.35.0.tar.xz;

cd poppler-0.35.0;

./configure --enable-xpdf-headers --enable-libopenjpeg ;

make && make install;

ln -s /usr/local/lib/libpoppler.so.54 /usr/lib64/libpoppler.so.54

ln -sv /usr/share/poppler /usr/local/share

编译 fontforge

git clone https://github.com/coolwanglu/fontforge.git fontforge;

cd fontforge;

git checkout pdf2htmlEX && ./autogen.sh;

./configure && make V=1 && make install

cp fontforge.pc /usr/local/lib/pkgconfig/;

ln -s /usr/local/lib/libfontforge.so.2 /usr/lib64/libfontforge.so.2

#设置环境变量

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

编译pdf2htmlEX

git clone git://github.com/coolwanglu/pdf2htmlEX.git;

cd pdf2htmlEX;

cmake . ;

make && make install;

FQA

1.pdf2htmlEX 自动隐藏转码后没有找到字体库的字,导致html中文字无法显示的解决办法

如果系统没有安装字体时,pdf2htmlEX会默认隐藏该字段内容。转换的html没有内容。

通过修改源码:

./src/HTMLRenderer/font.cc

// TODO: this function is called when some font is unable to process, may use the name there as a hint

void HTMLRenderer::export_remote_default_font(long long fn_id)

{

f_css.fs << "." << CSS::FONT_FAMILY_CN << fn_id << "{font-family:sans-serif;visibility:visible;}" << endl;

// f_css.fs << "." << CSS::FONT_FAMILY_CN << fn_id << "{font-family:sans-serif;visibility:hidden;}" << endl;

}

pdf2htmlEX --help 中文解释

help:

用法: pdf2htmlEX [options] []

-f,--first-page 需要转换的起始页 (默认: 1)

-l,--last-page 需要转换的最后一页 (默认: 2147483647)

--zoom 缩放比例

--fit-width 适合宽度 像素

--fit-height 适合高度 像素

--use-cropbox 使用剪切框 (default: 1)

--hdpi 图像水平分辨率 (default: 144)

--vdpi 图像垂直分辨率 (default: 144)

--embed 指定哪些元素应该被嵌入到输出

--embed-css 将CSS文件嵌入到输出中 (default: 1)

--embed-font 将字体文件嵌入到输出中 (default: 1)

--embed-image 将图片文件嵌入到输出中 (default: 1)

--embed-javascript 将javascript文件嵌入到输出中 (default: 1)

--embed-outline 将链接嵌入到输出中 (default: 1)

--split-pages 将页面分割为单独的文件 (default: 0)

--dest-dir 指定目标目录 (default: ".")

--css-filename 生成的css文件的文件名 (default: "")

--page-filename 分割的网页名称 (default:"")

--outline-filename 生成的链接文件名称 (default:"")

--process-nontext 渲染图行,文字除外 (default: 1)

--process-outline 在html中显示链接 (default: 1)

--printing 支持打印 (default: 1)

--fallback 在备用模式下输出 (default: 0)

--embed-external-font 嵌入局部匹配的外部字体 (default: 1)

--font-format 嵌入的字体文件后缀 (ttf,otf,woff,svg) (default: "woff")

--decompose-ligature 分解连字-> fi (default:0)

--auto-hint 使用fontforge的autohint上的字体时不提示 (default: 0)

--external-hint-tool 字体外部提示工具 (overrides --auto-hint) (default: "")

--stretch-narrow-glyph 伸展狭窄的字形,而不是填充 (default: 0)

--squeeze-wide-glyph 收缩较宽的字形,而不是截断 (default: 1)

--override-fstype clear the fstype bits in TTF/OTF fonts (default:0)

--process-type3 convert Type 3 fonts for web (experimental) (default: 0)

--heps 合并文本的水平临界值,单位:像素(default: 1)

--veps vertical threshold for merging text, in pixels (default: 1)

--space-threshold 断字临界值 (临界值 * em) (default:0.125)

--font-size-multiplier 一个大于1的值增加渲染精度 (default: 4)

--space-as-offset 把空格字符作为偏移量 (default: 0)

--tounicode 如何处理ToUnicode的CMap (0=auto, 1=force,-1=ignore) (default: 0)

--optimize-text 尽量减少用于文本的HTML元素的数目 (default: 0)

--bg-format 指定背景图像格式 (default: "png")

-o,--owner-password 所有者密码 (为了加密文件)

-u,--user-password 用户密码 (为了加密文件)

--no-drm 覆盖文档的 DRM 设置 (default: 0)

--clean-tmp 转换后删除临时文件 (default: 1)

--data-dir 指定的数据目录 (default: ".\share\pdf2htmlEX")

--debug 打印调试信息 (default: 0)

-v,--version 打印版权和版本信息

-h,--help 打印使用帮助信息

3.常用命令:

1.转码操作

1.1 pdf2htmlEX pdf/test.pdf --debug=1 #开启debug模式,用于监控转码过程

1.2. pdf2htmlEX -f 3 -l 5 --fit-width=1024 --bg-format=jpg pdf/test.pdf #只有第三,第四和第五页转换,该页的宽度为1024像素。生成JPEG格式背景图像

1.3. pdf2htmlEX --embed=cfijo --dest-dir=out pdf/test.pdf # 分离所有资源(字体,图片,CSS和JavaScript)并将存储在指定的out文件中

1.4. pdf2htmlEX --embed=cfijo --split-pages=1 --dest-dir=out --page-filename=test-%d.page pdf/test.pdf #分离所有资源(字体,图片,CSS和JavaScript) 并按照--split-pages分离所有页面test-%d.page,存放在指定out目录

1.5 pdf2htmlEX pdf/test.pdf --optimize-text =1 #分栏时每一行文字生成在一个div标签内

查看pdf字体

#emb 意思: 字体是否内置

[root@localhost ]# pdffonts 3.pdf

name type encoding emb sub uni object ID

----------------- ------------- ---------- --- --- --- ---------- --- ---------- --- ---------

_GBK CID TrueType GBK-EUC-H no no no 16 0

_GBK CID TrueType GBK-EUC-H no no no 17 0

SSJ0+ZCNHHr-1 Type 1 Custom yes no yes 19 0

E-BZ+ZCNHHr-3 Type 1 Custom yes no yes 18 0

E-BX+ZCNHHs-5 Type 1 Custom yes no yes 43 0

SSJ0+ZCNHHs-6 Type 1 Custom yes no yes 21 0

E-FZ+ZCNHHs-7 Type 1 Custom yes no yes 20 0

DY2+ZCNHHs-8 Type 1 Custom yes no yes 44 0

减少生成的html的字体的大小

https://github.com/yu-liang-kono/pdf2htmlEXOptimize

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

送你一个Git命令地图

上周&#xff0c;公众号举办了一个活动&#xff0c;抽取Git鼠标垫&#xff0c;现在已经结束了&#xff0c;大家不用再过去找&#xff0c;周末我收到了鼠标垫&#xff0c;然后看到有几个读者朋友圈也发了&#xff0c;我感觉也算是做了一个好事&#xff0c;拿到鼠标垫&#xff0c…

文件的权限与隐藏属性

一、文件的属性 1. 权限详解 r 表示读权限————————————读取文件内容 w 表示写权限————————————编辑、新增、修改内容(非删除) x 代表执行权限———————————读取文件内容 — 表示没有该权限——————————读取文件内容 2. 权限对目录的重…

利用insert、update和delete命令可以同时对多个表进行操作_学习笔记-操作系统(1)...

概念负责管理协调硬件、软件等计算机资源的工作为上层用户、应用程序提供简单易用的服务是一种系统软件功能和目标资源的管理者处理机管理&#xff1a;进程管理&#xff08;进程控制、进程同步、进程通信、死锁处理、处理机调度&#xff09;存储器管理&#xff1a;内存管理&…

uboot和Linux内核移植

这篇文章是一个读者昨晚发给我的&#xff0c;文章很长&#xff0c;里面的细节也比较多&#xff0c;但是微信公众号只能发 50000 字的文章&#xff0c;如果想阅读全文。请发送「 uboot和Linux内核移植 」到公众号后台获取下载链接。这篇文章是一个读者昨晚发给我的&#xff0c;文…

android界面元素识别,Android 10不能使用uiautomatorviewer定位元素的终极解决方法

Android app 元素定位除了使用Appium Inspector 外&#xff0c;还可以使用Android SDK 里tools中的uiautomatorviewer 工具。但今天打算使用 uiautomatorviewer 进行元素定位的时候&#xff0c;发现无法截图&#xff0c;并报如下错误&#xff1a;Unexpected error while obtain…

小程序背景图满屏_竞赛答题小程序

越来越多的企业部门团体举办知识竞赛答题活动&#xff0c;根据更加好玩的答题活动规则开发了本款知识竞赛答题小程序。本知识竞赛答题小程序采用云开发&#xff0c;无需搭建服务器&#xff0c;无需域名即可使用数据管理能力&#xff0c;更方便答题活动等场景&#xff0c;无需域…

Spring的核心机制依赖注入,Junit测试与Java基础Getter和Setter两种方法意义——2017.07.26...

今天对Spring的基础理解又加深了一丢丢。 1 首先Spring的基础配置文件中&#xff0c;主要由以下几个配置文件&#xff0c; 1 <beans xmlns&#xff1a;xsi"http://w3.org/2001/XMLSchema-instance" 2 xmlns"http://www.springframework.org/schem…

STM32的map文件学习笔记

前言 前几个月针对公司自己的芯片写了个程序&#xff0c;这个程序有个硬性要求&#xff0c;就是能用的FLASH空间只有4KB&#xff0c;之前已经写得差不多了&#xff0c;最终占用空间3.6KB。这不&#xff0c;最近又得加需求&#xff0c;还剩一点点FLASH空间可以使用&#xff0c;这…

html网易云音乐图片轮播效果,Vue之网易云音乐PC版轮播图的实现

Github - program-learning-lists最近在刷网易云音乐歌单时发现首页的轮播图很有意思&#xff0c;正好自己想尝试做一个PC版的网易云音乐&#xff0c;于是就是使用Vue去做这个demo&#xff0c;废话少说&#xff0c;我要出招了&#xff0c;接招吧页面的DOM结构:style"slide…

python教程答案十九章_Python 编程从入门到实践 第19章 注销一节问题

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼现在网上的教程都是第1版的&#xff0c;很多代码都不能用&#xff0c;官网下了第2版的代码&#xff0c;一路用第1版教程修修改改好不容易到第19章 19.2.3 注销 这一节&#xff0c;现在遇到个问题&#xff0c;过不去了。。。求教大家…

深入理解mybatis原理, Mybatis初始化SqlSessionFactory机制详解(转)

文章转自http://blog.csdn.net/l454822901/article/details/51829785 对于任何框架而言&#xff0c;在使用前都要进行一系列的初始化&#xff0c;MyBatis也不例外。本章将通过以下几点详细介绍MyBatis的初始化过程。 1.MyBatis的初始化做了什么 2. MyBatis基于XML配置文件创建C…

我有个队友,叫悟空

昨晚&#xff0c;是我们篮球队年终聚会&#xff0c;好像也是第一次组织篮球队的聚会&#xff0c;之前就只知道在场上打球&#xff0c;场下就没有过这样的吃饭聚会。年终的时候&#xff0c;聚会特别多&#xff0c;该交流感情的交流感情&#xff0c;该年会抽奖的就年会抽奖&#…

go语言html css,html – 在Golang中加载图像和CSS

我在项目根目录的package main中的server.js中设置了一个路由http.HandleFunc( “/”,route.IndexHandler)IndexHandler在包路由中实现,如下所示&#xff1a;func IndexHandler(w http.ResponseWriter, r *http.Request) {data:struct{Name string}{"My name",}util.…

python队列只能一个个读取吗_python队列Queue的详解

QueueQueue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构&#xff0c;即队列&#xff0c;用来在生产者和消费者线程之间的信息传递基本FIFO队列class Queue.Queue(maxsize0)FIFO即First in First Out,先进先出。Queue提供了一个…

C#基于LibUsbDotNet实现USB通信(一)

网上C#USB通信的资料比较少&#xff0c; 基本上都是基于LibUsbDotNet 和 CyUsb, 关于打印机设备的还有一个OPOS。 本篇文章基于LibUsbDotNet。 1. 下载并安装 LibUsbDotNet 安装文件。 2. 运行Filter Wizard, Install a device filter。 安装需要通信的usb设备。 3. 建一个简单…

一个大神的Android成长之路

这篇文章是我的一个朋友写的&#xff0c;总结了这些年的技术成长之路&#xff0c;我觉得对于很多技术人都有借鉴的作用&#xff0c;技术是相通的&#xff0c;不要整天想一口气吃成一个胖子&#xff0c;不积跬步无以至千里&#xff0c;既然选择了技术这条路&#xff0c;就不畏艰…

银联Apple Pay 总结

最近在空余的时间做了银联Apple Pay,是银联快捷支付,在手机钱包里面绑定银行卡,在购买商品的时候直接指纹支付就可以了. 首先你看一线Apple Pay的官方文档:Apple Pay Human Interface Guidelines. 因为按钮和界面的原因,苹果拒绝我2次了. 按钮要使用苹果自带的Apple Pay按钮,要…

jsp页面内引入静态html,JSP技术实现动态页面到静态页面的方法

本文是介绍了jsp技术实现动态页面到静态页面的方法&#xff0c;分享给大家&#xff0c;具体如下&#xff1a;对于JSP技术实现动态页面到静态页面的方案&#xff0c;我们从三个步骤来说明&#xff1a;JSP技术实现动态页面到静态页面的方案第一&#xff1a;为了能深入浅出的理解这…

python loads_python dumps和loads区别详解

这篇文章主要介绍了python dumps和loads区别详解,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下一.概念理解json是一种轻量级的数据交换格式&#xff0c;对象由花括号括起来的逗号分割的成员构成&#xff0c;成…

串口通讯你真的会了吗?不妨看看这些经验

平时使用串口打印出现乱码的绝大部分原因是串口波特率没对。那么我们怎么测量实际的波特率呢&#xff1f;在这之前&#xff0c;顺便一起回顾一下波特率的概念。什么是波特率、比特率&#xff1f; 比特率(Bitrate)表示每秒钟传输的二进制位数&#xff0c;单位为比特每秒(bit/s)。…