本教程展示如何在Java应用程序中使用LEADTOOLS云服务将文档合并为单个文件。
概述 | |
---|---|
总结 | 本教程介绍如何制作合并 请求并使用Java应用程序中的LEADTOOLS云服务处理结果。 |
完成时间 | 30分钟 |
项目 | 下载教程项目(7kb) |
平台 | LEADTOOLS云服务API |
IDE | IntelliJ |
语言 | Java |
开发许可 | 下载LEADTOOLS |
请务必查看以下站点,以获得有关LEADTOOLS云服务API的信息。
LEADTOOLS服务计划提供:
服务计划 | 描述 |
---|---|
免费试用 | 免费评估 |
页面包 | 预付费页包 |
订阅 | 预付月处理页 |
要进一步了解这些产品,请参阅托管云服务页面。
如需获取应用ID和应用密码,请参见使用LEADTOOLS托管云服务创建帐户和应用程序.
在IDE中,使用Maven创建一个新的Java项目,并将以下所需的Maven依赖项添加到pom.xml
文件:
<依赖>
<groupId>org.json</ groupId>
<artifactId>json</ artifactId>
<版本>20210307</版本>
</依赖>
创建项目并添加包之后,就可以开始编码了。
在项目文件,打开App.java
.添加以下内容进口
上面的语句。
进口org.json.JSONArray;
进口org.json.JSONObject;
进口java.io.File;
进口java.io.FileNotFoundException;
进口java.net.URI;
进口java.net.http.HttpClient;
进口java.net.http.HttpRequest;
进口java.net.http.HttpRequest.BodyPublisher;
进口java.net.http.HttpResponse;
进口java.nio.charset.StandardCharsets;
进口java.util.Base64;
进口java.util.concurrent.CompletableFuture;
进口java.util.concurrent.ExecutionException;
进口java.util.concurrent.TimeUnit;
进口java.util.concurrent.TimeoutException;
添加名为FormatsEnum
还有一个名为合并()
.的合并()
方法使用Merge API上传2个文件,验证上传成功,并合并它们。如果成功,将返回一个唯一标识符(GUID),然后使用这个GUID进行查询。
将下面的代码添加到FormatsEnum
枚举。
私人枚举FormatsEnum
{
Png (1),
Jpeg (2),
Tiff (3),
Pdf (4),
Pdfa (5),
PdfImage (6),
PdfImageOverText (7),
PdfaImageOverText (8),
多克斯(9),
DocxFramed (10),
Rtf (11),
RtfFramed (12),
Txt (13),
TxtFramed (14);
私人最后int价值;
FormatsEnum (int值){
这.value =值;
}
公共intgetValue () {
返回价值;
}
}
将下面的代码添加到合并()
方法。
私人静态无效合并(){
HttpClient客户机= HttpClient. newhttpclient ();
//如果使用URL到文件
字符串tiffUrl =“https://demo.leadtools.com/images/cloud_samples/ocr1气管无名动脉瘘管的- 4.”;
字符串uploadUrl = String.format(“还是?fileurl = % s&forMerge = true ", tiffUrl);
结果结果= postAsync(uploadUrl,零、客户端);
//如果上传文件为多部分内容:
//文件uploadFile = new文件("path/to/ File ");
// String uploadUrl = "UploadFile";
// Results Results = postAsync(uploadUrl, uploadFile, client);
如果(results.getStatusCode() != 200) {
System.out.println ("请求失败,响应如下"+ results.getStatusCode ());
返回;
}
字符串firstFileId = results.getData();
System.out.println (服务返回的第一个文件ID:+ firstFileId);
如果(!checkFileForVerification(firstFileId,客户端)){
返回;
}
字符串pdfUrl =“https://demo.leadtools.com/images/pdf/leadtools.pdf”;
uploadUrl = String.format(“还是?fileurl = % s&forMerge = true ", pdfUrl);
结果= postAsync(uploadUrl,零、客户端);
如果(results.getStatusCode() != 200) {
System.out.println ("请求失败,响应如下"+ results.getStatusCode ());
返回;
}
字符串secondFileId = results.getData();
System.out.println (服务返回的第二个文件ID:+ secondFileId);
如果(!checkFileForVerification(secondFileId,客户端)){
返回;
}
如果(!mergeFiles(客户端,firstFileId, secondFileId) {
System.out.println (文件合并失败);
返回;
}
查询(firstFileId、客户);
System.out.println (“完成”);
}
创建两个名为(HttpClient客户端,字符串firstFileId,字符串secondFileId)
而且checkFileForVerification(字符串id, HttpClient客户机)
.方法中调用这两个方法合并()
方法,如上所示。
将下面的代码添加到mergeFiles ()
方法,指示云服务API使用给定的id将两个上传的文件合并为一个文件。
私人静态布尔mergeFiles(HttpClient客户端,字符串firstFileId,字符串secondFileId) {
ArrayList
mergeList =新ArrayList < > (); MergeFirstLast newFirstLast =新MergeFirstLast ();
newFirstLast.setFileID (firstFileId);
newFirstLast.setFirstPage (1);
newFirstLast.setLastPage (1);
mergeList.add (newFirstLast);
MergePageArray newPageArray =新MergePageArray ();
newPageArray.setFileID (secondFileId);
newPageArray.setPages (新int[] {5 1 2 4 2});
mergeList.add (newPageArray);
//合并文件的最终输出格式
intoutputFormat = FormatsEnum.Pdf.getValue();
字符串mergeUrl = String.format(“转换/合并?= % s”格式, outputFormat);
JSONArray mergeJSON =新JSONArray (mergeList.toString ());
结果result = postAsync(mergeUrl, HttpRequest.BodyPublishers.ofString(mergeJSON.toString(), StandardCharsets.UTF_8),客户端);
返回result.getStatusCode() == 200;
}
将下面的代码添加到checkFileForVerification ()
方法确认传入的文件已成功上传。
私人静态布尔checkFileForVerification(字符串id, HttpClient客户端){
字符串queryUrl = String.format(“查询?id = % s "、身份证);
结果结果;
JSONObject returnedData;
intfileStatus = 0;
做{
试一试{
结果= postAsync(queryUrl,零、客户端);
returnedData =新JSONObject (results.getData ());
fileStatus =返回数据。getint (“FileStatus”);
thread . sleep (500);
}抓(InterruptedException e) {
e.printStackTrace ();
}
}而(fileStatus = 0 || fileStatus == 123);
如果(fileStatus != 122) {
System.out.println (“文件”+ id +"文件状态验证失败:"+ fileStatus);
返回假;
}
返回真正的;
}
接下来,创建一个名为查询HttpClient客户端
控件提供的GUID合并()
方法。如果成功,响应体将包含JSON格式的所有请求数据。一定要打电话给查询()
方法中的合并()
方法,如上所示。将下面的代码添加到查询()
方法。
私人静态无效查询(HttpClient客户端){
字符串queryUrl = String.format(“查询?id = % s "、身份证);
结果结果;
JSONObject返回数据=新JSONObject ();
intfileStatus = 0;
做{
试一试{
结果= postAsync(queryUrl,零、客户端);
returnedData =新JSONObject (results.getData ());
fileStatus =返回数据。getint (“FileStatus”);
如果(fileStatus != 200) Thread.sleep(5000);
}抓(InterruptedException e) {
/ / e.printStackTrace ();
}
}而(|| fileStatus == 100 || fileStatus == 123);
System.out.println ("文件已完成处理,返回代码:"+ fileStatus);
如果(fileStatus != 200) {
返回;
}
parseJson (returnedData.get (“RequestData”) .toString ());
}
然后,创建两个名为parseJson (json字符串)
而且postAsync(字符串路径,文件文件,HttpClient客户端)
,它们都将在查询()
方法,如上所示。
将下面的代码添加到parseJson ()
方法来处理返回的JSON数据。
私人静态无效parseJson(String json) {
JSONArray requestArray =新JSONArray (json);
为(对象requestObject: requestArray) {
如果(requestObject运算符JSONObject) {
JSONObject requestReturn = (JSONObject) requestObject;
System.out.println (“服务类型:”+ requestReturn.getString (“ServiceType”));
System.out.println (返回的数据:“);
JSONArray urlArray =新JSONArray (requestReturn.get (“url”) .toString ());
为(对象obj: urlArray) {
System.out.println (obj.toString ());
}
}
}
}
将下面的代码添加到postAsync ()
方法来创建一个客户端连接来请求GUID和JSON数据。上面写着替换为应用程序ID
而且替换为应用程序密码
请务必输入相应的应用程序ID和密码。有关如何获取应用程序ID和密码的信息,请参阅使用LEADTOOLS托管云服务创建帐户和应用程序教程。
私人静态postAsync(字符串路径,对象主体,HttpClient客户端){
字符串AppId =“替换为应用程序ID”;
密码=“替换为应用程序密码”;
字符串authHeader =“基本”+新字符串(Base64.getEncoder()。编码(AppId +":"+密码).getBytes (StandardCharsets.UTF_8)));
字符串hostedServicesUrl =“https://azure.leadtools.com/api/”;
BodyPublisher thisBody = httprequest .BodyPublisher . ofstring (“零”);
如果(身体运算符BodyPublisher) {
thisBody = (BodyPublisher) body;
}其他的如果(身体运算符文件){
试一试{
thisBody = HttpRequest.BodyPublishers.ofFile(((File) body).toPath());
}抓(FileNotFoundException e) {
/ / e.printStackTrace ();
}
}
HttpRequest request = HttpRequest. newbuilder ()
. post (thisBody)
.uri (URI。创建(hostedServicesUrl +路径)
.header (“接受”,“application / json”)
.header (“授权”authHeader)
.header (“内容类型”,“文本/普通”)
.build ();
CompletableFuture
> result =客户端。(请求,HttpResponse.BodyHandlers.ofString是以()); 结果结果=新结果();
results.setData ("");
results.setStatusCode (0);
试一试{
results.setData (result.thenApply (HttpResponse::身体)。(5, TimeUnit.SECONDS));
results.setStatusCode (result.thenApply (HttpResponse:: statusCode)。(5, TimeUnit.SECONDS));
}抓(InterruptedException | ExecutionException | TimeoutException e) {
e.printStackTrace ();
}
返回结果;
}
类的结果,应用程序将需要一个助手类来存储帖子
请求。创建一个名为结果
并将下面的代码添加到其中。
私人静态类结果{
私人字符串数据;
私人intstatusCode;
公共字符串getData() {
返回数据;
}
公共无效setData(字符串数据){
这.data =数据;
}
公共intgetStatusCode () {
返回statusCode;
}
公共无效setStatusCode (intstatusCode) {
这.statusCode = statusCode;
}
}
另外,创建模型类,MergeArgument
,MergeFirstLast:合并参数
,MergePageArray: MergeArgument
;这些有助于mergeFiles ()
方法。将下面的代码分别添加到这些类中。
私人静态类MergeArgument {
私人字符串文件标识;
公共字符串getFileID() {
返回文件标识;
}
公共无效setFileID(字符串fileId) {
这.fileId = fileId;
}
公共字符串toString() {
返回文件标识\“\:\ "+ fileId +“\”}”;
}
}
私人静态类MergeFirstLast扩展MergeArgument {
私人int珍宝;
私人intlastPage;
公共intgetFirstPage () {
返回珍宝;
}
公共intgetLastPage () {
返回lastPage;
}
公共无效setFirstPage (int珍宝){
这.firstPage = firstPage;
}
公共无效setLastPage (intlastPage) {
这.lastPage = lastPage;
}
@Override
公共字符串toString() {
返回“{\“珍宝\”:“+ firstPage +”,\“lastPage \”:“+ lastPage +","+超级.toString ();
}
}
私人静态类MergePageArray扩展MergeArgument {
私人int[]页;
公共int[] getPages() {
返回页;
}
公共无效setPages (int[]页){
这.pages =页面;
}
@Override
公共字符串toString() {
返回“{\”页面\”:“+ Arrays.toString(pages","+超级.toString ();
}
}
为了测试运行此代码,请务必添加合并();
到静空主
部分。
按下运行项目Alt + F5,或选择执行命令->调试App.
如果正确地执行了这些步骤,就会出现控制台,应用程序将从返回的JSON数据显示到合并文件的链接。
本教程展示了如何在Java应用程序中通过LEADTOOLS云服务合并文件。