一种PDF生成方法、装置及设备
技术领域
本发明实施例涉及计算机技术领域,更具体地,涉及一种PDF生成方法、装置及设备。
背景技术
文字广告是以文字形式向公众介绍商品、宣传服务或告知文体活动等的一种传播方式。文字广告可以是单独的文字形式,也可以是与音像广告、招牌广告、橱窗广告和模型广告等物像广告并用。在新闻媒体,如报纸中,文字广告具有布局灵活、短小精干和费用低廉的特点,因此被广泛应用。
文字广告的页面效果和PDF效果高度一致,做到了即见即所得,其强大的文字编辑功能和PDF输出效果相同,确保了文字广告产品的易用性、灵活性和高效性,因此一般采用输出PDF文本。
目前,文字广告系统非常依赖SVG文件,通过对SVG文件中的内容进行微调,以达到文字广告细节的调整。而SVG文件非常局限于PC端,不能进行跨平台操作生成PDF。并且,通过SVG文件编辑有很多缺陷,包括:文字不支持换行,需要用多个文字块来模拟;文字字符间距不可通过样式直接设定,需要计算每个字符的横纵坐标,每次变动位置或文字长度都要重新计算;文字与边框适应不方便,需要人工维持;文字框编辑状态需要人工模拟;定位方式不统一,有些标签采用横纵坐标进行定位,有些只能用matrix进行定位;横排文字默认根据基线定位,若要上或下对齐需要进行转换,不同字体不同字号转换偏差不同;纵排文字在不同浏览器中定位方式不同,若要向左或向右对齐需要转换,不同字体不同字号转换偏差不同;输出的PDF打印格式很难基于HTML4的标准进行渲染得到相应的PDF打印文本。
因此,目前的文字广告系统由于依赖SVG文本,存在局限于PC端,且编辑输出PDF文本不方便的问题。
发明内容
为了解决上述问题,本发明实施例提供了一种PDF生成方法、装置及设备。
根据本发明实施例的第一方面,本发明实施例提供了一种PDF生成方法,该方法包括:识别网页资源文件的文本内容,网页资源文件包括HTML网页、普通文本网页、富文本网页和Markdown文本网页,文本内容包括HTML文本、CSS文本和JavaScript文本;将网页资源文件的文本内容转换为矢量图像结果;将矢量图像结果按照1:1比例渲染生成PDF文本文件,PDF文本文件的格式高于PDF 1.4;将PDF文本文件转换为打印所需的PDF格式的文本文件,所需的PDF格式包括PDF/X-1a。
根据本发明实施例的第二方面,本发明实施例提供了一种PDF生成装置,该装置包括:识别模块,用于识别网页资源文件的文本内容,网页资源文件包括HTML网页、普通文本网页、富文本网页和Markdown文本网页,文本内容包括HTML文本、CSS文本和JavaScript文本;第一转换模块,用于将网页资源文件的文本内容转换为矢量图像结果;渲染模块,用于将矢量图像结果按照1:1比例渲染生成PDF文本文件;PDF文本文件的格式高于PDF1.4;第二转换模块,用于将PDF文本文件转换为打印所需的PDF格式的文本文件,所需的PDF格式包括PDF/X-1a。
根据本发明实施例的第三方面,本发明实施例提供了一种电子设备,该电子设备包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器调用程序指令能够执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的PDF生成方法。
根据本发明实施例的第四方面,本发明实施例提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序使计算机执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的PDF生成方法。
本发明实施例提供了一种PDF生成方法、装置及设备,通过在浏览器中编辑HTML文本内容,到显示相关内容,然后通过编辑相关内容之后输出整个文档内容到符合打印所需的PDF格式的文本文件中。最终通过浏览器显示,或通过编辑HTML内容的编辑器之后输出的HTML富文本内容,以即见即所得的方式还原最终看到的效果内容,并且能以不失真的方式显示最终结果,能快速适配不同的打印需求。本发明实施例无需更多地关注渲染文字比例、失真效果、平台支持等,同时可以很方便跟B/S架构等系统业务相结合,如打印、广告、写真等行业,实现自己的业务需要;从根本上减少了实际开发成本,规避了实际打印需求流程中的不确定性。从小而实用的角度出发解决了打印行业入门级的痛点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些图获得其他的附图。
图1为本发明实施例的一种PDF生成方法的总体流程图;
图2为本发明实施例的一种PDF生成方法的详细流程图;
图3为本发明实施例的一种PDF生成装置的结构示意图;
图4为本发明实施例的一种电子设备的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
目前,文字广告系统对标其他系统,一般基于B/S结构,同时针对广告的文字、线条和图形进行快速调整,并输出广告行业特有的矢量的广告内容的PDF文件,整个文字广告系统比采用传统的C/S结构更加轻巧、简便,同时能跨平台到不同的操作系统中使用。
但是,文字广告系统由于非常依赖SVG文件,因此非常局限于PC端,而不能进行跨平台操作生成PDF。另外,通过SVG文件编辑有很多缺陷,且输出的PDF打印格式很难基于HTML4的标准进行渲染得到相应的PDF打印文本。
进一步地,国际标准化组织(ISO)批准了针对图形内容交换的PDF/X新标准。根据ISO19004-1标准,PDF/X是PDF的一种类型,PDF/X的目的在于为设计员、绘图员、工程师和图像艺术家提供一种可为任何服务提供者正确打印的电子文件格式。PDF/X使保持完全一致性成为可能,即使文件被人们在多处位置,用不同的机器处理,也一样。这种格式对大多数网络公司的打印就绪文件传输很理想;这里,打印就绪信息的输送者和接收者并无很强的互相关联。除了为打印任务提供坚实的传送格式之外,PDF/X还具备其他好处,包括有一个文件查看器,更佳的压缩效果(文件大小更小),支持专色印刷色彩这种识别打印条件(比如哪个文件已就绪)的技术手段,以及更多。不过,也与PDF/A一样,PDF/X的好处也伴随着一些妥协。比如透明、加密和JBIG2压缩等功能在DF/X中就是被禁止的。PDF/X-1a是PDF/X格式中的一种。
图1为本发明实施例的一种PDF生成方法的总体流程图,如图1所示,本发明实施例提供了一种PDF生成方法,该方法包括:
S1、识别网页资源文件的文本内容,网页资源文件包括HTML网页、普通文本网页、富文本网页和Markdown文本网页,文本内容包括HTML文本、CSS文本和JavaScript文本;
S2、将网页资源文件的文本内容转换为矢量图像结果;
S3、将矢量图像结果按照1:1比例渲染生成PDF文本文件,PDF文本文件的格式高于PDF 1.4;
S4、将PDF文本文件转换为打印所需的PDF格式的文本文件,所需的PDF格式包括PDF/X-1a。
具体地,首先,该PDF生成方法能直接在网页端识别包括HTML网页、普通文本网页、富文本网页和Markdown网页的文本内容,这些文本内容包括HTML文本、CSS文本和JavaScript文本。然后针对这些文本内容转换为矢量图像结果,将生成的矢量图像结果按照1:1比例,即完全对应地渲染生成PDF文本文件,该PDF文本文件的版本为能转换为符合打印要求的PDF格式的文本文件的PDF版本,最后将该PDF文本文件转换为符合打印要求的PDF格式的文本文件。例如,打印所需的PDF格式为PDF/X-1a,则渲染成成的PDF文本文件的格式高于PDF 1.4,才能满足要求。
本发明实施例提供的PDF生成方法,能直接在浏览器中根据正常输出显示的网页资源文件,就能在不失真的情况下输出相应比例内容的PDF文本文件,并转换为符合打印要求的PDF格式的文本文件。即该方法不局限于PC端,能跨平台应用到不同的操作系统,直接通过网页方便、快捷地编辑与打印;且不需要更多地关注渲染文字比例和失真效果,可以很方便地和B/S架构等系统业务结合,实现自己的业务需要,从根本上减少了实际开发成本。
基于上述实施例,图2为本发明实施例的一种PDF生成方法的详细流程图,如图2所示,识别网页资源文件的文本内容,并将网页资源文件的文本内容转换为矢量图像结果,具体包括:
在地址栏输入URL,生成DOM树;将DOM树构建WebKit绘图上下文;将WebKit绘图上下文生成矢量图像结果。
基于上述实施例,在地址栏输入URL,生成DOM树,具体包括:
在地址栏输入URL,利用WebKit调用资源加载器加载相应资源;资源加载器依赖网络模块建立连接,发送请求并接收答复;WebKit接收各种网页或者资源数据,其中某些资源可能同步或异步获取;网页交给HTML解析器转变为词语;解释器根据词语构建节点,形成DOM树。
进一步地,在地址栏输入URL,生成DOM树,还包括:
若节点是JavaScript代码,调用JavaScript引擎解释并执行;JavaScript代码修改DOM树结构;若节点依赖图片、CSS或视频,调用资源加载器加载图片、CSS和视频;若节点是JavaScript资源URL,则停止DOM树的创建,直到JavaScript加载并被JavaScript引擎执行之后,继续DOM数的创建。
具体地,若解释器根据HTML解析器转变的词语构建的节点是JavaScript代码,则调用JavaScript引擎解释并执行。若节点依赖其他资源,例如图片、CSS或视频,则调用资源加载器加载其他资源,加载其他资源为异步加载,不会阻碍当前DOM树的继续创建;若节点是JavaScript资源URL,没有标记异步方式,则需要停止当前DOM树的创建,直至JavaScript加载并被JavaScript引擎执行之后,继续DOM数的创建。
基于上述实施例,将DOM树构建WebKit绘图上下文,具体包括:
CSS文件被CSS解释器解释为内部表示;CSS解释器完成工作后,在DOM树上附加样式信息,生成RenderObject树;RenderObject节点在创建的同时,WebKit根据网页层次结构构建RenderObject树,同时构建一个虚拟绘图上下文。
基于上述实施例,将WebKit绘图上下文生成矢量图像结果,具体包括:绘图实现类将2D图形库或3D图形库绘制结果保存,生成矢量图像结果。
进一步地,现代网页很多都是动态的,随着网页与用户的交互,浏览器需要不断的重复渲染过程。
基于上述实施例,将矢量图像结果渲染生成PDF文本文件,具体包括:
基于headless模式,WebKit通过CDP(Chrome DevTools Protocol)协议进行Domdump操作,将矢量图像结果渲染生成PDF文本文件。
具体地,整个过程是基于HTTP/WebSocket进行通信。其中Puppeteer是操作webkit的JS Api。能很方便通过api的形式去操作webkit上的Dom树、Css选择器、Json、Canvas和SVG。最后通过命令生成PDF:chrome--headless--disable-gpu--remote-debugging-port=9222--window-size=1280x1696
基于上述实施例,将PDF文本文件转换为打印所需的PDF格式的文本文件,包括:
利用Ghostscript将PDF文本文件的字体颜色进行替换,使PDF文本文件支持CMYK(印刷四色模式)。
具体地,上述渲染生成的PDF文本文件采用RGB颜色进行显示,而打印所需的PDF格式的文本文件采用CMYK颜色进行显示,所以利用Ghostscript将PDF文本文件的字体颜色进行替换,使使PDF文本文件支持CMYK。替换命令为:
gs-sDEVICE=pdfwrite-sColorConversionStrategy=CMYK-dCompatibilityLevel=1.3-dNOPAUSE-dQUIET-dBATCH-sOutputFile=/home/test.pdf/home/test.pdf
进一步地,上述渲染生成的PDF文本文件,是不包含与嵌入字体和文字的EPS的,需要进行类似(test.pdf->test.eps->test2.pdf)的转换。PDF文件主要由四部分组成:文件头(Header)、文件体(Body)、交叉引用表(Cross-referrence table)和文件尾(Trailer)。这是一个PDF文件最重要的部分,文件中用到的所有对象,包括文本/图象/音乐/视频/字体/超连接/加密信息/文档结构信息等等,都在这里定义。格式如下:
2 0obj
...
end obj
一个对象的定义包含4个部分:
前面的2是对象序号,其用来唯一标记一个对象;
0是生成号,按照PDF规范,如果一个PDF文件被修改,那这个数字是累加的,它和对象序号一起标记是原始对象还是修改后的对象,但是实际开发中,很少有用这种方式修改PDF的,都是重新编排对象号;
obj和end obj是对象的定义范围,可以抽象的理解为这就是一个左括号和右括号;
省略号部分是PDF规定的任意合法对象。要实现PostScript文件到PDF文件的转换,首先需要对PostScript文件中的不同信息(文字、图形和图像等)进行解析,然后转换为对应的PDF对象。由于PostScript文件对文本、图形和图像的描述机制各不相同,因此,其相应的信息提取算法也不尽相同。在PostScript文件中,图像是取样值的矩形数值,每个取样值表示某种彩色。按行或者列扫描图像矩形所得的一串取样数据定义了一个图像。除了矩形数组之外,PostScript程序中还包括一些图像参数:源图像的格式、图像取样数据的数据源、图像空间坐标等。因此,对PostScript文件中图像的提取主要是将图像的参数和图像取样数据进行提取,再生成所需的PDF文本文件。
基于上述实施例,图3为本发明实施例的一种PDF生成装置的结构示意图,如图3所示,该PDF生成装置包括识别模块301、第一转换模块302、渲染模块303和第二转换模块304,其中:
识别模块301,用于识别网页资源文件的文本内容;网页资源文件包括HTML网页、普通文本网页、富文本网页和Markdown文本网页,文本内容包括HTML文本、CSS文本和JavaScript文本;
第一转换模块302,用于将网页资源文件的文本内容转换为矢量图像结果;
渲染模块303,用于将矢量图像结果按照1:1比例渲染生成PDF文本文件;PDF文本文件的格式高于PDF 1.4;
第二转换模块304,用于将PDF文本文件转换为打印所需的PDF格式的文本文件,所需的PDF格式包括PDF/X-1a。
具体地,首先,识别模块301直接在网页端识别包括HTML网页、普通文本网页、富文本网页和Markdown网页的文本内容并输入至第一转换模块302,这些文本内容包括HTML文本、CSS文本和JavaScript文本。然后第一转换模块302针对这些文本内容转换为矢量图像结果,渲染模块303将生成的矢量图像结果按照1:1比例,即完全对应地渲染生成PDF文本文件,该PDF文本文件的版本为能转换为符合打印要求的PDF格式的文本文件的PDF版本,最后,第二转换模块304将渲染模块生成的PDF文本文件转换为符合打印要求的PDF格式的文本文件。例如,打印所需的PDF格式为PDF/X-1a,则渲染成成的PDF文本文件的格式高于PDF1.4,才能满足要求。
本发明实施例提供的PDF生成方法,能直接在浏览器中根据正常输出显示的网页资源文件,就能在不失真的情况下输出相应比例内容的PDF文本文件,并转换为符合打印要求的PDF格式的文本文件。即该方法不局限于PC端,能跨平台应用到不同的操作系统,直接通过网页方便、快捷地编辑与打印;且不需要更多地关注渲染文字比例和失真效果,可以很方便地和B/S架构等系统业务结合,实现自己的业务需要,从根本上减少了实际开发成本。
本发明实施例提供了一种电子设备,用于完成上述方法实施例中的PDF生成方法。图4为本发明实施例的一种电子设备的结构示意图,如图4所示,该电子设备包括处理器401、存储器402和总线403。其中,处理器401和存储器402通过总线403完成相互间的通信。处理器401可以调用存储在存储器402上并可在处理器401上运行的的计算机程序,以执行上述各实施例提供的方法,例如包括:识别网页资源文件的文本内容,网页资源文件包括HTML网页、普通文本网页、富文本网页和Markdown文本网页,文本内容包括HTML文本、CSS文本和JavaScript文本;将网页资源文件的文本内容转换为矢量图像结果;将矢量图像结果按照1:1比例渲染生成PDF文本文件,PDF文本文件的格式高于PDF 1.4;将PDF文本文件转换为打印所需的PDF格式的文本文件,所需的PDF格式包括PDF/X-1a。
此外,上述的存储器402中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本发明实施例还提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序使计算机执行对应实施例所提供的PDF生成方法,例如包括:识别网页资源文件的文本内容,网页资源文件包括HTML网页、普通文本网页、富文本网页和Markdown文本网页,文本内容包括HTML文本、CSS文本和JavaScript文本;将网页资源文件的文本内容转换为矢量图像结果;将矢量图像结果按照1:1比例渲染生成PDF文本文件,PDF文本文件的格式高于PDF 1.4;将PDF文本文件转换为打印所需的PDF格式的文本文件,所需的PDF格式包括PDF/X-1a。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的装置及设备等实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。