Skip to content

Hexo Renderer which treats PDF files as posts. Based on pdf2htmlEX.

License

Notifications You must be signed in to change notification settings

34j/hexo-renderer-pdf

Repository files navigation

hexo-renderer-pdf

npm package Build Status Downloads Issues Code Coverage Commitizen Friendly Semantic Release

Hexo renderer based on pdf2htmlEX.

Installation

Note that WSL can be used (for Windows users).

wget -N https://github.com/pdf2htmlEX/pdf2htmlEX/releases/download/v0.18.8.rc1/pdf2htmlEX-0.18.8.rc1-master-20200630-Ubuntu-bionic-x86_64.deb -O pdf2htmlEX.deb
sudo apt install ./pdf2htmlEX.deb
npm install hexo-renderer-pdf --save

Just place pdf files in source/_posts (and run hexo s).

Configuration (Optional)

render_pdf:
  args: ['--process-outline', '0', '--zoom', '1.25'] # pdf2htmlEX additional arguments
  wrapWithIframe: true # Whether to wrap the pdf with an iframe
  wrapHtml: |
    <html>
      <head>
          <style>body{margin:0;overflow:hidden;}</style>
          <style>::-webkit-scrollbar{display:none;}</style>
          <title>%s</title>
          <meta charset='utf-8'>
          <meta name="description" content="%s">
          <meta name="keywords" content="%s">
          <meta name="author" content="%s">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
      </head>
      <body>
          <iframe scrolling="no" style='overflow:hidden; display:block; border:none; height:100vh; width:100%;' srcdoc='%s'></iframe>
      </body>
    </html>

Customizing CSS (Optional)

  • Copy the assets to the root of your hexo project
cp -r $(wsl -e wslpath -m /usr/local/share/pdf2htmlEX) .       
rm -r pdf2htmlEX/poppler 
rm -r pdf2htmlEX/pkgconfig
git add pdf2htmlEX
git commit -m "chore: copy pdf2htmlEX assets"
  • Specify data-dir in the pdf2htmlEX options
render_pdf:
  args: ['--data-dir', 'pdf2htmlEX']
  • Edit fancy.min.css as you like
#page-container {
  background-color: transparent;
  background-image: none;
}
#sidebar{
  background-color: transparent;
}
.pf{
  box-shadow: none;
}
img {
  mix-blend-mode: multiply;
}
@media (prefers-color-scheme: dark) {
  img {
    filter: invert(1);
    mix-blend-mode: lighten;
  }
}

Limitations

  • Somehow, using a non-specific fonts for math expressions results in Cannot flatten a non-CID font warning and the characters garbled. Using Cambria Math was a workaround.
  • Warning: encoding confliction detected in font: 3 is still displayed but it seems to be harmless.
  • You can open a PDF document in a text editor and write Front-matter in the same way as you would in markdown. It would be possible to generate this automatically from the PDF metadata, but this feature is not implemented.