使用 IBM i (OS/400) 打印 PDF 文件
作者:佚名
上传时间:2023-04-25
运行软件:ILE RPG
软件版本:IBM i (OS/400) V7R1M0
版权申诉
该示例代码演示了如何在 IBM i(OS/400)操作系统上打印 PDF 文件。代码使用 ILE RPG 语言编写,通过调用系统 API 任务运行程序(QSYS/QZRCSRVS)来实现打印功能,使用第三方库 cURL 来下载 PDF 文件。在执行代码之前,需要先安装 cURL 库并设置相关配置。
cl rpcsocket pr extproc('QZWSOVR')
cl sock 10i 0 value
cl protocol 1 value
cl opt 5 value
dlopen PR * EXTPROC(*DLOpen)
dlclose PR * EXTPROC(*DLClose)
dlsym PR * EXTPROC(*DLSym)
dlerror PR * EXTPROC(*DLError)
dlerror2 PR * EXTPROC(*DLError2)
/include curl/curl.h
dcl-proc main;
dcl-pi *n int(10);
end-pi;
dcl-ds curlm likeds(CURLM); //cURL multi handle
dcl-ds curl likeds(CURL); //cURL easy handle
dcl-ds res likeds(CURLMsg); //cURL easy handle message
dcl-ds used likeds(curl_waitfd); /* wait before next action */
fd uns(10i0);
events uns(10i0);
revents uns(10i0);
end-ds;
dcl-s curl_handle pointer;
dcl-s rc int(10);
dcl-s val long(10);
dcl-s bytes_sent int(10);
dcl-s response_length int(10);
dcl-s chunk int(10);
dcl-s tcp_port char(10);
dcl-s pdf_file_name char(50);
pdf_file_name = '/pdf/test.pdf';
tcp_port = '443';
//配置 cURL
rc = curl_global_init(CURL_GLOBAL_ALL);
curl_handle = curl_easy_init();
curl_easy_setopt(curl_handle, CURLOPT_URL, 'https://example.com' + pdf_file_name); //设置请求的 URL
curl_easy_setopt(curl_handle, CURLOPT_PORT, %trim(tcp_port)); //设置请求的 TCP 端口
curl_easy_setopt(curl_handle, CURLOPT_FOLLOWLOCATION, 1); //设为 1 表示遇到重定向时自动重定向
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, addr(png_download_write_function)); //回调函数,下载文件到本地
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, addr(pdf_file_name));//回调函数将写入的文件名传递给回调函数
curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, 600); //设置请求超时时间
curl_multi_init(curlm); //初始化 multi handle
curl_multi_add_handle(curlm,curl_handle); //将 easy handle 放入 multi handle
do;
rc=curl_multi_wait(curlm, %null, 0, 1000, addr(used)); //等待 curl 处理事件
if rc <> CURLM_OK;
leave;
endif;
if used.fd > 0; //检查出需要读写的描述符
Select;
When (used.events and CURL_WAIT_POLLIN); //写入数据到 socket
rc = curl_multi_socket_action(curlm, used.fd, CURL_CSELECT_IN, addr(chunk));
When (used.events and CURL_WAIT_POLLOUT); //从 socket 读取数据
rc = curl_multi_socket_action(curlm, used.fd, CURL_CSELECT_OUT, addr(chunk));
When (used.events and CURL_WAIT_POLLERR + CURL_WAIT_POLLHUP);
other;
Endsl;
endif;
until (res.msgs_left = 0 and rc <> CURLM_CALL_MULTI_PERFORM); //当 multi handle 没有剩余操作时跳出循环
//清理资源
curl_easy_cleanup(curl_handle);
dlclose(curl_handle);
return 0;
end-proc;
dcl-proc png_download_write_function; //回调函数
dcl-pi png_write int(10);
ptr pointer; //指向一个文件名的指针
size int(10); //要写入的数据的大小
nmemb int(10); //要写入的数据的个数
stream pointer; //文件句柄
end-pi;
dcl-ds file_desc qualified template; //文件描述符
fd bin(10);
count unssign int(10);
data * ptr;
end-ds;
open('/home/' + %str(ptr) ,
O_WRONLY or O_CREAT or O_TRUNC,
S_IRWXU + S_IRGRP + S_IROTH)
file_desc.fd; //创建或打开并清空一个文件
write(file_desc.fd, stream, size*nmemb) file_desc.count; //将数据写入到文件
close(file_desc.fd); //关闭文件
return size*nmemb;
end-proc;
免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 server@dude6.com
用户评论
相关推荐
使用 IBM i (OS/400) 打印 PDF 文件
该示例代码演示了如何在 IBM i(OS/400)操作系统上打印 PDF 文件。代码使用 ILE RPG 语言编写,通过调用系统 API 任务运行程序(QSYS/QZRCSRVS)来实现打印功能,使用
IBM i (OS/400) V7R1M0
ILE RPG
2023-04-25 06:47
IBM i(OS/400)上使用RPGLE打印PDF文档
使用RPGLE在IBM i(OS/400)上打印PDF文档的方法。通过调用系统命令,将PDF文件转换为AFP格式,并使用AFP工具箱打印输出。 /free //指定Pdf文件名称
IBM i 7.3
RPGLE
2023-04-20 20:55
使用IBM i (OS/400)实现打印功能
本文将介绍如何在IBM i (OS/400)操作系统上实现打印功能。主要内容包括IPDS打印、AFP打印、IBM i (OS/400)打印机配置、PCL转换等方面的内容。同时,提供示例代码和代码释义,
IBM i 7.3
RPG编程语言
2023-03-30 16:44
使用RPGLE在IBM i(OS/400)上创建PDF文件
本示例介绍如何使用RPGLE语言在IBM i操作系统上利用第三方库生成PDF文件。实现方式为使用RPGLE中可调用C语言的特性,调用第三方库生成PDF文件,并将其保存至本地文件系统。/*******
IBM i 7.3
RPGLE
2023-04-26 14:30
在IBM i (OS/400)上实现PDF文件生成
使用RPG程序在IBM i (OS/400)上生成PDF文件,并使用发邮件的方式发送的示例代码。该示例使用了外部工具Ghostscript来处理PDF生成与合并,同时使用SMTP邮件服务进行附件发送。
IBM i 7.4
RPG程序
2023-04-17 22:51
IBM i (OS/400) 文件管理
本文将介绍IBM i (OS/400) 操作文件的方法,包括RPG文件读写操作和IBM i (OS/400)文件管理工具的使用。同时提供详细的示例代码和代码释义,以便读者更好地理解和应用这些方法。R
V7R2
RPGLE
2023-03-31 01:33
IBM i (OS/400)的文件管理
IBM i 是一种高效可靠的操作系统,文件管理是其重要的功能之一。本文将介绍 IBM i 文件管理的示例代码,代码释义以及总结。示例代码以下是 IBM i 文件管理的示例代码:/* 创建文件 *
IBM i (OS/400) V7R1
IBM Navigator for i
2023-03-21 08:04
IBM i (OS/400)文件处理示例
IBM i(前称OS/400)是IBM的操作系统,用于大型机器上运行。本示例演示如何在IBM i上使用RPG编程语言处理文件数据,包括读取和更新文件中的记录。 C READ F
IBM i 7.4
RPG编程语言
2023-10-12 21:13
IBM i (OS/400)中打印PDF并附上电子邮件的示例代码
这是一个IBM i (OS/400)系统中打印PDF并通过电子邮件发送的示例代码。该代码使用了现有的PDF打印软件和SMTP配置来完成这个任务。// 打印PDF文件CALL QP2SHELL ('
IBM i (OS/400) V7R3M0
IBM Corporation
2023-05-20 00:28
在IBM i (OS/400)上使用RPG编程语言(IBM i (OS/400))
IBM i (OS/400)是一种流行的操作系统,广泛用于企业级应用程序的开发和部署。其中,RPG编程语言是一种高级编程语言,适用于开发企业级应用程序。本文将介绍在IBM i (OS/400)上使用R
IBM i (OS/400) V7R4,Rational Developer for i 9.6
Rational Developer for i
2023-04-03 04:01