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

  1. 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
        
  2. 编译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;
        
  3. 编译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
        
  4. 编译 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
        
  5. 编译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] <input.pdf> [<output.html>]
-f,--first-page <int>         需要转换的起始页 (默认: 1)
-l,--last-page <int>          需要转换的最后一页 (默认: 2147483647)
--zoom <fp>                   缩放比例
--fit-width <fp>              适合宽度 <fp> 像素
--fit-height <fp>             适合高度 <fp> 像素
--use-cropbox <int>           使用剪切框 (default: 1)
--hdpi <fp>                   图像水平分辨率 (default: 144)
--vdpi <fp>                   图像垂直分辨率 (default: 144)
--embed <string>              指定哪些元素应该被嵌入到输出
--embed-css <int>             将CSS文件嵌入到输出中 (default: 1)
--embed-font <int>            将字体文件嵌入到输出中 (default: 1)
--embed-image <int>           将图片文件嵌入到输出中 (default: 1)
--embed-javascript <int>      将javascript文件嵌入到输出中 (default: 1)
--embed-outline <int>         将链接嵌入到输出中 (default: 1)
--split-pages <int>           将页面分割为单独的文件 (default: 0)
--dest-dir <string>           指定目标目录 (default: ".")
--css-filename <string>       生成的css文件的文件名 (default: "")
--page-filename <string>      分割的网页名称  (default:"")
--outline-filename <string>   生成的链接文件名称 (default:"")
--process-nontext <int>       渲染图行,文字除外 (default: 1)
--process-outline <int>       在html中显示链接 (default: 1)
--printing <int>              支持打印 (default: 1)
--fallback <int>              在备用模式下输出 (default: 0)
--embed-external-font <int>   嵌入局部匹配的外部字体 (default: 1)
--font-format <string>        嵌入的字体文件后缀 (ttf,otf,woff,svg) (default: "woff")
--decompose-ligature <int>    分解连字-> fi (default:0)
--auto-hint <int>             使用fontforge的autohint上的字体时不提示 (default: 0)
--external-hint-tool <string> 字体外部提示工具 (overrides --auto-hint) (default: "")
--stretch-narrow-glyph <int>  伸展狭窄的字形,而不是填充 (default: 0)
--squeeze-wide-glyph <int>    收缩较宽的字形,而不是截断 (default: 1)
--override-fstype <int>       clear the fstype bits in TTF/OTF fonts (default:0)
--process-type3 <int>         convert Type 3 fonts for web (experimental) (default: 0)
--heps <fp>                   合并文本的水平临界值,单位:像素(default: 1)
--veps <fp>                   vertical threshold for merging text, in pixels (default: 1)
--space-threshold <fp>        断字临界值 (临界值 * em) (default:0.125)
--font-size-multiplier <fp>   一个大于1的值增加渲染精度 (default: 4)
--space-as-offset <int>       把空格字符作为偏移量 (default: 0)
--tounicode <int>             如何处理ToUnicode的CMap (0=auto, 1=force,-1=ignore) (default: 0)
--optimize-text <int>         尽量减少用于文本的HTML元素的数目 (default: 0)
--bg-format <string>          指定背景图像格式 (default: "png")
-o,--owner-password <string>  所有者密码 (为了加密文件)
-u,--user-password <string>   用户密码 (为了加密文件)
--no-drm <int>                覆盖文档的 DRM 设置 (default: 0)
--clean-tmp <int>             转换后删除临时文件 (default: 1)
--data-dir <string>           指定的数据目录 (default: ".\share\pdf2htmlEX")
--debug <int>                 打印调试信息 (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

相关文章
  1. windows7系统下fis3安装教程
  2. tar分卷压缩与解压缩
  3. fis3-smarty 安装使用详解
  4. 对Web静态资源缓存自动更新的思考与实践的总结
  5. crontab 定时任务
  6. CentOS 6.* 64位系统升级gcc4.4.7升级gcc5.1详解
本站版权
1、本站所有主题由该文章作者发表,该文章作者与尘埃享有文章相关版权
2、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和尘埃的同意
3、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、原文链接:
二维码
Posted in linux技术, pdf2html
Comments are closed.