ruby on rails 中使用pdfkit生成pdf

JavaScript030

ruby on rails 中使用pdfkit生成pdf,第1张

说是使用pdfkit,其实做工作的还是wkhtmltopdf。

一、新建项目

rails new mypdf --skip-bundle

进入项目:cd mypdf,打开Gemfile:vim Gemfile

修改source为https://ruby.taobao.com

添加:gem 'pdfkit'

运行bundle install

二、配置

在项目目录下的config/initializers里加上pdfkit.rb文件,修改内容为:

PDFKit.configure do |config|

config.wkhtmltopdf = '/path/wkhtmltopdf'

end

config.wkhtmltopdf配置的是wkhtmltopdf的路径,要确保pdfkit能找到它。

其它的配置请参考:http://wkhtmltopdf.org/usage/wkhtmltopdf.txt,里面的横杠用下划线代替。

三、使用

在controller里的相应位置加入:

用渲染的模版内容生pdf:

html = render_to_string(:template =>"pdf_template.erb",:layout =>false)

kit = PDFKit.new(html)

kit.stylesheets <<"#{Rails.root}/app/assets/assets/stylesheets/pdf.css"

#kit.to_pdf # inline PDF

#kit.to_file('/path/pdf.pdf')

send_data(kit.to_pdf, :filename =>"mypdf.pdf", :type =>"application/pdf")

#render :text =>kit.to_pdf

用url的内容生成pdf:

url = "http://www.baidu.com"

kit = PDFKit.new(url)

# kit.stylesheets <<"#{Rails.root}/app/assets/assets/stylesheets/pdf.css" # 用url时就不可以用css样式了。

#kit.to_pdf # inline PDF

#kit.to_file('/path/pdf.pdf')

send_data(kit.to_pdf, :filename =>"mypdf.pdf", :type =>"application/pdf")

注: kit = PDFKit.new(url, cookie: {"cookie_name"=>"cookie_content"}),如果需要登录的话,可以用cookie。cookie可以自己获取。

另外,如果你的页面里有js需要运行,最好在设置文件里设置如下:

javascript_delay: 1000

它的默认值是200毫秒。把加大一些,以便让js运行完成。

这样就可以用了。

1.首先安装PDFKIT

npm install pdfkit

2.新建一个文件PDFKITTEST.js

Code:

var pdf = require('pdfkit')

var fs = require('fs')

var pdfo = new pdf()

var text = 'What you wanna write to the pdf document.'

pdf.pipe(fs.createWriteStream('Aim.pdf'))

pdfo.text(text,0,0)

pdfo.end()

3.运行

node PDFKITTEST.js

当前目录下会出现一个PDF文件,文件名为Aim.pdf,。

2017年夏天,在苹果全球开发者大会(WWDC)上,苹果公司终于推出了针对于 iOS 的 PDFKit 支持。PDFKit 自从 MacOS 10.4 以来一直在 AppKit for MacOS 中。但 UIKit 却迟迟得不到支持,尽管苹果公司之前在 iBooks 和 Mail 中使用过 PDFKit , 但是该框架并未向开发人员开房。

PDFKit 包含了大量关于 PDF 相关的功能,例如,打开,修改,绘图和保存 PDF ,也包含了搜索文本。在 iOS 11 后,苹果终于开放了 PDFKit 。目前(虽然离 PDFKit 发布已经过了一年多),但是目前中文资料和 Demo 确实比较少,下面笔者就带着大家简单的了解一下 PDFKit。

主要核心功能如下:

PDFView

PDFDocument

PDFPage

PDFAnnotation

让我看到你们的双手, put your hands up!

引入 #import <PDFKit/PDFKit.h> ,创建 PDFView ,创建之前,首先要创建 PDFDocument ,这里通过文件路径 URl 进行创建。

创建 PDFView ,将 PDFDucument 对象赋给 PDFView。

至此,就实现了 PDF 的读取及显示。

首先获取 PDFDocument 的属性 PDFPage :

通过 PDFPage 的对象方法,可以获取 PDF 的缩略图,这里需传入图片的 size:

创建 collectionViewCell ,通过 collectionView 就可以实现一个大致的功能。

点击跳转

获取 cell 的点击事件,取出所点击的 PDFPage 对象,用下述方法进行跳转:

PDFOutline 是一个层级关系的对象,他表示 PDF 的大纲(也就是我们常用的书签)。每个 PDFOutline 对象都可通过 childAtIndex: 方法获取出他的孩子对象, 注意 ,这里需要先判断 numberOfChildren ,以确定该 outline 对象存在多少个孩子节点,避免下标超界引发的崩溃。

实现大纲功能

从 PDFDocument 中获取 PDFOutline

遍历 outline 孩子节点(默认只遍历一层)

当点击节点时,判断有无孩子节点,进行当前数组的新增或删除。

这里搜索功能主要靠下述方法实现

调用此方法之前,首先需将 PDFDocument 设置代理,通过 PDFDocument 的代理进行回调。获取 PDFSelection 对象,

再根据 selection 对象显示搜索内容。

调用下述方法即可对 PDFView 进行缩放,

实现双击缩放或还原:

这里通过设置 pdfView 的 scaleFactor 属性即可实现, 注意 : scaleFactorForSizeToFit 属性是当前 PDF 充满屏幕的比例。

GitHub : https://github.com/japho/PDFDemo

本文原地址: https://japho.top/2018/11/21/guideline-of-pdfkit/