本发明涉及计算机技术领域,尤其涉及一种批量打印版式文件的方法及系统。
背景技术:
目前国税总局大力推行增值税电子发票,使得pdf电子发票成为当前时代的产物,而大量电子发票在面临报销时的批量打印问题,即成为用户亟待解决的一个问题。
adobereader(也被称为acrobatreader)是美国adobe公司开发的一款pdf文件阅读软件,被广泛用于打印和查阅pdf文件,是很多用户打印pdf文件及电子发票pdf版式文件的首选软件。
目前,adobereader软件在文件打印时,因为没有批量打印功能,从而无法实现同时对大量pdf文件的打印,而目前现有的打印接口在批量打印pdf文件时,经常因为计算机中没有安装与pdf文档对应的字体,出现无法识别pdf文档中字体的现象,导致pdf文件输出时出现乱码,使用户对pdf批量打印功能体验较差。
技术实现要素:
本发明实施例提供了一种批量打印版式文件的方法及系统,用于实现版式文件的批量打印。
本发明实施例一方面提供了一种批量打印版式文件的方法,包括:
获取打印对象;
确定打印对象的数量;
根据数量,调用预置的循环指令和打印指令,实现对打印对象的打印。
可选的,获取打印对象包括:
接收用户导入的打印对象;
或,
主动读取打印对象。
可选的,在根据数量,调用循环指令和第一打印指令,实现对打印对象的打印,第一打印指令用于获取版式文件阅读器的存储位置及打印指令之后,所述方法还包括:
显示当前打印对象的打印进程。
可选的,调用循环指令和第一打印指令,包括:通过api接口调用循环指令和第一打印指令。
可选的,版式文件包括:
pdf格式文件或ofd格式文件。
可选的,第一指令用于获取版式文件阅读器的存储位置及打印指令包括:
第一指令用于自动获取版式文件阅读器的存储位置及打印指令;
或,
第一指令用于手动获取版式文件阅读器的存储位置及打印指令。
可选的,所述方法还包括:
启动多线程处理指令。
可选的,打印对象的数量大于等于1。
本发明实施例另一方面提供了一种批量打印版式文件系统,包括:
获取单元,用于获取打印对象;
确定单元,用于确定打印对象的数量;
调用单元,用于根据数量,调用预置的循环指令和打印指令,实现对打印对象的打印。
可选的,获取单元包括:
第一获取模块,用于接收用户导入的打印对象;
或,
第二获取模块,用于主动读取打印对象。
可选的,所述系统还包括:
显示单元,用于显示当前打印对象的打印进程。
可选的,调用循环指令和第一打印指令,包括:通过api接口调用循环指令和第一打印指令。
可选的,第一指令用于获取版式阅读器的存储位置及打印指令包括:
第一指令用于自动获取版式文件阅读器的存储位置及打印指令;
或,
第一指令用于手动获取版式文件阅读器的存储位置及打印指令。
可选的,所述系统还包括:
启动单元,用于启动多线程处理指令。
从以上技术方案可以看出,本发明实施例具有以下优点:本方案在获取打印对象,确定打印对象数量后,通过预置的循环指令和第一打印指令,直接调用版式文件阅读器自身的打印指令,从而实现对版式文件阅读软件自身打印指令的循环调用,进一步实现对多个版式文件的打印功能;而且版式文件阅读器自身具备完善的字体库,避免了打印过程中乱码的出现。
附图说明
图1为一种批量打印版式文件的方法的一个实施例示意图;
图2为一种批量打印版式文件的方法的另一个实施例示意图;
图3为一种批量打印版式文件的方法的另一个实施例示意图
图4为一种批量打印版式文件的系统的一个实施例示意图;
图5为一种批量打印版式文件的系统的另一个实施例示意图;
图6为一种批量打印版式文件的系统的另一个实施例示意图。
具体实施方式
本发明实施例提供了一种批量打印版式文件的方法及系统,用于实现版式文件的批量打印功能,避免出现乱码现象。
为便于理解,下面描述本发明实施例中的一种批量打印版式文件的方法,请参阅图1,本发明中一种批量打印版式文件的方法的一个实施例,包括:
101、获取打印对象;
批量打印版式文件的系统打印版式文件前,需要先获取版式打印文件,在获取打印文件后,执行打印指令,对版式文件进行打印。其中,批量打印版式文件的系统,可以通过多种方式获取版式文件,对于获取方式,在下面的实施例中进行详细描述。
102、确定打印对象的数量;
批量打印版式文件的系统获取版式打印文件后,需要确定打印文件的数量,根据打印文件的数量去执行循环指令中循环的次数。
103、根据数量,调用循环指令和第一打印指令,实现对打印对象的打印,第一打印指令用于获取版式文件阅读器的存储位置及打印指令。
批量打印版式文件的系统在获取打印文件的数量后,调用循环指令和第一打印指令,将需要打印文件的数量赋予给循环指令,使得循环指令按照需要打印文件的数量去循环执行第一打印指令,其中第一打印指令用于获取版式文件阅读器的存储位置及打印指令,利用版式文件的打印指令对获取到的版式文件进行打印。
其中版式文件包括:pdf格式的文件或ofd格式的文件,而第一打印指令可以通过多种方式获取版式文件阅读器的存储位置及打印指令,对于具体的获取方式,在下面的实施例中进行详细描述。
需要说明的是,本实施例中的第一打印指令是通过c++技术来开发的,具体的实现方式如下:
第一指令的封装函数如下,intprintpdf(char*exenamechar*pdffilename)
实现细节如下:
if(!fileexists(afilename)){
showmessage(afilename+"不存在");
return-1;
}
startupinfosi;
process_informationpi;
zeromemory(&si,sizeof(si));
si.cb=sizeof(si);
zeromemory(&pi,sizeof(pi));
si.dwflags=startf_useshowwindow;//设置隐藏执行窗口
si.wshowwindow=sw_hide;
strings=exename+"/p/h"+afilename;
createprocess(null,s.c_str(),
null,null,false,0,null,null,&si,&pi);
其中exename为adobereader安装目录中的独立程序名acrord32.exe
pdffilename为传入的本地pdf全路径。
本实施例在获取打印对象,确定打印对象数量后,通过循环指令和第一打印指令,直接调用版式文件阅读器自身的打印指令,从而实现对版式文件阅读软件自身打印指令的循环调用,进一步实现对多个版式文件的打印功能;而且版式文件阅读器自身具备完善的字体库,避免了打印过程中乱码的出现。
下面来详细描述本发明实施例中的一种批量打印版式文件的方法,其中批量打印版式文件的系统可以通过多种方式来获取打印对象,下面从各方面来进行描述:
一、接收用户导入的打印对象;
201、接收用户导入的打印对象;
批量打印版式文件的系统在打印版式文件前,需要先获取打印对象,本实施例中的打印对象即为pdf文件或ofd文件,版式文件的数量可以为1个或多个,其中系统可以通过用户导入的方式去获取打印文件,这样,方便用户根据自己的需求导入文件。
可以理解的是,用户在导入文件的过程中可能出错,所以系统在用户导入文件后,允许用户对导入的文件进行查看,方便用户再次确认,用户确认完成后,筛选出需要打印的文件,如果导入的文件全部为打印对象,用户则可以通过勾选全部打印选项,让系统最终确认用户需要打印的文件。
例如:企业需要对pdf电子发票文件进行打印,首先需要用户给系统导入电子发票文件,用户可以通过点击文件夹的形式导入要打印的电子发票,也可以逐一导入电子发票,用户导入过程中,或导入完成后,若发现选错了一张或几张pdf版电子发票,可以通过对导入的电子发票文件查看时,重新选取要打印的电子发票,以对最终打印的电子发票进行确认,若查看时,没有发现导入错误的电子发票,则可以勾选全部打印选项,以完成最终电子发票的确认,系统即可接收到用户导入的pdf版电子发票。
202、确定打印对象的数量;
批量打印版式文件的系统接收到用户导入的电子发票后,需要确定用户打印版式文件的数量,以用于对循环指令进行赋值,以达到接下来循环调用打印指令的作用。其中,系统对于版式文件数目的统计可以通过计数器或统计函数来实现,此处,对于确定电子发票数目的实现方式不做具体限制。
例如:系统确认用户需要打印的电子发票为5张,则给循环指令赋值为5,以达到接下来对打印指令调用5次的作用。
203、根据数量,调用循环指令和第一打印指令,实现对打印对象的打印,第一打印指令用于获取版式文件阅读器的存储位置及打印指令;
批量打印版式文件的系统在确定了版式文件的数量后,调用循环指令和第一打印指令,实现对用户选取的版式文件进行打印,其中版式文件的数量值用于给循环指令赋值,以达到循环调用第一打印指令的目的,而第一打印指令用于获取版式文件阅读器的存储位置及打印指令,以达到通过调用第一指令去调用版式阅读器的打印指令,从而实现通过循环指令循环调用版式文件阅读器自身打印指令的作用,达到多次打印版式文件,即批量打印版式文件的目的。本实施例中,为了方便本方案与其他应用的结合,本方案中的循环指令和第一打印指令支持api接口调用,可以方便其他应用程序对本系统的调用。
其中,第一打印指令可以自动调取版式文件阅读器的存储位置及打印指令,或者在自动调取版式文件阅读器的存储位置及打印指令失败后,提示用户手动设置版式文件阅读器的存储位置,让用户手动设置版式文件阅读器的存储位置及打印指令,可以理解的是,批量打印版式文件系统在用户对版式文件阅读器的存储位置进行一次设置后,可以对版式文件阅读器的存储位置进行存储,从而便于系统在以后的调用中实现自动调取。
例如:批量打印版式文件系统确定用户打印不同的pdf版式的电子发票5张,则在用户选择打印的电子发票后,可以通过计数器或统计函数确定电子发票的数值为5,然后调用循环指令和第一打印指令,其中数值5用于给循环指令中的循环次数赋值,第一打印指令用于调用pdf阅读器的存储位置和打印指令,以达到循环调用pdf阅读器打印指令5次的作用,从而实现pdf阅读器自动对pdf文件的循环打印,即批量打印的目的。
需要说明的是,本实施例中的第一打印指令是通过c++技术来开发的,具体的实现方式如下:
第一指令的封装函数如下,intprintpdf(char*exenamechar*pdffilename)
实现细节如下:
if(!fileexists(afilename)){
showmessage(afilename+"不存在");
return-1;
}
startupinfosi;
process_informationpi;
zeromemory(&si,sizeof(si));
si.cb=sizeof(si);
zeromemory(&pi,sizeof(pi));
si.dwflags=startf_useshowwindow;//设置隐藏执行窗口
si.wshowwindow=sw_hide;
strings=exename+"/p/h"+afilename;
createprocess(null,s.c_str(),
null,null,false,0,null,null,&si,&pi);
其中exename为adobereader安装目录中的独立程序名acrord32.exe
pdffilename为传入的本地pdf全路径。
204、显示当前打印对象的打印进程;
系统在实现对版式文件对象打印的过程中,可以通过显示打印进程指令,对当前打印的版式文件的打印进程进行显示,以方便用户查看版式文件的打印情况。需要说明的是,步骤204一般与步骤203同时执行,若用户不希望显示打印进程,则不用执行步骤204。此处为了描述方便,将步骤204放于203之后。
例如:系统在打印5张pdf电子发票的过程中,若用户选取了显示打印进程指令,则系统在打印当前pdf电子发票时,会显示当前电子发票的打印进程,其中对于打印进程可以是以百分比的形式来显示,也可以是以进度条的形式来显示,此处对于打印进程的显示形式不做具体限制。若用户不希望显示打印进程,则不执行步骤204。
205、启动多线程处理指令。
线程是计算机程序中一个单一的顺序控制指令,在单个程序中同时运行多个线程,完成不同的工作,称为多线程处理指令。而版式文件批量打印系统在批量打印版式文件的过程中,可以开启多线程处理指令,例如:系统在打印第一个pdf文件的过程中,同时可以接受第二个pdf文件的打印指令,即为批量打印pdf文件中的多线程处理指令。需要说明的是,步骤205在本方法中没有时序限制,可以放在步骤201至204中的任一步骤之前或之后执行。
本实施例在获取打印对象,确定打印对象数量后,通过循环指令和第一打印指令,直接调用版式文件阅读器自身的打印指令,从而实现对版式文件阅读软件自身打印指令的循环调用,进一步实现对多个版式文件的打印功能;而且版式文件阅读器自身具备完善的字体库,避免了打印过程中乱码的出现。
其次,本实施例在批量打印版式文件的过程中,可以通过启动多线程处理指令来提高版式文件的打印效率,同时通过显示打印进程指令来显示当前版式文件的打印进程,提高了用户的使用体验。
二、主动读取打印对象;
301、主动读取打印对象;
批量打印版式文件的系统在打印版式文件前,需要先获取打印对象,本实施例中的打印对象即为pdf或ofd文件,版式文件的数量可以为1个或多个,其中系统可以主动实时或定时读取版式文件,可以每隔2小时或每隔3小时主动读取需要打印的版式文件,当有需要打印的版式文件时,即进行接下来的操作。
可以理解的是,系统读取到需要打印的版式文件后,如果用户没有进行查看,则系统默认对全部版式文件进行打印,若用户进行主动查看,则可以通过用户的选取指令,来确认最终需要打印的版式文件的数目。
例如:企业需要打印大量的pdf电子发票时,可以对系统进行设置,让系统每隔2小时或3小时去读取固定位置存储的电子发票,若发现存储有电子发票,则默认对该电子发票进行打印,这样,可以减少用户操作,在用户需要打印电子发票时,只需将电子发票导入并存储到固定位置,而且对于企业用户,可以设置系统去读取不同用户固定存储位置的电子发票,从而实现企业内不同用户对于电子发票打印的需求,提高用户的使用体验。
302、确定打印对象的数量;
303、根据数量,调用循环指令和第一打印指令,实现对打印对象的打印,第一打印指令用于获取版式文件阅读器的存储位置及打印指令;
304、显示当前打印对象的打印进程;
305、启动多线程处理指令。
需要说明的是,本实施例中的步骤302至305与图2所述实施例中步骤202至205类似,具体此处不再赘述。
本实施例在获取打印对象,确定打印对象数量后,通过循环指令和第一打印指令,直接调用版式文件阅读器自身的打印指令,从而实现对版式文件阅读软件自身打印指令的循环调用,进一步实现对多个版式文件的打印功能;而且版式文件阅读器自身具备完善的字体库,避免了打印过程中乱码的出现。
其次,本实施例在批量打印版式文件的过程中,可以通过启动多线程处理指令来提高版式文件的打印效率,同时通过显示打印进程指令来显示当前版式文件的打印进程,提高了用户的使用体验。
上面描述了本发明实施例中一种批量打印版式文件的方法,下面来描述本发明中一种批量打印版式文件的系统,请参阅图4,本发明中一种批量打印版式文件的系统,包括:
获取单元401,用于获取打印对象;
确定单元402,用于确定所述打印对象的数量;
调用单元403,用于根据所述数量,调用循环指令和第一打印指令,实现对所述打印对象的打印,所述第一打印指令用于获取版式文件阅读器的存储位置及打印指令。
需要说明的是,本实施例中各单元的作用与图1所述实施例中批量打印版式文件的系统的作用类似,具体此处不再赘述。
本实施例通过获取单元401及确定单元402,在获取打印对象,确定打印对象数量后,通过调用单元403调用循环指令和第一打印指令,直接调用版式文件阅读器自身的打印指令,从而实现对版式文件阅读软件自身打印指令的循环调用,进一步实现对多个版式文件的打印功能;而且版式文件阅读器自身具备完善的字体库,避免了打印过程中乱码的出现。
为方便理解,下面详细描述本发明实施例中的一种批量打印版式文件的系统,其中批量打印版式文件的系统可以通过多种方式来获取打印对象,下面从各方面来描述:
一、接收用户导入的打印对象;
请参阅图5,本发明实施例中一种批量打印版式文件的系统的另一个实施例包括:
获取单元501,用于获取打印对象;
确定单元502,用于确定打印对象的数量;
调用单元503,用于根据数量,调用循环指令和第一打印指令,实现对打印对象的打印,第一打印指令用于获取版式文件阅读器的存储位置及打印指令。
除上述单元外,所述系统还包括:
显示单元504,用于显示当前打印对象的打印进程。
启动单元505,用于启动多线程处理指令。
其中,获取单元501包括:
第一获取模块5011,用于接收用户导入的打印对象。
可选的,第一打印指令可以通过自动或手动的方式去获取版式文件阅读器的存储位置及打印指令。
需要说明的是,本实施例中各单元或各模块的作用与图2所述实施例中批量打印版式文件的系统的作用类似,具体此处不再赘述。
本实施例在通过第一获取模块5011及确定单元502获取打印对象,确定打印对象数量后,通过调用单元503调用循环指令和第一打印指令,直接调用版式文件阅读器自身的打印指令,从而实现对版式文件阅读软件自身打印指令的循环调用,进一步实现对多个版式文件的打印功能;而且版式文件阅读器自身具备完善的字体库,避免了打印过程中乱码的出现。
其次,本实施例在批量打印版式文件的过程中,可以通过启动单元505启动多线程处理指令来提高版式文件的打印效率,同时通过显示单元504来显示当前版式文件的打印进程,提高了用户的使用体验。
二、主动读取打印对象;
请参阅图6,本发明实施例中一种批量打印版式文件的系统的另一个实施例包括:
获取单元601,用于获取打印对象;
确定单元602,用于确定打印对象的数量;
调用单元603,用于根据数量,调用循环指令和第一打印指令,实现对打印对象的打印,第一打印指令用于获取版式文件阅读器的存储位置及打印指令。
除上述单元外,所述系统还包括:
显示单元604,用于显示当前打印对象的打印进程。
启动单元605,用于启动多线程处理指令。
其中,获取单元601包括:
第二获取模块6012,用于主动读取打印对象;
可选的,第一打印指令可以通过自动或手动的方式去获取版式文件阅读器的存储位置及打印指令。
需要说明的是,本实施例中各单元或各模块的作用与图3所述实施例中批量打印pdf文件的系统的作用类似,具体此处不再赘述。
本实施例在通过第二获取模块6012及确定单元602获取打印对象,确定打印对象数量后,通过调用单元603调用循环指令和第一打印指令,直接调用版式文件阅读器自身的打印指令,从而实现对版式文件阅读软件自身打印指令的循环调用,进一步实现对多个版式文件的打印功能;而且版式文件阅读器自身具备完善的字体库,避免了打印过程中乱码的出现。
其次,本实施例在批量打印版式文件的过程中,可以通过启动单元605启动多线程处理指令来提高版式文件的打印效率,同时通过显示单元604来显示当前版式文件的打印进程,提高了用户的使用体验。
可以理解的是,本发明实施例中,可批量打印版式文件的系统还可以从硬件角度出发进行描述,本发明实施例的系统包括:处理器、存储器以及存储在存储器中并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述各个方法实施例中基于系统操作的步骤,或者,处理器执行计算机程序时实现上述实施例中系统的各模块的功能,相同部分可参照前文,此处不再赘述。
示例性的,计算机程序可以被分割成一个或多个模块/单元,一个或者多个模块/单元被存储在存储器中,并由处理器执行,以完成本发明。一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序在系统中的执行过程,具体可参照系统的各模块的说明,此处不再赘述。
其中,系统可包括但不仅限于处理器、存储器,本领域技术人员可以理解,该说明仅仅是系统的示例,并不构成对系统的限定,可以包括比该说明更多或更少的部件,或者组合某些部件,或者不同的部件,例如系统还可以包括输入输出设备、网络接入设备、总线等。
所称处理器可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,处理器是系统的控制中心,利用各种接口和线路连接整个系统的各个部分。
存储器可用于存储计算机程序和/或模块,处理器通过运行或执行存储在存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现系统的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据手机的使用所创建的数据(比如补丁库)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。