文档转 PDF
Office、图片等文件转 PDF,以及合并、拆分、页面整理、内容叠加等文件操作。
概述
使用流程
由于转换需要时间,文件越大页数越多,转换越久,故默认采用异步的方式获得转换结果。即调用转换接口后会获得token,随后有2种方式查询转换结果:
调用转换接口
v1和v2接口功能相同,调用方式不一样。v2支持同步转换,v1不支持,推荐用v2接口。
v2接口统一为HTTP POST JSON:
- JSON支持输入:文件url;文件Base64字符串;多张图片的url。见:文档转换_v2
- v2版本的API除了异步,还支持同步调用,见:同步调用
- v2版本中的参数如果未出现在v1版本中,v1版本用同样参数也能工作
v1接口包括3种转换方式:
- 单一文档转为PDF,文档是一个下载链接,用HTTP GET方式,见:文档转换GET_v1
- 单一文档转为PDF,文档POST到服务器,用HTTP POST Form Data方式,见:文档转换POST_v1
- 多个图片转为PDF,文档是多个下载链接,用HTTP POST JSON方式,见:多张图片转换POST_v1
调用文件操作接口
- 文件操作接口v1和v2类似,v2支持同步和异步,v1只支持异步。见文件操作
调用转换API需要签名,详细见文档附录:阿里签名 调用查询结果API无需签名。
阿里云支持从OSS内网直接下载文件,节约流量,见:阿里云独有部分
文档转换_v2
异步url:
https://doc2pdf.market.alicloudapi.com/v2/convert_async
同步url:
https://doc2pdf.market.alicloudapi.com/v2/convert_sync
HTTP方式: POST
Header中的Content-Type传入application/json
Body是JSON格式,支持以下3种输入源文件的方法:
方法1: 文件url,最大1500M:
{"input": ["http://xxx.docx"]}
方法2: 文件Base64字符串,注意需要传入type(源文档类型),Base64字符串最大8M:
{"input": ["base64字符串"], "type": "docx"}
方法3: 多张图片url,注意只能是图片:
{"input": ["http://xxx.jpg", "http://xxx.png"]}
必须签名才能调用成功,签名见阿里签名规则:
https://help.aliyun.com/zh/api-gateway/traditional-api-gateway/use-cases/call-apis
支持以下源文件格式:
| 类型 | 扩展名(type取值) | 备注 |
|---|---|---|
| PDF文件 | ||
| 微软Office文档 | doc, docx, ppt, pptx, xls, xlsx, pot, pps, ppsx, csv | |
| WPS文档 | wps, wpt, dps, dpt, et, ett | |
| 苹果iWork文档 | pages, key, numbers | |
| 开放版式文档 | ofd | |
| 电子刊物 | caj, nh, kdh | |
| 电子书 | epub, chm, mobi, azw, azw3, fb2, cbr, cbz, djvu | |
| Markdown | md | |
| SVG | svg | |
| CAD文档 | dwg, dxf, dwt, dws, dwf, dwfx, dxb, dgn, plt, cf2, cgm | |
| 3D模型 | obj, 3ds, stl, gltf, glb, fbx, dae, ifc, step, stp, iges, igs, fcstd, brep, ply | 静态预览(平面示意图,按 6 个视角展示:等轴测 / 前 / 右 / 顶 / 后 / 左,便于快速查看模型外观;非可旋转的交互式 3D) |
| Figma和Sketch文档 | fig, sketch | |
| 网页文件 | html, htm, mht, eml | |
| 图片文件 | 几乎所有格式例如png, jpg, jpeg, gif, tif, tiff, bmp, webp, ai等 | type可以统一传img,代表一切图片 |
| 文本文件 | txt, rtf, java, js, c, cpp, jsp, css, xml, properties, log, | type可以统一传txt,代表一切文本 |
| 网址网页 | url | 网址,例如:https://www.duhuitech.com |
自定义参数:
| 参数 | 类型 | 备注 | 默认值 |
| type | string | 要转换的原始文件扩展名,如果不传,则取url中的扩展名,注意如果无法获取扩展名会导致转换异常或出错 | 空 |
| 输出PDF相关 | |||
| linearization | int | 是否需要快速web显示(PDF流式显示),默认0否,1是 | 0 |
| compress | int | 是否压缩,默认0不压缩,压缩分3档:1,2,3,1的压缩率最低,3最高 | 0 |
| flatten | int | 是否扁平化(注释合并到PDF),默认0否,1是 | 0 |
| imagepdf | int | 生成图片PDF,默认0否,1是 | 0 |
| pagesize | int | 设定页面大小。 如果源文件是Word,TXT,Excel,HTML,Epub此参数会覆盖excelpagesize。默认0:源文档设定值,如无则是A4。 如果源文件是图片,默认0:长图保持原图大小,非长图A4,原图不满A4大小的保持原图大小。 取值:1:A3,2:A4,3:A5,4:B4,5:B5,6:Letter,7:Legal,8:Tabloid,9:Ledger |
0 |
| adjustorientation | int | 调整所有页横屏或是竖屏。默认0不调整。 1: 竖屏,如果页面横屏则顺时针90度变竖屏 2: 竖屏,如果页面横屏则逆时针90度变竖屏 3: 横屏,如果页面竖屏则顺时针90度变横屏 4 :横屏,如果页面竖屏则逆时针90度变横屏 |
0 |
| pagesplit | int | 将每一页按长边等分为多页。例如一页是试卷,可以分为左右二页。默认0不分页,2: 分2页,3: 分3页 | 0 |
| needpagesizeinfo | int | 是否返回每一页的大小信息,默认0:否,1:是 | 0 |
| userpassword | string | 生成PDF文件的User Password,用户密码加密指打开文件时需要输入的密码,默认无 | 空 |
| ownerpassword | string | 生成PDF文件的Owner Password,所有者密码加密指修改文件时需要输入的密码,默认无 | 空 |
| pdfrestriction | string | 有密码时,生成PDF文件的权限,默认无权限。格式3位,比如010,第一位代表能否打印,第二位代表能否拷贝内容,第三位代表能否编辑 | 空 |
| pdffilename | string | 生成的PDF文件的文件名,默认随机 | 空 |
| 输出水印相关 | |||
| watermark | string | 添加水印,字符个数最大15个 | 空 |
| watermarkfontsize | int | 水印的字体大小,默认24pt | 24 |
| watermarkfontcolor | string | 水印的颜色,输入颜色码,默认黑色#000000,必须7位 | #000000 |
| watermarkfontalpha | int | 水印的透明度,取值范围1-100,越小越透明,默认20 | 20 |
| watermarkstyle | int | 水印的样式,默认0:文档中央一个水印;1: 文档铺满水印 | 0 |
| 输入Office文件相关(源文件为Word,PPT,Excel,WPS等) | |||
| excelislandscape | int | 如果是Excel文件,是否横屏,默认0否(竖屏),1是 | 0 |
| exceliscenter | int | 如果是Excel文件,是否居中,默认0否,1横竖居中,2仅横向居中,3仅纵向居中 | 0 |
| excelmargin | int | 如果是Excel文件,四边的边距,默认10px,单位是像素 | 0 |
| excelsheetindex | int | 如果是Excel文件,指定转换的Sheet索引,默认0:全部,第一个sheet就是1,以此类推 | 0 |
| excelnotshowgridlines | int | 如果是Excel文件,不显示网格线,默认0显示,1不显示 | 0 |
| exceluseprintarea | int | 如果是Excel文件,是否使用打印区域,默认0不使用,1使用,2不使用且只显示有内容的区域 | 0 |
| excelpagesize | int | 如果是Excel文件,设定页面大小,默认A4。0:A4,1:A3,2:A4,3:A5,4:B4,5:B5,6:Letter,7:Legal,8:Tabloid,9:Ledger | 0 |
| excelpagefitmode | int | 如果是 Excel 文件,页面缩放方式:0 默认(不使用打印区域时将所有列调整为一页宽;使用打印区域时沿用源文件缩放);1 将所有列调整为一页宽;2 将每张工作表调整为一页;3 将所有行调整为一页高;4 无缩放,按 100% 比例输出。设置为 1、2、3、4 时,与 exceluseprintarea=1 同时使用仍会保留打印区域 |
0 |
| wordshowmarkup | int | 如果是Word文件,是否显示审阅标记,默认0不显示,1显示 | 0 |
| powerpointoutputtype | int | 如果是PPT文件,设定导出样式,默认幻灯片。0:幻灯片,0以上是讲义模式:1:每页一个幻灯片,2:每页二个幻灯片,3:每页三个幻灯片,4:每页四个幻灯片,5:每页六个幻灯片,6:每页九个幻灯片 | 0 |
| powerpointhandoutorder | int | 如果是PPT文件,当设置为讲义时,设定顺序,默认0水平,1垂直 | 0 |
| powerpointhandoutorientation | int | 如果是PPT文件,当设置为讲义时,输出文件的方向,默认0不改变,1横向,2纵向 | 0 |
| pageorientation | int | 如果是Word,TXT,Excel,HTML,设定页面横向还是竖向,此参数会覆盖excelislandscape。默认0不变,1横向,2 竖向 | 0 |
| 输入图片,扫描版PDF相关(源文件jpg,png,pdf等) | |||
| ocr | int | 是否识别图中文字或扫描版PDF文字,在输出的PDF中变为可选可搜索的文字,默认0否,1是 | 0 |
| language | int | 如果开启OCR,识别语言选项,默认2简体中文: 1:英语 2:简体中文 3:繁体中文 4:法语 5:德语 6:意大利语 7:俄语 8:日文 9:韩文 10:西班牙语 11:葡萄牙语 12:丹麦语 13:荷兰语 14:芬兰语 15:挪威语 16:瑞典语 17:土耳其语 |
2 |
| dewarp | int | 是否切边矫正,默认0否,1是。如果打开,每次只允许传入一张图(图片分辨率短边大于20,长边小于10000) | 0 |
| deskew | int | 是否将斜的文字矫正,默认0否,1是 | 0 |
| clean | int | 是否清除图像背景只显示文字,默认0否,1是 | 0 |
| grayimage | int | 如果是图片文件,是否把图片变为灰度图,默认0否,1是 | 0 |
| text | int | 如果开启ocr,是否使用矢量文字替换图片内文字,使得即使图片中的文字模糊,pdf放大后文字仍然清晰。默认0否,1是 | 0 |
| split2p | int | 如果开启ocr,横向图片若有左右两部分(常见于试卷),分割为2页。默认0:否,1是 | 0 |
| imagesize | int | 统一每页为固定宽,默认0否,输入数字即每页宽度,最大4096。设置该值将导致pagesize失效。 | 0 |
| 网址网页相关(type传url, html, md等) | |||
| ismobileurl | int | 如果type是url,html,md,是否移动端显示。默认0:桌面端网页,1:移动端网页 | 0 |
| urldesktopwidth | int | 如果type是url,html,md,桌面端显示。设定网页最大的宽度,默认:1440,最大:1920 | 0 |
| htmlpagemargin | string | 如果type是url,html,md,生成的页面边距。输入的是字符串,按照顺序:left top right bottom。单位可以是:px,in,cm,mm。例如左上右下分别是1px,2px,3px,4px,传的字符串就是:1px 2px 3px 4px。默认值:左右0,上下各1cm | 空 |
| urlwait | int | 如果type是url,停留一段时间再抓取页面,单位秒。默认0:不停留,最大30。比如10就是延迟10秒 | 0 |
| urltimeout | int | 如果type是url,加载资源的超时时间。默认0:40秒,最大120秒。比如10就是10秒 | 0 |
| urlonepage | int | 如果type是url,html,md,是否生成单页的长PDF。默认0:否, 1:是。注意打开这个选项后htmlpagemargin失效 | 0 |
| markdownTheme | string | 仅当输入为 Markdown 时,设置 Markdown 渲染主题。可选值:monet(莫奈)、vangogh(梵高)、rembrandt(伦勃朗)、vermeer(维米尔)、picasso(毕加索)、kandinsky(康定斯基)、davinci(达·芬奇) |
不传或传空时使用默认样式 |
| 输入网页HTML相关(源文件HTML) | |||
| htmloutline | int | 如果是HTML,是否根据h1,h2等html标记生成outline,默认0否,1是 | 0 |
| 输入EPUB相关(type传epub等) | |||
| epubfontsize | int | 如果type是epub等,输出的字体大小(单位pt,磅)。默认0自动 | 0 |
| epublineheight | int | 如果type是epub等,输出的行高(单位百分比)。例如120表示行高是字体大小的120%。默认0自动 | 0 |
| epubpagesize | string | 如果type是epub等,输出的页面自定义大小(单位厘米)。此参数如果设置会覆盖pagesize。默认空自动。例如7.2x15.5 | 空 |
| epubmargin | string | 如果type是epub等,输出的页面边距(单位pt,磅)。默认空自动。页边距格式:左 上 右 下,用空格分隔。例如5 5 5 5 | 空 |
| 输入CAD文件相关(源文件dwg, dwf等) | |||
| cadlayer | int | 如果是CAD文件,是否生成Layer层,默认0否,1是 | 0 |
| cadisdisplay | int | 如果是CAD文件,是否按照Display显示,默认0不按照,1按照Display | 0 |
| cadquality | int | 如果是CAD文件,生成的文件品质,默认3。取值从1-5品质从低到高。 | 3 |
| caddetectempty | int | 如果是CAD文件,是否删除空页,默认0不删除,1删除。 | 0 |
| 其他 | |||
| password | string | 源文件的密码,支持有密码的PDF,Word,PPT,Excel文件类型,默认空无密码 | 空 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,详细见 回调URL | 空 |
请求示例:
- 例1: 把word文件转为PDF,并设置1级压缩
{"input": ["http://xxx.docx"], "compress":1}
- 例2: 把2张图片转为PDF,并识别图中文字,去除图片,转为矢量文字可选的PDF
{"input":["http://xxx.jpg", "http://xxx.png"], "ocr":1, "clean":1, "text":1}
- 例3: 把Excel文件转为PDF,并只包含有内容的单元格,加上水印"度慧科技",设置PDF打开密码为123
{"input":["http://xxx.xlsx"], "exceluseprintarea":2, "watermark":"度慧科技", "userpassword":"YOUR_PASSWORD"}
- 例4: 把 Excel 文件转为 PDF,并将每张工作表调整为一页
{"input":["http://xxx.xlsx"], "excelpagefitmode":2}
返回数据结构【异步】:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| token | string | 是 | 用于查询结果接口 |
返回示例(成功状态)【异步】:
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态)【异步】:
{
"code":40001,
"msg":"ParmNotRight"
}
同步调用
同步调用的最大返回时间是60秒,如果60秒内转换结束则直接返回结果。否则会返回token,之后和异步方式一样可以调用查询结果接口查询该token的转换结果。所以同步调用如果传入的文件过大,无法保证在60秒内结束,则转为异步流程。
返回数据结构【同步】:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| token | string | 是 | 请求的token |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 含义 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| pdfurl | pdf文件地址 | string | 否(status为Done时返回) | 转换出来的PDF地址,http和https都支持 |
| count | 总页数 | integer | 否(status为Done时返回) | PDF页面总数 |
| filesize | 文件大小 | integer | 否(status为Done时返回) | PDF文件大小 |
| status | 状态 | string | 是 | Done:转换成功 Failed:转换失败 |
返回示例(成功状态)【同步】:
{
"code": 10000,
"msg": "",
"result": {
"count": 1,
"filesize": 17747,
"pdfurl": "https://file.duhuitech.com/o/xxx/xxx.pdf",
"status": "Done"
},
"token": "YOUR_CREDENTIAL"
}
返回示例(超时状态)【同步】:
{
"code": 40500,
"msg": "Timeout, query token later",
"token": "YOUR_CREDENTIAL"
}
文件操作_v1/v2
v1和v2的文件操作功能基本相同,共用以下action、请求参数和示例。区别仅在调用入口和返回方式:
- v1请求url是
https://doc2pdf.market.alicloudapi.com/v1/pdfaction,仅支持异步调用 - v2请求url分为异步和同步:异步是
https://doc2pdf.market.alicloudapi.com/v2/action_async,同步是https://doc2pdf.market.alicloudapi.com/v2/action_sync - v2同步调用最多等待60秒,超时后会返回token,转入和异步相同的查询结果流程,详细见 同步调用
- 下面的action说明、JSON Body参数和示例,v1/v2通用
支持以下操作:
| 类型 | 操作 |
|---|---|
| 文件处理 | 文件合并、文件拆分、转为图片PDF、文件修复、文件扁平化、文件线性化、PDF压缩、PDF净化、PDF灰度化 |
| 内容叠加与排版 | 图片签名、文件加水印、文件去水印、PDF前景叠加、PDF背景叠加、页眉页脚、页面加页码、PDF多页拼版 / n-up、PDF小册子排版 |
| 页面处理 | 页面删除、页面插入、页面提取、页面重排、页面倒序、页面复制、空白页插入、自动删除空白页、页面旋转、PDF裁边、PDF页数查询、PDF页面信息 |
| 内容提取与结构 | 提取图片、PDF文本提取、PDF元数据读取/修改、PDF目录导出、PDF目录导入 |
| 安全与权限 | 文件加密、文件解密、文件是否加密 |
POST Body传入JSON,Header中的Content-Type传入application/json
通过指定action,对PDF文件进行不同的操作,详细如下:
文件处理
- 文件合并:
专属参数:无。
示例:
{"action":"merge","url":["https://xxx/xxx.pdf", "https://xxx/xxx.pdf"]}
会合并为一个PDF文件。url数组需传2个以上PDF地址。
- 文件拆分:
支持的专属参数:splitcount(按固定页数拆分)、pageranges(按多个页段拆分,使用竖线分隔;和 splitcount 同时传时优先按 splitcount)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| splitcount | number | 按固定页数拆分;和 pageranges 同时传时优先按本参数处理 |
条件必传 |
| pageranges | string | 按多个页段拆分,使用竖线分隔,如 `1-3 | 4-10 |
示例:
{"action":"split","url":["https://xxx/xxx.pdf"],"splitcount":2}
会把PDF拆分为多个PDF,每个PDF是2页。
{"action":"split","url":["https://xxx/xxx.pdf"],"pageranges":"1-3|4-10|11-12"}
会按 pageranges 指定的页段拆分为多个PDF,依次输出为1.pdf、2.pdf、3.pdf。
pdffilename 不支持;拆分结果文件会按 1.pdf、2.pdf、3.pdf 这类顺序命名。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.pdfurls | string数组 | 拆分后 PDF 地址数组,按输出顺序返回 |
| result.count | number | 拆分后 PDF 数量 |
返回结果示例:
{"result":{"status":"done","count":3,"pdfurls":["https://file.duhuitech.com/o/xxx/1.pdf","https://file.duhuitech.com/o/xxx/2.pdf","https://file.duhuitech.com/o/xxx/3.pdf"]}}
- 转为图片PDF:
支持的专属参数:compress(可选,默认0不压缩)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| compress | number | 压缩等级;可选,默认 0 不压缩 |
否 |
示例:
{"action":"imagepdf","url":["https://xxx/xxx.pdf"],"compress":2}
会把PDF每一页转成图片后再重新生成一个图片型PDF。
- 文件修复:
专属参数:无。
示例:
{"action":"repairpdf","url":["https://xxx/xxx.pdf"]}
会尝试修复PDF结构问题,并输出修复后的PDF。
- 文件扁平化:
专属参数:无。
示例:
{"action":"flatten","url":["https://xxx/xxx.pdf"]}
会把PDF中的批注等可交互内容扁平化到页面内容里。
- 文件线性化:
专属参数:无。
示例:
{"action":"linearize","url":["https://xxx/xxx.pdf"]}
会把PDF做快速网页预览优化。
- PDF压缩:
支持的专属参数:compress(必传,支持1、2、3,也支持直接传目标图片分辨率)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| compress | number | 压缩等级;支持 1、2、3,也支持直接传目标图片分辨率 |
是 |
示例:
{"action":"compresspdf","url":["https://xxx/xxx.pdf"],"compress":2}
压缩PDF;如果压缩结果不比原文件更小,会保留较小版本输出。
- PDF净化:
专属参数:无。
示例:
{"action":"pdfsanitize","url":["https://xxx/xxx.pdf"]}
会重写PDF结构并清空常见元数据字段,输出净化后的PDF。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.pdfurl | string | 净化后 PDF 地址 |
| result.count | number | 净化后 PDF 总页数 |
| result.data | object | 净化后的元数据对象;字段结构与 pdfmeta 读取返回的 result.data 一致 |
返回结果示例:
{"result":{"status":"done","count":12,"pdfurl":"https://file.duhuitech.com/o/xxx/sanitize.pdf","data":{}}}
- PDF灰度化:
专属参数:无。
示例:
{"action":"grayscale","url":["https://xxx/xxx.pdf"]}
会把PDF转换为灰度版,并输出新的PDF。
内容叠加与排版
- 图片签名:
支持的专属参数:pageindex(签名页码)、stampurl(签名图片地址)、stamprect(签名位置和大小,格式 x,y,width,height)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindex | number | 签名页码,示例为第 1 页 |
是 |
| stampurl | string | 签名图片 URL | 是 |
| stamprect | string | 签名位置和大小,格式 x,y,width,height,单位像素 |
是 |
示例:
{"action":"stampsignature","url":["https://xxx/xxx.pdf"],"pageindex":1,"stampurl":"http://xxx/xxx.png","stamprect":"10,10,100,50"}
会把PDF的第一页加上图片签名,签名位置在x=10,y=10,宽度=100,高度=50,单位像素。
- 文件加水印:
支持的专属参数:watermark、watermarkstyle、watermarkfontsize、watermarkfontcolor、watermarkfontalpha。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| watermark | string | 水印文字内容 | 是 |
| watermarkstyle | number | 水印样式编号 | 按需 |
| watermarkfontsize | number | 水印字体大小 | 按需 |
| watermarkfontcolor | string | 水印字体颜色,格式如 #000000 |
按需 |
| watermarkfontalpha | number | 水印透明度 | 按需 |
示例:
{"action":"watermark","url":["https://xxx/xxx.pdf"],"watermark":"CONFIDENTIAL","watermarkstyle":1,"watermarkfontsize":24,"watermarkfontcolor":"#000000","watermarkfontalpha":20}
会给PDF每一页添加文字水印。
- 文件去水印:
专属参数:无。
示例:
{"action":"removewatermark","url":["https://xxx/xxx.pdf"]}
会尝试移除PDF中的水印内容,并输出新的PDF。
- PDF前景叠加:
支持的专属参数:data.repeat(可选,控制是否把第 2 个 PDF 按页序循环铺到所有页面)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.repeat | number | 可选;传 1 时把第 2 个 PDF 按页序循环铺到所有页面;不传时默认只按第 2 个 PDF 的实际页数逐页叠加 |
否 |
示例:
{"action":"overlaypdf","url":["https://xxx/base.pdf","https://xxx/overlay.pdf"],"data":{"repeat":1}}
行为说明:不传 data.repeat 时,默认只会按第 2 个 PDF 的实际页数逐页做前景叠加,超出的底稿页不再叠加;传 1 时会按页序循环铺到所有页面。若第 2 个 PDF 只有 1 页,即使不传 data.repeat,系统也会自动把这一页铺到所有页面。
会把第2个PDF作为前景叠加到第1个PDF上,并输出新的PDF。url固定传2个PDF,第1个是底稿PDF。
- PDF背景叠加:
支持的专属参数:data.repeat(可选,控制是否把第 2 个 PDF 按页序循环铺到所有页面)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.repeat | number | 可选;传 1 时把第 2 个 PDF 按页序循环铺到所有页面;不传时默认只按第 2 个 PDF 的实际页数逐页叠加 |
否 |
示例:
{"action":"underlaypdf","url":["https://xxx/base.pdf","https://xxx/background.pdf"],"data":{"repeat":1}}
行为说明:不传 data.repeat 时,默认只会按第 2 个 PDF 的实际页数逐页做背景叠加,超出的底稿页不再叠加;传 1 时会按页序循环铺到所有页面。若第 2 个 PDF 只有 1 页,即使不传 data.repeat,系统也会自动把这一页铺到所有页面。
会把第2个PDF作为背景叠加到第1个PDF下方,并输出新的PDF。url固定传2个PDF,第1个是底稿PDF。
- 页眉页脚:
支持的专属参数:data.header、data.footer、data.fontsize、data.fontcolor、data.fontalpha。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.header | string | 页眉文字;和 data.footer 至少传一个 |
条件必传 |
| data.footer | string | 页脚文字;和 data.header 至少传一个 |
条件必传 |
| data.fontsize | number | 文字大小 | 按需 |
| data.fontcolor | string | 文字颜色,格式如 #333333 |
按需 |
| data.fontalpha | number | 文字透明度 | 按需 |
示例:
{"action":"headerfooter","url":["https://xxx/xxx.pdf"],"data":{"header":"Confidential","footer":"第 {{page}} / {{total}} 页","fontsize":12,"fontcolor":"#333333","fontalpha":80}}
会给每一页叠加文字页眉页脚。
- 页面加页码:
专属参数:无。
示例:
{"action":"pageaddnumber","url":["https://xxx/xxx.pdf"]}
会把PDF每一页右下角添加页码。
- PDF多页拼版 / n-up:
支持的专属参数:data.nup、data.paper、data.landscape、data.frame、data.scale。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.nup | string | 每张输出纸放几页;格式为 列x行,如 2x1、2x2、3x2。2x1 表示一张纸放 2 页,2x2 表示一张纸放 4 页 |
是 |
| data.paper | string | 输出纸张大小。建议值:a3paper、a4paper、a5paper、b4paper、b5paper、letterpaper、legalpaper。默认值为 a4paper |
按需 |
| data.landscape | number | 输出纸张是否横向。1 为横向,省略或 0 为纵向。横向通常更适合 2x1、2x2 这类布局 |
按需 |
| data.frame | number | 是否给每个小页面画边框。1 表示画边框,方便区分每个子页;省略或 0 表示不画 |
按需 |
| data.scale | number | 每个小页面的缩放比例,必须大于 0。常用 0.9 到 1.0;数值越小,页面四周留白越多 |
按需 |
常见纸张说明:
a4paper:最常见的办公打印纸;如果不确定,优先用它。a3paper:比 A4 更大,适合一次拼更多页。a5paper:比 A4 更小,适合输出更小的页面。letterpaper:北美常见纸型。legalpaper:比letterpaper更长,常用于合同、表格。
示例 1:一张纸放 4 页,适合做讲义或速读版
{"action":"pdfnup","url":["https://xxx/xxx.pdf"],"data":{"nup":"2x2","paper":"a4paper","landscape":1,"frame":1,"scale":0.95}}
示例 2:一张纸放 2 页,保留更大的阅读字号
{"action":"pdfnup","url":["https://xxx/xxx.pdf"],"data":{"nup":"2x1","paper":"a4paper"}}
示例 3:放到更大的纸上,减少内容拥挤
{"action":"pdfnup","url":["https://xxx/xxx.pdf"],"data":{"nup":"2x2","paper":"a3paper","scale":0.9}}
这个操作会把多页 PDF 重新排到一张纸上。原文件里的超链接、书签、表单等交互信息可能不会保留。
- PDF小册子排版:
支持的专属参数:data.paper、data.landscape、data.scale、data.signature、data.flipotheredge。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.paper | string | 输出纸张大小。建议值:a3paper、a4paper、a5paper、b4paper、b5paper、letterpaper、legalpaper。默认值为 a4paper |
按需 |
| data.landscape | number | 输出纸张是否横向。1 为横向,省略或 0 为纵向;做双面打印小册子时,横向纸面通常更常见 |
按需 |
| data.scale | number | 页面缩放比例,必须大于 0。常用 0.9 到 1.0;如果担心装订后内容太靠边,可以适当调小 |
按需 |
| data.signature | number | 每个装订单元包含多少页,必须是 4 的倍数,如 4、8、16、32。省略时会把整份文件当成一个完整小册子自动排版 |
按需 |
| data.flipotheredge | number | 是否切换双面打印的翻页边。1 表示开启;如果你试打后发现背面上下颠倒,可以尝试开启这个参数 |
按需 |
signature 可以简单理解为“分几本小册子来装订”:
signature=16:每 16 页做成一个装订单元。signature=32:每 32 页做成一个装订单元。- 不传:整份 PDF 当成一个小册子,系统会自动补空白页到 4 的倍数。
示例 1:整份 PDF 直接做成一本小册子
{"action":"pdfbooklet","url":["https://xxx/xxx.pdf"],"data":{"paper":"a4paper"}}
示例 2:每 16 页做一个装订单元,适合页数较多的文档
{"action":"pdfbooklet","url":["https://xxx/xxx.pdf"],"data":{"paper":"a4paper","signature":16,"flipotheredge":1,"scale":0.95}}
示例 3:如果双面打印背面方向不对,可尝试切换翻页边
{"action":"pdfbooklet","url":["https://xxx/xxx.pdf"],"data":{"paper":"a4paper","signature":16,"flipotheredge":1}}
这个操作会按小册子阅读顺序重新排页,并在需要时自动补空白页,适合双面打印后对折装订。原文件里的超链接、书签、表单等交互信息可能不会保留。
页面处理
- 页面删除:
支持的专属参数:pageindexes(要删除的页码字符串,支持区间组合;按页码集合删除选中页,不按输入顺序重排)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 要删除的页码字符串,支持区间组合;按页码集合删除选中页,不按输入顺序重排 | 是 |
示例:
{"action":"pageremove","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3"}
会把PDF里的第一页、第三页删除;若传入 3,1 或 1,3,4-5,也是按页码集合选中后删除,不会因为输入顺序改变删除逻辑。
- 页面插入:
支持的专属参数:pageindex(插入位置)、pageinserturl(插入的PDF地址)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindex | number | 插入位置;示例为在第 1 页后插入 |
是 |
| pageinserturl | string | 待插入 PDF 的 URL | 是 |
示例:
{"action":"pageinsert","url":["https://xxx/xxx.pdf"],"pageindex":1,"pageinserturl":"https://xxx/xxx.pdf"}
会在PDF的第一页后面插入 pageinserturl 这个地址的PDF。
- 页面提取:
支持的专属参数:pageindexes(要提取的页码字符串,支持区间组合、乱序和列表/区间混合;结果按给定顺序输出)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 要提取的页码字符串,支持区间组合、乱序和列表/区间混合;结果按给定顺序输出 | 是 |
示例:
{"action":"pageextract","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3"}
会把PDF里的第一页、第三页提取出来作为一个PDF文件;也支持如 3,1,2,5-6 这样的页序写法。
- 页面重排:
支持的专属参数:pageindexes(最终页序,支持乱序、范围和列表/区间混合)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 最终页序,支持乱序、范围和列表/区间混合 | 是 |
示例:
{"action":"pageorder","url":["https://xxx/xxx.pdf"],"pageindexes":"3,1,2,5-6"}
会按给定顺序重新生成一个PDF文件。
- 页面倒序:
专属参数:无。
示例:
{"action":"pagereverse","url":["https://xxx/xxx.pdf"]}
会把PDF所有页面整体倒序输出。
- 页面复制:
支持的专属参数:pageindexes(可选;不传则每页复制一遍,传则按原PDF页序在原位复制指定页,支持区间组合)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 可选;不传则每页复制一遍,传则按原PDF页序在原位复制指定页,支持区间组合 | 否 |
示例:
{"action":"pageduplicate","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3,5-6"}
会在原页面后面插入对应页面副本;若传入 3,1,仍按原PDF页序在第1页、第3页后插入副本。
- 空白页插入:
支持的专属参数:pageindex(插入位置,0表示插到第一页前)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindex | number | 插入位置;0 表示插到第一页前 |
是 |
示例:
{"action":"blankpageinsert","url":["https://xxx/xxx.pdf"],"pageindex":2}
会在第2页后插入1个同尺寸空白页。
- 自动删除空白页:
专属参数:无。
示例:
{"action":"removeblankpages","url":["https://xxx/xxx.pdf"]}
会自动识别接近纯白的页面并删除,适合扫描件里的空白隔页清理。
- 页面旋转:
支持的专属参数:pagerotateangle(旋转角度)、pageindexes(可选,按原PDF页序筛选指定页面)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pagerotateangle | number | 旋转角度,如 90 |
是 |
| pageindexes | string | 可选;仅按原PDF页序筛选并旋转指定页面,支持区间组合 | 否 |
示例:
{"action":"pagerotate","url":["https://xxx/xxx.pdf"],"pagerotateangle":90,"pageindexes":"2,4-6"}
会把PDF整本或指定页面按给定角度旋转;若传入 3,1,会旋转第1页和第3页,但不会重排页面。
- PDF裁边:
支持的专属参数:pageindexes、data.left、data.right、data.top、data.bottom。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 需要裁边的页码范围,支持区间组合;按原PDF页序处理选中页 | 按需 |
| data.left | number | 左边裁剪量 | 按需 |
| data.right | number | 右边裁剪量 | 按需 |
| data.top | number | 上边裁剪量 | 按需 |
| data.bottom | number | 下边裁剪量 | 按需 |
示例:
{"action":"pdfcrop","url":["https://xxx/xxx.pdf"],"pageindexes":"2-10","data":{"left":18,"right":18,"top":24,"bottom":24}}
会按统一边距修改选中页面的CropBox,并输出新的pdfurl。pageindexes 仅用于筛选要裁边的页面,不会因为输入顺序而重排页面。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.pdfurl | string | 裁边后 PDF 地址 |
| result.count | number | 裁边后 PDF 总页数 |
| result.data | object | 裁边后整份 PDF 的页面信息;结构与 pageinfo 返回的 result.data 一致 |
返回结果示例:
{"result":{"status":"done","count":12,"pdfurl":"https://file.duhuitech.com/o/xxx/crop.pdf","data":{"uniform":true,"pages":[{"page":1,"width":559.28,"height":805.89,"orientation":"portrait"}]}}}
- PDF页数查询:
专属参数:无。
示例:
{"action":"pagecountinfo","url":["https://xxx/xxx.pdf"]}
会只查询PDF页数。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.count | number | PDF 总页数 |
返回结果示例:
{"result":{"status":"done","count":12}}
- PDF页面信息:
支持的专属参数:pageindexes(可选;不传返回全部页面,传则按原PDF页序返回指定页)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 可选;不传返回全部页面,传则按原PDF页序返回指定页 | 否 |
示例:
{"action":"pageinfo","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3-4"}
会返回每一页的宽高和横竖版信息;若传入 3,1,返回结果仍按第1页、第3页的原PDF页序排列。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.count | number | 返回的页面条数;不传 pageindexes 时等于 PDF 总页数 |
| result.data.uniform | boolean | 返回页面尺寸是否全部一致 |
| result.data.pages | array | 页面信息数组,按原 PDF 页序返回 |
| result.data.pages[].page | number | 页码,从 1 开始 |
| result.data.pages[].width | number | 页面宽度,单位 pt |
| result.data.pages[].height | number | 页面高度,单位 pt |
| result.data.pages[].orientation | string | 页面方向:portrait、landscape 或 square |
返回结果示例:
{"result":{"status":"done","count":3,"data":{"uniform":false,"pages":[{"page":1,"width":595.28,"height":841.89,"orientation":"portrait"},{"page":3,"width":841.89,"height":595.28,"orientation":"landscape"},{"page":4,"width":595.28,"height":595.28,"orientation":"square"}]}}}
内容提取与结构
- 提取图片:
专属参数:无。
示例:
{"action":"extractimg","url":["https://xxx/xxx.pdf"]}
会把PDF里的图片提取出来。
pdffilename 不支持;导出的图片文件会按 1.png、2.png 这类顺序命名。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.imageurls | string数组 | 提取出的图片地址数组,按输出顺序返回 |
| result.count | number | 提取出的图片数量 |
返回结果示例:
{"result":{"status":"done","count":2,"imageurls":["https://file.duhuitech.com/o/xxx/1.png","https://file.duhuitech.com/o/xxx/2.png"]}}
- PDF文本提取:
支持的专属参数:pageindexes、outfilename、data.textwithformat、data.textperpage。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 需要提取文字的页码范围,支持区间组合、乱序和列表/区间混合;会先按给定页序筛页,再提取文字 | 按需 |
| outfilename | string | 输出文件名;默认随机 | 按需 |
| data.textwithformat | number | 是否尽量保留排版信息;1 表示保留 |
按需 |
| data.textperpage | number | 是否按页拆分输出;1 表示每页单独输出并打包 |
按需 |
示例:
{"action":"extracttext","url":["https://xxx/xxx.pdf"],"pageindexes":"1-3","outfilename":"chapter1","data":{"textwithformat":1,"textperpage":1}}
会提取PDF文字内容;默认输出一个txt文件,textperpage 为1时输出按筛选后页序分拆的zip文件。
pdffilename 不适用,请使用 outfilename 控制输出文件名前缀。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.fileurl | string | 提取结果文件地址;可能是 txt,也可能是按页拆分后的 zip |
| result.count | number | 实际提取的页数;不传 pageindexes 时等于 PDF 总页数 |
| result.filesize | number | 输出文件大小 |
返回结果示例:
{"result":{"status":"done","count":3,"filesize":2048,"fileurl":"https://file.duhuitech.com/o/xxx/chapter1.zip"}}
- PDF元数据读取/修改:
支持的专属参数:meta.title、meta.author、meta.subject、meta.keywords、meta.creator、meta.producer。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| meta.title | string | PDF 标题 | 按需 |
| meta.author | string | PDF 作者 | 按需 |
| meta.subject | string | PDF 主题 | 按需 |
| meta.keywords | string | PDF 关键词 | 按需 |
| meta.creator | string | 生成工具 | 按需 |
| meta.producer | string | 生产程序 | 按需 |
示例:
{"action":"pdfmeta","url":["https://xxx/xxx.pdf"],"meta":{"title":"Quarterly Report","author":"Duhui"}}
不传 meta 时会读取当前PDF的常用元数据;传 meta 时会更新对应字段并返回新的pdfurl和更新后的data。
读取模式下 pdffilename 不适用;写入模式下支持 pdffilename。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.data | object | 元数据对象 |
| result.data.title | string | 标题,存在时返回 |
| result.data.author | string | 作者,存在时返回 |
| result.data.subject | string | 主题,存在时返回 |
| result.data.keywords | string | 关键词,存在时返回 |
| result.data.creator | string | 生成工具,存在时返回 |
| result.data.producer | string | 生产程序,存在时返回 |
| result.data.creationdate | string | 创建时间,存在时返回 |
| result.data.moddate | string | 修改时间,存在时返回 |
| result.data.tagged | string | 是否带标签,存在时返回 |
| result.data.encrypted | string | 是否加密,存在时返回 |
返回结果示例(读取):
{"result":{"status":"done","count":12,"data":{"title":"Quarterly Report","author":"Duhui","creator":"Word","producer":"Skia/PDF m123"}}}
更新模式下,返回结果会额外包含 result.pdfurl。
- PDF目录导出:
专属参数:无。
示例:
{"action":"outlineexport","url":["https://xxx/xxx.pdf"]}
会读取PDF目录书签。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.count | number | PDF 总页数 |
| result.data.named_dests | object | 命名目标映射 |
| result.data.outline | array | 目录树数组 |
| result.data.outline[].title | string | 目录标题 |
| result.data.outline[].dest.page_index | number | 目标页索引,从 0 开始 |
| result.data.outline[].dest.dest | array | 目标定位参数,如 ["/Fit"] |
| result.data.outline[].kids | array | 子目录数组;没有子目录时可省略 |
目录节点还可能包含 dest_name、color、flags、count、is_open 等可选字段。
返回结果示例:
{"result":{"status":"done","count":12,"data":{"named_dests":{},"outline":[{"title":"Chapter 1","dest":{"page_index":0,"dest":["/Fit"]},"kids":[{"title":"Section 1.1","dest":{"page_index":1,"dest":["/Fit"]}}]}]}}}
- PDF目录导入:
支持的专属参数:data(目录 JSON 对象,建议先调用 outlineexport 获取后原样传回)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data | JSON对象 | 目录 JSON 对象;建议先调用 outlineexport 获取后原样传回 |
是 |
示例:
{"action":"outlineimport","url":["https://xxx/xxx.pdf"],"data":{"named_dests":{},"outline":[{"title":"Chapter 1","dest":{"page_index":0,"dest":["/Fit"]}}]}}
会把目录JSON写回PDF,并输出新的pdfurl。data 顶层应包含 named_dests 和 outline;其中 page_index 从 0 开始计数。
安全与权限
- 文件加密:
支持的专属参数:userpassword、ownerpassword、pdfrestriction。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| userpassword | string | 用户密码;和 ownerpassword 至少传一个 |
条件必传 |
| ownerpassword | string | 所有者密码;和 userpassword 至少传一个 |
条件必传 |
| pdfrestriction | string | PDF 权限限制编码,如 110 |
按需 |
示例:
{"action":"encrypt","url":["https://xxx/xxx.pdf"],"userpassword":"YOUR_PASSWORD","ownerpassword":"YOUR_PASSWORD","pdfrestriction":"110"}
userpassword 和 ownerpassword 至少传一个。该操作会给PDF加密码和权限限制。
- 文件解密(文件加密转换接口中已有):
支持的专属参数:password(解密密码,可以为空)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| password | string | 解密密码;如果原文件无密码可传空字符串 | 按需 |
示例:
{"action":"decrypt","url":["https://xxx/xxx.pdf"],"password":""}
会把PDF解密。
- 文件是否加密:
专属参数:无。
示例:
{"action":"checkencrypt","url":["https://xxx/xxx.pdf"]}
会检查PDF是否加密。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.data.encrypted | boolean | true 表示已加密,false 表示未加密 |
返回结果示例:
{"result":{"status":"done","data":{"encrypted":true}}}
通用请求参数BODY(JSON):
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| action | string | 操作类型,取值见上方各 action 小节 | 是 |
| url | string数组 | 待处理的PDF URL数组,支持http(s)、ftp;每个action对url数量和含义的要求见对应 action 小节 | 是 |
| pdffilename | string | 生成输出文件的文件名,默认随机;是否支持及具体含义见对应 action 小节 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,详细见 回调URL | 否 |
其余参数均为 action 专属参数,见对应 action 小节。
请求:
v1异步url:
https://doc2pdf.market.alicloudapi.com/v1/pdfaction
v2异步url:
https://doc2pdf.market.alicloudapi.com/v2/action_async
v2同步url:
https://doc2pdf.market.alicloudapi.com/v2/action_sync
HTTP方式:POST
Header中的Content-Type必须是application/json
传入的Body为JSON格式,见上方详细操作。
必须签名才能调用成功,签名见阿里签名规则:
https://help.aliyun.com/zh/api-gateway/traditional-api-gateway/use-cases/call-apis
返回数据结构【v1异步 / v2异步】:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| token | string | 是 | 用于查询结果接口 |
异步任务完成后的通用说明:
- 所有 action 都支持
callbackurl。 - 大多数生成 PDF 的 action 都支持
pdffilename;任务完成后,可在 查询结果 或回调结果里看到result.pdfurl、result.count,通常还会返回result.filesize。 - 特殊 action 的最终返回字段见对应 action 小节,例如:
split返回result.pdfurls,extractimg返回result.imageurls,extracttext返回result.fileurl,pagecountinfo、pageinfo、outlineexport、checkencrypt等返回结构化数据。
返回示例(成功状态)【异步】:
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态)【异步】:
{
"code":40001,
"msg":"ParmNotRight"
}
返回数据结构【v2同步】:
v2同步调用会在60秒内尽量直接返回结果,超时则返回token并转入查询结果流程;返回结构参照上文 同步调用。
查询结果
请求参数:
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| token | string | 调用转换接口拿到的token | 是 |
请求示例:
https://api.duhuitech.com/q?token=YOUR_TOKEN
无需签名,无调用次数限制
由于转换需要时间,文件越大页数越多,转换越久,故需要轮询查询接口来获得结果。查询频率可以是1s一次,也可以更长一些。 查询后先看status,如果是Done或Failed,则转换结束,停止轮询。如果是Doing或Pending,则继续轮询。
返回数据结构:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| token | string | 是 | 请求的token |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 含义 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| status | 状态 | string | 是 | Pending:还未开始 Doing:正在转换 Done:转换成功 Failed:转换失败 |
| progress | 进度 | number | 否(status为Doing时返回) | 范围:0.00 - 1.00, 比如0.88表示88% |
| pdfurl | pdf文件地址 | string | 否(status为Done时返回) | 转换出来的PDF地址,http和https都支持 |
| count | 总页数 | integer | 否(status为Done时返回) | PDF页面总数 |
| filesize | 文件大小 | integer | 否(status为Done时返回) | 输出文件大小 |
| reason | 失败原因 | string | 否(status为Failed时可能返回) | 转换失败的原因 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"token":"YOUR_CREDENTIAL",
"result":
{
"progress":0.02,
"status":"Doing"
}
}
{
"code":10000,
"msg":"",
"token":"YOUR_CREDENTIAL",
"result":
{
"status":"Done",
"pdfurl":"https://file.duhuitech.com/o/xxx/xxx.pdf",
"count":10,
"filesize":17747
}
}
返回示例(失败状态):
{
"code":40000,
"msg":"No such token"
}
备注:
- 文件url方式支持文件大小 1500M。
- 如果图片开启OCR,最大支持的图片大小长边不超过8000像素。
- 最大转换时长:1小时,超过时间未完成则自动失败。
- 转换完成后,下载链接有效时间:1小时。
上述最后2项有延长需求请联系客服:

回调URL:
用途: 客户可以自行部署服务器,系统转换结束后会调用客户提供的回调URL,直接发送转换结果,从而无需再轮询查询结果。
当设置了回调URL,转换结束后(无论成功失败),系统都会尝试调用该URL,具体如下:
以POST方式调用该URL,Header头中Content-Type: application/json
Body为JSON格式,内容和查询结果的结果相同,例如:
{
"code":10000,
"msg":"",
"token":"YOUR_CREDENTIAL",
"result":
{
"status":"Done",
"pdfurl":"https://file.duhuitech.com/o/xxx/xxx.pdf",
"count":10,
"filesize":17747
}
}
服务端收到该POST后需在10秒内返回HTTP STATUS CODE 200,视为调用成功,否则系统认为回调失败,会再次尝试。规则如下:
系统共计最多会调用3次回调URL,如果第一次失败,则等待3秒后尝试第二次,如果第二次失败,则等待5秒后尝试第三次,如果第三次失败,则不再尝试。
回调URL超时时间10秒。
关于下载转换后的文件需支持302跳转
接口返回的下载地址(如 fileurl / fileurls)会经 HTTP 302 跳转到实际文件。浏览器会自动跟随。
以下方式默认会跟随跳转,一般无需额外配置:
wget、Python requests / urllib、Node.js axios / got / fetch、Java OkHttp / HttpURLConnection、Go net/http、C# HttpClient、PHP file_get_contents、Objective-C / Swift NSURLSession / URLSession(含 Alamofire)
少数默认不跟随,需手动打开:
curl:加-L,如curl -L -o out.bin "下载地址"- Java
java.net.http.HttpClient:设置.followRedirects(HttpClient.Redirect.NORMAL) - PHP
curl扩展:设置CURLOPT_FOLLOWLOCATION => true
若只拿到 302 响应、本地没有文件内容,多半是未跟随跳转,按上面说明打开对应选项即可。
阿里云独有部分:
支持从阿里云OSS内网直接下载文件,目前支持的是上海地区的阿里云OSS内网:
oss-cn-shanghai-internal.aliyuncs.com
文档转换GET或多张图片转换POST里的url地址包含上述域名则自动支持
错误码表:
返回的code如果是10000,代表成功,其余是失败
| JSON里返回的code | 错误信息 |
|---|---|
| 40000 | 通用错误 |
| 40001 | 参数错误 |
| 40002 | 参数不符合规范 |
| 40500 | 同步调用超时 |
附录:阿里签名方式
参考链接:
https://help.aliyun.com/zh/api-gateway/traditional-api-gateway/use-cases/call-apis
在调用API商品时,首先您需要了解采用哪种API认证方式,云市场API商品的认证方式主要有以下两种方式。两种方式可同时使用,您可以根据不同情况来选择。
简单身份认证(AppCode)
签名认证
简单身份认证(AppCode)
简单认证(AppCode)调用API,有两种方式,一种是将AppCode放在Header中进行调用,一种是将AppCode放在Query参数中进行调用。
方式一:将AppCode放在Header中
在请求Header中添加一个Authorization参数。
Authorization字段的值的格式为APPCODE + 半角空格 +APPCODE值。格式如下:
Authorization:APPCODE AppCode值
示例:
Authorization:APPCODE YOUR_CREDENTIAL
方式二:将AppCode放在Query中
在请求Query中添加AppCode参数(同时支持appcode , appCode , APPCODE , APPCode四种写法)。
AppCode参数的值为AppCode的值。
示例:
http://www.aliyum.com?AppCode=YOUR_CREDENTIAL
签名认证
比较复杂,推荐用阿里自己的SDK来调用,参考链接:https://help.aliyun.com/zh/api-gateway/traditional-api-gateway/user-guide/use-digest-authentication-to-call-an-api
附录:旧v1接口
文档转换GET_v1
将文档下载地址url转换为PDF,type是源文档的type,比如要把docx转为pdf,type就是docx
请求参数:
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| url | string | 文件url,支持http(s),ftp开头,需要URL Encoding | 是 |
| type | string | 要转换的原始文件扩展名,如果不传,则取url中的扩展名,注意如果获取失败会导致转换异常或出错 | 否 |
| linearization | int | 是否需要快速web显示,默认0否,1是 | 否 |
| compress | int | 是否压缩,默认0不压缩,压缩分3档:1,2,3,1的压缩率最低,3最高 | 否 |
| excelislandscape | int | 如果是Excel文件,是否横屏,默认0否(竖屏),1是 | 否 |
| exceliscenter | int | 如果是Excel文件,是否居中,默认0否,1横竖居中,2仅横向居中,3仅纵向居中 | 否 |
| excelmargin | int | 如果是Excel文件,四边的边距,默认10px,单位是像素 | 否 |
| excelsheetindex | int | 如果是Excel文件,指定转换的Sheet索引,默认0:全部,第一个sheet就是1,以此类推 | 否 |
| excelnotshowgridlines | int | 如果是Excel文件,不显示网格线,默认0显示,1不显示 | 否 |
| exceluseprintarea | int | 如果是Excel文件,是否使用打印区域,默认0不使用,1使用,2不使用且只显示有内容的区域 | 否 |
| excelpagesize | int | 如果是Excel文件,设定页面大小,默认A4。0:A4,1:A3,2:A4,3:A5,4:B4,5:B5,6:Letter,7:Legal,8:Tabloid,9:Ledger | 否 |
| wordshowmarkup | int | 如果是Word文件,是否显示审阅标记,默认0不显示,1显示 | 否 |
| powerpointoutputtype | int | 如果是PPT文件,设定导出样式,默认幻灯片。0:幻灯片,0以上是讲义模式:1:每页一个幻灯片,2:每页二个幻灯片,3:每页三个幻灯片,4:每页四个幻灯片,5:每页六个幻灯片,6:每页九个幻灯片 | 否 |
| powerpointhandoutorder | int | 如果是PPT文件,当设置为讲义时,设定顺序,默认0水平,1垂直 | 否 |
| powerpointhandoutorientation | int | 如果是PPT文件,当设置为讲义时,输出文件的方向,默认0不改变,1横向,2纵向 | 否 |
| imageocr | int | 如果是图片文件,是否识别图中文字并且在PDF中可选可搜索文字,默认0否,1是 | 否 |
| imagedeskew | int | 如果是图片文件,是否将斜的文字矫正,默认0否,1是 | 否 |
| imageclean | int | 如果是图片文件,是否清除图像背景只显示文字,默认0否,1是 | 否 |
| grayimage | int | 如果是图片文件,是否把图片变为灰度图,默认0否,1是 | 否 |
| ismobileurl | int | 如果type是“url”才有效,抓取的网页是否移动端显示。默认0:桌面端网页,1:移动端网页 | 否 |
| urlmargin | string | 如果type是url,生成的页面边距。输入的是URLEncoding后的字符串,按照顺序:left top right bottom。单位可以是:px,in,cm,mm。例如左上右下分别是1px,2px,3px,4px,传的字符串就是:1px%202px%203px%204px。默认值:左右0,上下各1cm | 否 |
| pagesize | int | 如果是Word,TXT,Excel,HTML,设定页面大小,此参数会覆盖excelpagesize。默认0:源文档设定值,如无则是A4,1:A3,2:A4,3:A5,4:B4,5:B5,6:Letter,7:Legal,8:Tabloid,9:Ledger | 否 |
| pageorientation | int | 如果是Word,TXT,Excel,HTML,设定页面横向还是竖向,此参数会覆盖excelislandscape。默认0不变,1横向,2 竖向 | 否 |
| pagesplit | int | 将每一页按长边等分为多页。例如一页是试卷,可以分为左右二页。默认0不分页,2: 分2页,3: 分3页 | 否 |
| userpassword | string | 生成PDF文件的User Password,用户密码加密指打开文件时需要输入的密码,默认无 | 否 |
| ownerpassword | string | 生成PDF文件的Owner Password,所有者密码加密指修改文件时需要输入的密码,默认无 | 否 |
| pdfrestriction | string | 有密码时,生成PDF文件的权限,默认无权限。格式3位,比如010,第一位代表能否打印,第二位代表能否拷贝内容,第三位代表能否编辑 | 否 |
| watermark | string | 添加水印,字符个数最大15个,需要URL Encoding | 否 |
| watermarkfontsize | int | 水印的字体大小,默认24pt | 否 |
| watermarkfontcolor | string | 水印的颜色,输入颜色码,默认黑色#000000,必须7位,需要URL Encoding | 否 |
| watermarkfontalpha | int | 水印的透明度,取值范围1-100,越小越透明,默认20 | 否 |
| watermarkstyle | int | 水印的样式,默认0:文档中央一个水印;1: 文档铺满水印 | 否 |
| imagepdf | int | 生成图片PDF,默认0否,1是 | 否 |
| htmloutline | int | 如果是HTML,是否根据h1,h2等html标记生成outline,默认0否,1是 | 否 |
| cadlayer | int | 如果是CAD文件,是否生成Layer层,默认0否,1是 | 否 |
| cadisdisplay | int | 如果是CAD文件,是否按照Display显示,默认0不按照,1按照Display | 否 |
| cadquality | int | 如果是CAD文件,生成的文件品质,默认3。取值从1-5品质从低到高。 | 否 |
| password | string | 源文件的密码,支持有密码的PDF,Word,PPT,Excel文件类型,默认空无密码 | 否 |
| pdffilename | string | 生成的PDF文件的文件名,默认随机 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,需要URL Encoding,详细见 回调URL | 否 |
请求示例:
https://doc2pdf.market.alicloudapi.com/v1/convert?url=https%3a%2f%2fxxx%2fxxx.docx
将所在url地址的docx文件转为PDF,type就是源文件的type,这个例子里就是docx
必须签名才能调用成功,签名见阿里签名规则:
https://help.aliyun.com/zh/api-gateway/traditional-api-gateway/use-cases/call-apis
支持多种文件格式,type可传入如下格式:
| 类型 | 扩展名(type取值) | 备注 |
|---|---|---|
| PDF文件 | ||
| 微软Office文档 | doc, docx, ppt, pptx, xls, xlsx, pot, pps, ppsx, csv | |
| WPS文档 | wps, wpt, dps, dpt, et, ett | |
| 苹果iWork文档 | pages, key, numbers | |
| 开放版式文档 | ofd | |
| 电子刊物 | caj, nh, kdh | |
| 电子书 | epub, chm, mobi, azw, azw3, fb2, cbr, cbz, djvu | |
| Markdown | md | |
| SVG | svg | |
| CAD文档 | dwg, dxf, dwt, dws, dwf, dwfx, dxb, dgn, plt, cf2, cgm | |
| 3D模型 | obj, 3ds, stl, gltf, glb, fbx, dae, ifc, step, stp, iges, igs, fcstd, brep, ply | 静态预览(平面示意图,按 6 个视角展示:等轴测 / 前 / 右 / 顶 / 后 / 左,便于快速查看模型外观;非可旋转的交互式 3D) |
| Figma和Sketch文档 | fig, sketch | |
| 网页文件 | html, htm, mht, eml | |
| 图片文件 | 几乎所有格式例如png, jpg, jpeg, gif, tif, tiff, bmp, webp, ai等 | type可以统一传img,代表一切图片 |
| 文本文件 | txt, rtf, java, js, c, cpp, jsp, css, xml, properties, log, | type可以统一传txt,代表一切文本 |
| 网址网页 | url | 网址,例如:https://www.duhuitech.com |
返回数据结构:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| token | string | 是 | 用于查询结果接口 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
文档转换POST_v1
直接将单个文档POST到服务器,大小限制8M
请求参数:
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| file | file | 要转换的文档,Content-Type使用multipart/form-data,最大8M | 是 |
| type | string | 要转换的原始文件扩展名,如果不传,则取file中的文件扩展名,注意如果获取失败会导致转换异常或出错 | 否 |
| linearization | int | 是否需要快速web显示,默认0否,1是 | 否 |
| compress | int | 是否压缩,默认0不压缩,压缩分3档:1,2,3,1的压缩率最低,3最高 | 否 |
| excelislandscape | int | 如果是Excel文件,是否横屏,默认0否(竖屏),1是 | 否 |
| exceliscenter | int | 如果是Excel文件,是否居中,默认0否,1横竖居中,2仅横向居中,3仅纵向居中 | 否 |
| excelmargin | int | 如果是Excel文件,四边的边距,默认10px,单位是像素 | 否 |
| excelsheetindex | int | 如果是Excel文件,指定转换的Sheet索引,默认0:全部,第一个sheet就是1,以此类推 | 否 |
| excelnotshowgridlines | int | 如果是Excel文件,不显示网格线,默认0显示,1不显示 | 否 |
| exceluseprintarea | int | 如果是Excel文件,是否使用打印区域,默认0不使用,1使用,2不使用且只显示有内容的区域 | 否 |
| excelpagesize | int | 如果是Excel文件,设定页面大小,默认A4。0:A4,1:A3,2:A4,3:A5,4:B4,5:B5,6:Letter,7:Legal,8:Tabloid,9:Ledger | 否 |
| wordshowmarkup | int | 如果是Word文件,是否显示审阅标记,默认0不显示,1显示 | 否 |
| powerpointoutputtype | int | 如果是PPT文件,设定导出样式,默认幻灯片。0:幻灯片,0以上是讲义模式:1:每页一个幻灯片,2:每页二个幻灯片,3:每页三个幻灯片,4:每页四个幻灯片,5:每页六个幻灯片,6:每页九个幻灯片 | 否 |
| powerpointhandoutorder | int | 如果是PPT文件,当设置为讲义时,设定顺序,默认0水平,1垂直 | 否 |
| powerpointhandoutorientation | int | 如果是PPT文件,当设置为讲义时,输出文件的方向,默认0不改变,1横向,2纵向 | 否 |
| imageocr | int | 如果是图片文件,是否识别图中文字并且在PDF中可选可搜索文字,默认0否,1是 | 否 |
| imagedeskew | int | 如果是图片文件,是否将斜的文字矫正,默认0否,1是 | 否 |
| imageclean | int | 如果是图片文件,是否清除图像背景只显示文字,默认0否,1是 | 否 |
| grayimage | int | 如果是图片文件,是否把图片变为灰度图,默认0否,1是 | 否 |
| pagesize | int | 如果是Word,TXT,Excel,HTML,设定页面大小,此参数会覆盖excelpagesize。默认0:源文档设定值,如无则是A4,1:A3,2:A4,3:A5,4:B4,5:B5,6:Letter,7:Legal,8:Tabloid,9:Ledger | 否 |
| pageorientation | int | 如果是Word,TXT,Excel,HTML,设定页面横向还是竖向,此参数会覆盖excelislandscape。默认0不变,1横向,2 竖向 | 否 |
| pagesplit | int | 将每一页按长边等分为多页。例如一页是试卷,可以分为左右二页。默认0不分页,2: 分2页,3: 分3页 | 否 |
| userpassword | string | 生成PDF文件的User Password,用户密码加密指打开文件时需要输入的密码,默认无 | 否 |
| ownerpassword | string | 生成PDF文件的Owner Password,所有者密码加密指修改文件时需要输入的密码,默认无 | 否 |
| pdfrestriction | string | 有密码时,生成PDF文件的权限,默认无权限。格式3位,比如010,第一位代表能否打印,第二位代表能否拷贝内容,第三位代表能否编辑 | 否 |
| watermark | string | 添加水印,字符个数最大15个,需要URL Encoding | 否 |
| watermarkfontsize | int | 水印的字体大小,默认24pt | 否 |
| watermarkfontcolor | string | 水印的颜色,输入颜色码,默认黑色#000000,必须7位,需要URL Encoding | 否 |
| watermarkfontalpha | int | 水印的透明度,取值范围1-100,越小越透明,默认20 | 否 |
| watermarkstyle | int | 水印的样式,默认0:文档中央一个水印;1: 文档铺满水印 | 否 |
| imagepdf | int | 生成图片PDF,默认0否,1是 | 否 |
| htmloutline | int | 如果是HTML,是否根据h1,h2等html标记生成outline,默认0否,1是 | 否 |
| cadlayer | int | 如果是CAD文件,是否生成Layer层,默认0否,1是 | 否 |
| cadisdisplay | int | 如果是CAD文件,是否按照Display显示,默认0不按照,1按照Display | 否 |
| cadquality | int | 如果是CAD文件,生成的文件品质,默认3。取值从1-5品质从低到高。 | 否 |
| password | string | 源文件的密码,支持有密码的PDF,Word,PPT,Excel文件类型,默认空无密码 | 否 |
| pdffilename | string | 生成的PDF文件的文件名,默认随机 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,详细见 回调URL | 否 |
请求示例:
https://doc2pdf.market.alicloudapi.com/v1/convert_post
Header中的Content-Type必须是multipart/form-data
必须签名才能调用成功,签名见阿里签名规则:
https://help.aliyun.com/zh/api-gateway/traditional-api-gateway/use-cases/call-apis
支持多种文件格式,type可传入如下格式:
| 类型 | 扩展名(type取值) | 备注 |
|---|---|---|
| PDF文件 | ||
| 微软Office文档 | doc, docx, ppt, pptx, xls, xlsx, pot, pps, ppsx, csv | |
| WPS文档 | wps, wpt, dps, dpt, et, ett | |
| 苹果iWork文档 | pages, key, numbers | |
| 开放版式文档 | ofd | |
| 电子刊物 | caj, nh, kdh | |
| 电子书 | epub, chm, mobi, azw, azw3, fb2, cbr, cbz, djvu | |
| Markdown | md | |
| SVG | svg | |
| CAD文档 | dwg, dxf, dwt, dws, dwf, dwfx, dxb, dgn, plt, cf2, cgm | |
| 3D模型 | obj, 3ds, stl, gltf, glb, fbx, dae, ifc, step, stp, iges, igs, fcstd, brep, ply | 静态预览(平面示意图,按 6 个视角展示:等轴测 / 前 / 右 / 顶 / 后 / 左,便于快速查看模型外观;非可旋转的交互式 3D) |
| Figma和Sketch文档 | fig, sketch | |
| 网页文件 | html, htm, mht, eml | |
| 图片文件 | 几乎所有格式例如png, jpg, jpeg, gif, tif, tiff, bmp, webp, ai等 | type可以统一传img,代表一切图片 |
| 文本文件 | txt, rtf, java, js, c, cpp, jsp, css, xml, properties, log, | type可以统一传txt,代表一切文本 |
返回数据结构:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| token | string | 是 | 用于查询结果接口 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
多张图片转换POST_v1
将多张图片转换为pdf,url传入多张图片的地址,传入非图片格式无效
Header中的Content-Type传入application/json
POST Body传入JSON,格式如下:
请求参数BODY:
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| url | string数组 | 要转换的图片URL数组,支持http(s),ftp开头 | 是 |
| type | string | 固定传img | 是 |
| linearization | int | 是否需要快速web显示,默认0否,1是 | 否 |
| compress | int | 是否压缩,默认0不压缩,压缩分3档:1,2,3,1的压缩率最低,3最高 | 否 |
| ocr | int | 是否识别图中文字并且在PDF中可选可搜索文字,默认0否,1是 | 否 |
| deskew | int | 是否将斜的文字矫正,默认0否,1是 | 否 |
| clean | int | 是否清除图像背景只显示文字,默认0否,1是 | 否 |
| grayimage | int | 如果是图片文件,是否把图片变为灰度图,默认0否,1是 | 否 |
| text | int | 如果开启ocr,是否使用矢量文字替换图片内文字,使得即使图片中的文字模糊,pdf放大后文字仍然清晰。默认0否,1是 | 否 |
| split2p | int | 如果开启ocr,横向图片若有左右两部分(常见于试卷),分割为2页。默认0:否,1是 | 否 |
| imagesize | int | 统一每页为固定宽,默认0否,输入数字即每页宽度,最大4096。设置该值将导致pagesize失效。 | 否 |
| pagesize | int | 设定页面大小。默认0:长图保持原图大小,非长图A4,原图不满A4大小的保持原图大小。1:A3,2:A4,3:A5,4:B4,5:B5,6:Letter,7:Legal,8:Tabloid,9:Ledger | 否 |
| language | int | 如果开启OCR,识别语言选项,默认2简体中文: 1:英语 2:简体中文 3:繁体中文 4:法语 5:德语 6:意大利语 7:俄语 8:日文 9:韩文 10:西班牙语 11:葡萄牙语 12:丹麦语 13:荷兰语 14:芬兰语 15:挪威语 16:瑞典语 17:土耳其语 |
否 |
| adjustorientation | int | 调整所有页横屏或是竖屏。默认0不调整。 1: 竖屏,如果页面横屏则顺时针90度变竖屏 2: 竖屏,如果页面横屏则逆时针90度变竖屏 3: 横屏,如果页面竖屏则顺时针90度变横屏 4 :横屏,如果页面竖屏则逆时针90度变横屏 |
否 |
| userpassword | string | 生成PDF文件的User Password,用户密码加密指打开文件时需要输入的密码,默认无 | 否 |
| ownerpassword | string | 生成PDF文件的Owner Password,所有者密码加密指修改文件时需要输入的密码,默认无 | 否 |
| pdfrestriction | string | 有密码时,生成PDF文件的权限,默认无权限。格式3位,比如010,第一位代表能否打印,第二位代表能否拷贝内容,第三位代表能否编辑 | 否 |
| watermark | string | 添加水印,字符个数最大15个 | 否 |
| watermarkfontsize | int | 水印的字体大小,默认24pt | 否 |
| watermarkfontcolor | string | 水印的颜色,输入颜色码,默认黑色#000000,必须7位 | 否 |
| watermarkfontalpha | int | 水印的透明度,取值范围1-100,越小越透明,默认20 | 否 |
| watermarkstyle | int | 水印的样式,默认0:文档中央一个水印;1: 文档铺满水印 | 否 |
| pdffilename | string | 生成的PDF文件的文件名,默认随机 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,详细见 回调URL | 否 |
请求示例:
https://doc2pdf.market.alicloudapi.com/v1/convert
传入的Body为JSON格式,如下:
{ "url": ["http://xxx/xxx1.png", "http://xxx/xxx2.png"], "type": "img" }
必须签名才能调用成功,签名见阿里签名规则:
https://help.aliyun.com/zh/api-gateway/traditional-api-gateway/use-cases/call-apis
例如要把多张图片OCR,变为文字可选的PDF,并且将斜的文字矫正,将图片背景去除,那么JSON就是:
{ "url": ["http://xxx/xxx1.png", "http://xxx/xxx2.png"], "type": "img", "ocr": 1, "deskew": 1, "clean": 1}
支持几乎所有图片格式
返回数据结构:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| token | string | 是 | 用于查询结果接口 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
附录:废弃接口
合并PDF文件POST(废弃,用文件操作代替)
将多个PDF文件合并为一个PDF,url传入多个PDF文件的地址
Header中的Content-Type传入application/json
POST Body传入JSON,格式如下:
请求参数BODY:
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| url | string数组 | 要合并的PDF URL数组,支持http(s),ftp开头 | 是 |
| linearization | int | 是否需要快速web显示,默认0否,1是 | 否 |
| compress | int | 是否压缩,默认0不压缩,压缩分3档:1,2,3,1的压缩率最低,3最高 | 否 |
| userpassword | string | 生成PDF文件的User Password,用户密码加密指打开文件时需要输入的密码,默认无 | 否 |
| ownerpassword | string | 生成PDF文件的Owner Password,所有者密码加密指修改文件时需要输入的密码,默认无 | 否 |
| pdfrestriction | string | 有密码时,生成PDF文件的权限,默认无权限。格式3位,比如010,第一位代表能否打印,第二位代表能否拷贝内容,第三位代表能否编辑 | 否 |
| watermark | string | 添加水印,字符个数最大15个 | 否 |
| watermarkfontsize | int | 水印的字体大小,默认24pt | 否 |
| pdffilename | string | 生成的PDF文件的文件名,默认随机 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,详细见 回调URL | 否 |
请求示例:
https://doc2pdf.market.alicloudapi.com/v1/merge
传入的Body为JSON格式,如下:
{ "url": ["http://xxx/xxx1.png", "http://xxx/xxx2.png"]}
必须签名才能调用成功,签名见阿里签名规则:
https://help.aliyun.com/zh/api-gateway/traditional-api-gateway/use-cases/call-apis
例如要把多个PDF合并为一个,并且开启快速web显示,加上水印,那么JSON就是:
{ "url": ["http://xxx/xxx1.png","http://xxx/xxx2.png"], "linearization":1, "watermark":"测试水印"}
返回数据结构:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| token | string | 是 | 用于查询结果接口 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
概述
2种转换方式
- 单一文档转为PDF,文档是一个下载链接,用HTTP GET方式,见:文档转换GET
- 多个图片转为PDF,文档是多个下载链接,用HTTP POST方式,见:多张图片转换POST
基本用法
由于转换需要时间,文件越大页数越多,转换越久,故系统采用异步的方式获得转换结果。调用转换接口后会获得token,随后有2种方式查询转换结果:
API调用需要签名,详细见文档附录:百度签名
文档转换GET
将文档下载地址url转换为PDF,type是源文档的type,比如要把docx转为pdf,type就是docx
请求参数:
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| url | string | 文件url,支持http(s),ftp开头,需要URL Encoding | 是 |
| type | string | 要转换的原始文件扩展名,如果不传,则取url中的扩展名,注意如果获取失败会导致转换异常或出错 | 否 |
| linearization | int | 是否需要快速web显示,默认0否,1是 | 否 |
| compress | int | 是否压缩,默认0不压缩,压缩分3档:1,2,3,1的压缩率最低,3最高 | 否 |
| excelislandscape | int | 如果是Excel文件,是否横屏,默认0否(竖屏),1是 | 否 |
| exceliscenter | int | 如果是Excel文件,是否居中,默认0否,1横竖居中,2仅横向居中,3仅纵向居中 | 否 |
| excelmargin | int | 如果是Excel文件,四边的边距,默认10px,单位是像素 | 否 |
| excelsheetindex | int | 如果是Excel文件,指定转换的Sheet索引,默认0:全部,第一个sheet就是1,以此类推 | 否 |
| excelnotshowgridlines | int | 如果是Excel文件,不显示网格线,默认0显示,1不显示 | 否 |
| exceluseprintarea | int | 如果是Excel文件,是否使用打印区域,默认0不使用,1使用,2不使用且只显示有内容的区域 | 否 |
| excelpagesize | int | 如果是Excel文件,设定页面大小,默认A4。0:A4,1:A3,2:A4,3:A5,4:B4,5:B5,6:Letter,7:Legal,8:Tabloid,9:Ledger | 否 |
| wordshowmarkup | int | 如果是Word文件,是否显示审阅标记,默认0不显示,1显示 | 否 |
| imageocr | int | 如果是图片文件,是否识别图中文字并且在PDF中可选可搜索文字,默认0否,1是 | 否 |
| imagedeskew | int | 如果是图片文件,是否将斜的文字矫正,默认0否,1是 | 否 |
| imageclean | int | 如果是图片文件,是否清除图像背景只显示文字,默认0否,1是 | 否 |
| grayimage | int | 如果是图片文件,是否把图片变为灰度图,默认0否,1是 | 否 |
| userpassword | string | 生成PDF文件的User Password,默认无 | 否 |
| ownerpassword | string | 生成PDF文件的Owner Password,默认无 | 否 |
| pdfrestriction | string | 有密码时,生成PDF文件的权限,默认无权限。格式3位,比如010,第一位代表能否打印,第二位代表能否拷贝内容,第三位代表能否编辑 | 否 |
| watermark | string | 添加水印,字符个数最大10个 | 否 |
| imagepdf | int | 生成图片PDF,默认0否,1是 | 否 |
| password | string | 源文件的密码,支持有密码的PDF,Word,PPT,Excel文件类型,默认空无密码 | 否 |
| pdffilename | string | 生成的PDF文件的文件名,默认随机 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,需要URL Encoding,详细见 回调URL | 否 |
请求示例:
https://pdfconvert.api.bdymkt.com/v1/convert?url=https%3a%2f%2fxxx%2fxxx.docx
将所在url地址的docx文件转为PDF,type就是源文件的type,这个例子里就是docx
必须签名才能调用成功,签名见百度签名规则:
https://cloud.baidu.com/doc/APIGW/s/Ljx2m1qc4
支持多种文件格式,具体如下(type可传入如下格式):
| 类型 | 扩展名(type取值) | 备注 |
|---|---|---|
| PDF文件 | ||
| 微软Office文档 | doc, docx, ppt, pptx, xls, xlsx, pot, pps, ppsx, csv | |
| WPS文档 | wps, wpt, dps, dpt, et, ett | |
| 苹果iWork文档 | pages, key, numbers | |
| 开放版式文档 | ofd | |
| 电子刊物 | caj, nh, kdh | |
| 电子书 | epub, chm, mobi, azw, azw3, fb2, cbr, cbz, djvu | |
| Markdown | md | |
| SVG | svg | |
| CAD文档 | dwg, dxf, dwt, dws, dwf, dwfx, dxb, dgn, plt, cf2, cgm | |
| 3D模型 | obj, 3ds, stl, gltf, glb, fbx, dae, ifc, step, stp, iges, igs, fcstd, brep, ply | 静态预览(平面示意图,按 6 个视角展示:等轴测 / 前 / 右 / 顶 / 后 / 左,便于快速查看模型外观;非可旋转的交互式 3D) |
| Figma和Sketch文档 | fig, sketch | |
| 网页文件 | html, htm, mht, eml | |
| 图片文件 | 几乎所有格式例如png, jpg, jpeg, gif, tif, tiff, bmp, webp, ai等 | type可以统一传img,代表一切图片 |
| 文本文件 | txt, rtf, java, js, c, cpp, jsp, css, xml, properties, log, | type可以统一传txt,代表一切文本 |
| 网址网页 | url | 网址,例如:https://www.duhuitech.com |
返回数据结构:
| 名称 | 含义 | 类型及范围 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| code | number | 是 | 10000:请求成功 | |
| msg | string | 是 | ||
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 含义 | 类型及范围 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| token | string | 是 | 用于query接口 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
多张图片转换POST
将多张图片转换为pdf,url传入多张图片的地址,传入非图片格式无效
Header中的Content-Type传入application/json
POST Body传入JSON,格式如下:
请求参数BODY:
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| url | string数组 | 要转换的图片URL数组,支持http(s),ftp开头 | 是 |
| type | string | 固定传img | 是 |
| linearization | int | 是否需要快速web显示,默认0否,1是 | 否 |
| compress | int | 是否压缩,默认0不压缩,压缩分3档:1,2,3,1的压缩率最低,3最高 | 否 |
| ocr | int | 如果是图片文件,是否识别图中文字并且在PDF中可选可搜索文字,默认0否,1是 | 否 |
| deskew | int | 如果是图片文件,是否将斜的文字矫正,默认0否,1是 | 否 |
| clean | int | 如果是图片文件,是否清除图像背景只显示文字,默认0否,1是 | 否 |
| grayimage | int | 如果是图片文件,是否把图片变为灰度图,默认0否,1是 | 否 |
| userpassword | string | 生成PDF文件的User Password,默认无 | 否 |
| ownerpassword | string | 生成PDF文件的Owner Password,默认无 | 否 |
| pdfrestriction | string | 有密码时,生成PDF文件的权限,默认无权限。格式3位,比如010,第一位代表能否打印,第二位代表能否拷贝内容,第三位代表能否编辑 | 否 |
| watermark | string | 添加水印,字符个数最大10个 | 否 |
| pdffilename | string | 生成的PDF文件的文件名,默认随机 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,详细见 回调URL | 否 |
请求示例:
https://pdfconvert.api.bdymkt.com/v1/convert
传入的Body为JSON格式,如下:
{ "url": [ "http://xxx/xxx1.png","http://xxx/xxx2.png" ], "type": "png" }
必须签名才能调用成功,签名见百度签名规则:
https://cloud.baidu.com/doc/APIGW/s/Ljx2m1qc4
例如要把多张图片OCR,变为文字可选的PDF,并且将斜的文字矫正,将图片背景去除,那么JSON就是:
{ "url": [ "http://xxx/xxx1.png","http://xxx/xxx2.png" ], "type": "img", "ocr": 1, "deskew": 1, "clean": 1 }
支持几乎所有图片格式
返回数据结构:
| 名称 | 含义 | 类型及范围 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| code | number | 是 | 10000:请求成功 | |
| msg | string | 是 | ||
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 含义 | 类型及范围 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| token | string | 是 | 用于query接口 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
文件操作POST
支持以下操作:
| 类型 | 操作 |
|---|---|
| 文件处理 | 文件合并、文件拆分、转为图片PDF、文件修复、文件扁平化、文件线性化、PDF压缩、PDF净化、PDF灰度化 |
| 内容叠加与排版 | 图片签名、文件加水印、文件去水印、PDF前景叠加、PDF背景叠加、页眉页脚、页面加页码、PDF多页拼版 / n-up、PDF小册子排版 |
| 页面处理 | 页面删除、页面插入、页面提取、页面重排、页面倒序、页面复制、空白页插入、自动删除空白页、页面旋转、PDF裁边、PDF页数查询、PDF页面信息 |
| 内容提取与结构 | 提取图片、PDF文本提取、PDF元数据读取/修改、PDF目录导出、PDF目录导入 |
| 安全与权限 | 文件加密、文件解密、文件是否加密 |
POST Body传入JSON,Header中的Content-Type传入application/json
通过指定action,对PDF文件进行不同的操作,详细如下:
文件处理
- 文件合并:
专属参数:无。
示例:
{"action":"merge","url":["https://xxx/xxx.pdf", "https://xxx/xxx.pdf"]}
会合并为一个PDF文件。url数组需传2个以上PDF地址。
- 文件拆分:
支持的专属参数:splitcount(按固定页数拆分)、pageranges(按多个页段拆分,使用竖线分隔;和 splitcount 同时传时优先按 splitcount)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| splitcount | number | 按固定页数拆分;和 pageranges 同时传时优先按本参数处理 |
条件必传 |
| pageranges | string | 按多个页段拆分,使用竖线分隔,如 `1-3 | 4-10 |
示例:
{"action":"split","url":["https://xxx/xxx.pdf"],"splitcount":2}
会把PDF拆分为多个PDF,每个PDF是2页。
{"action":"split","url":["https://xxx/xxx.pdf"],"pageranges":"1-3|4-10|11-12"}
会按 pageranges 指定的页段拆分为多个PDF,依次输出为1.pdf、2.pdf、3.pdf。
pdffilename 不支持;拆分结果文件会按 1.pdf、2.pdf、3.pdf 这类顺序命名。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.pdfurls | string数组 | 拆分后 PDF 地址数组,按输出顺序返回 |
| result.count | number | 拆分后 PDF 数量 |
返回结果示例:
{"result":{"status":"done","count":3,"pdfurls":["https://file.duhuitech.com/o/xxx/1.pdf","https://file.duhuitech.com/o/xxx/2.pdf","https://file.duhuitech.com/o/xxx/3.pdf"]}}
- 转为图片PDF:
支持的专属参数:compress(可选,默认0不压缩)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| compress | number | 压缩等级;可选,默认 0 不压缩 |
否 |
示例:
{"action":"imagepdf","url":["https://xxx/xxx.pdf"],"compress":2}
会把PDF每一页转成图片后再重新生成一个图片型PDF。
- 文件修复:
专属参数:无。
示例:
{"action":"repairpdf","url":["https://xxx/xxx.pdf"]}
会尝试修复PDF结构问题,并输出修复后的PDF。
- 文件扁平化:
专属参数:无。
示例:
{"action":"flatten","url":["https://xxx/xxx.pdf"]}
会把PDF中的批注等可交互内容扁平化到页面内容里。
- 文件线性化:
专属参数:无。
示例:
{"action":"linearize","url":["https://xxx/xxx.pdf"]}
会把PDF做快速网页预览优化。
- PDF压缩:
支持的专属参数:compress(必传,支持1、2、3,也支持直接传目标图片分辨率)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| compress | number | 压缩等级;支持 1、2、3,也支持直接传目标图片分辨率 |
是 |
示例:
{"action":"compresspdf","url":["https://xxx/xxx.pdf"],"compress":2}
压缩PDF;如果压缩结果不比原文件更小,会保留较小版本输出。
- PDF净化:
专属参数:无。
示例:
{"action":"pdfsanitize","url":["https://xxx/xxx.pdf"]}
会重写PDF结构并清空常见元数据字段,输出净化后的PDF。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.pdfurl | string | 净化后 PDF 地址 |
| result.count | number | 净化后 PDF 总页数 |
| result.data | object | 净化后的元数据对象;字段结构与 pdfmeta 读取返回的 result.data 一致 |
返回结果示例:
{"result":{"status":"done","count":12,"pdfurl":"https://file.duhuitech.com/o/xxx/sanitize.pdf","data":{}}}
- PDF灰度化:
专属参数:无。
示例:
{"action":"grayscale","url":["https://xxx/xxx.pdf"]}
会把PDF转换为灰度版,并输出新的PDF。
内容叠加与排版
- 图片签名:
支持的专属参数:pageindex(签名页码)、stampurl(签名图片地址)、stamprect(签名位置和大小,格式 x,y,width,height)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindex | number | 签名页码,示例为第 1 页 |
是 |
| stampurl | string | 签名图片 URL | 是 |
| stamprect | string | 签名位置和大小,格式 x,y,width,height,单位像素 |
是 |
示例:
{"action":"stampsignature","url":["https://xxx/xxx.pdf"],"pageindex":1,"stampurl":"http://xxx/xxx.png","stamprect":"10,10,100,50"}
会把PDF的第一页加上图片签名,签名位置在x=10,y=10,宽度=100,高度=50,单位像素。
- 文件加水印:
支持的专属参数:watermark、watermarkstyle、watermarkfontsize、watermarkfontcolor、watermarkfontalpha。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| watermark | string | 水印文字内容 | 是 |
| watermarkstyle | number | 水印样式编号 | 按需 |
| watermarkfontsize | number | 水印字体大小 | 按需 |
| watermarkfontcolor | string | 水印字体颜色,格式如 #000000 |
按需 |
| watermarkfontalpha | number | 水印透明度 | 按需 |
示例:
{"action":"watermark","url":["https://xxx/xxx.pdf"],"watermark":"CONFIDENTIAL","watermarkstyle":1,"watermarkfontsize":24,"watermarkfontcolor":"#000000","watermarkfontalpha":20}
会给PDF每一页添加文字水印。
- 文件去水印:
专属参数:无。
示例:
{"action":"removewatermark","url":["https://xxx/xxx.pdf"]}
会尝试移除PDF中的水印内容,并输出新的PDF。
- PDF前景叠加:
支持的专属参数:data.repeat(可选,控制是否把第 2 个 PDF 按页序循环铺到所有页面)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.repeat | number | 可选;传 1 时把第 2 个 PDF 按页序循环铺到所有页面;不传时默认只按第 2 个 PDF 的实际页数逐页叠加 |
否 |
示例:
{"action":"overlaypdf","url":["https://xxx/base.pdf","https://xxx/overlay.pdf"],"data":{"repeat":1}}
行为说明:不传 data.repeat 时,默认只会按第 2 个 PDF 的实际页数逐页做前景叠加,超出的底稿页不再叠加;传 1 时会按页序循环铺到所有页面。若第 2 个 PDF 只有 1 页,即使不传 data.repeat,系统也会自动把这一页铺到所有页面。
会把第2个PDF作为前景叠加到第1个PDF上,并输出新的PDF。url固定传2个PDF,第1个是底稿PDF。
- PDF背景叠加:
支持的专属参数:data.repeat(可选,控制是否把第 2 个 PDF 按页序循环铺到所有页面)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.repeat | number | 可选;传 1 时把第 2 个 PDF 按页序循环铺到所有页面;不传时默认只按第 2 个 PDF 的实际页数逐页叠加 |
否 |
示例:
{"action":"underlaypdf","url":["https://xxx/base.pdf","https://xxx/background.pdf"],"data":{"repeat":1}}
行为说明:不传 data.repeat 时,默认只会按第 2 个 PDF 的实际页数逐页做背景叠加,超出的底稿页不再叠加;传 1 时会按页序循环铺到所有页面。若第 2 个 PDF 只有 1 页,即使不传 data.repeat,系统也会自动把这一页铺到所有页面。
会把第2个PDF作为背景叠加到第1个PDF下方,并输出新的PDF。url固定传2个PDF,第1个是底稿PDF。
- 页眉页脚:
支持的专属参数:data.header、data.footer、data.fontsize、data.fontcolor、data.fontalpha。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.header | string | 页眉文字;和 data.footer 至少传一个 |
条件必传 |
| data.footer | string | 页脚文字;和 data.header 至少传一个 |
条件必传 |
| data.fontsize | number | 文字大小 | 按需 |
| data.fontcolor | string | 文字颜色,格式如 #333333 |
按需 |
| data.fontalpha | number | 文字透明度 | 按需 |
示例:
{"action":"headerfooter","url":["https://xxx/xxx.pdf"],"data":{"header":"Confidential","footer":"第 {{page}} / {{total}} 页","fontsize":12,"fontcolor":"#333333","fontalpha":80}}
会给每一页叠加文字页眉页脚。
- 页面加页码:
专属参数:无。
示例:
{"action":"pageaddnumber","url":["https://xxx/xxx.pdf"]}
会把PDF每一页右下角添加页码。
- PDF多页拼版 / n-up:
支持的专属参数:data.nup、data.paper、data.landscape、data.frame、data.scale。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.nup | string | 每张输出纸放几页;格式为 列x行,如 2x1、2x2、3x2。2x1 表示一张纸放 2 页,2x2 表示一张纸放 4 页 |
是 |
| data.paper | string | 输出纸张大小。建议值:a3paper、a4paper、a5paper、b4paper、b5paper、letterpaper、legalpaper。默认值为 a4paper |
按需 |
| data.landscape | number | 输出纸张是否横向。1 为横向,省略或 0 为纵向。横向通常更适合 2x1、2x2 这类布局 |
按需 |
| data.frame | number | 是否给每个小页面画边框。1 表示画边框,方便区分每个子页;省略或 0 表示不画 |
按需 |
| data.scale | number | 每个小页面的缩放比例,必须大于 0。常用 0.9 到 1.0;数值越小,页面四周留白越多 |
按需 |
常见纸张说明:
a4paper:最常见的办公打印纸;如果不确定,优先用它。a3paper:比 A4 更大,适合一次拼更多页。a5paper:比 A4 更小,适合输出更小的页面。letterpaper:北美常见纸型。legalpaper:比letterpaper更长,常用于合同、表格。
示例 1:一张纸放 4 页,适合做讲义或速读版
{"action":"pdfnup","url":["https://xxx/xxx.pdf"],"data":{"nup":"2x2","paper":"a4paper","landscape":1,"frame":1,"scale":0.95}}
示例 2:一张纸放 2 页,保留更大的阅读字号
{"action":"pdfnup","url":["https://xxx/xxx.pdf"],"data":{"nup":"2x1","paper":"a4paper"}}
示例 3:放到更大的纸上,减少内容拥挤
{"action":"pdfnup","url":["https://xxx/xxx.pdf"],"data":{"nup":"2x2","paper":"a3paper","scale":0.9}}
这个操作会把多页 PDF 重新排到一张纸上。原文件里的超链接、书签、表单等交互信息可能不会保留。
- PDF小册子排版:
支持的专属参数:data.paper、data.landscape、data.scale、data.signature、data.flipotheredge。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.paper | string | 输出纸张大小。建议值:a3paper、a4paper、a5paper、b4paper、b5paper、letterpaper、legalpaper。默认值为 a4paper |
按需 |
| data.landscape | number | 输出纸张是否横向。1 为横向,省略或 0 为纵向;做双面打印小册子时,横向纸面通常更常见 |
按需 |
| data.scale | number | 页面缩放比例,必须大于 0。常用 0.9 到 1.0;如果担心装订后内容太靠边,可以适当调小 |
按需 |
| data.signature | number | 每个装订单元包含多少页,必须是 4 的倍数,如 4、8、16、32。省略时会把整份文件当成一个完整小册子自动排版 |
按需 |
| data.flipotheredge | number | 是否切换双面打印的翻页边。1 表示开启;如果你试打后发现背面上下颠倒,可以尝试开启这个参数 |
按需 |
signature 可以简单理解为“分几本小册子来装订”:
signature=16:每 16 页做成一个装订单元。signature=32:每 32 页做成一个装订单元。- 不传:整份 PDF 当成一个小册子,系统会自动补空白页到 4 的倍数。
示例 1:整份 PDF 直接做成一本小册子
{"action":"pdfbooklet","url":["https://xxx/xxx.pdf"],"data":{"paper":"a4paper"}}
示例 2:每 16 页做一个装订单元,适合页数较多的文档
{"action":"pdfbooklet","url":["https://xxx/xxx.pdf"],"data":{"paper":"a4paper","signature":16,"flipotheredge":1,"scale":0.95}}
示例 3:如果双面打印背面方向不对,可尝试切换翻页边
{"action":"pdfbooklet","url":["https://xxx/xxx.pdf"],"data":{"paper":"a4paper","signature":16,"flipotheredge":1}}
这个操作会按小册子阅读顺序重新排页,并在需要时自动补空白页,适合双面打印后对折装订。原文件里的超链接、书签、表单等交互信息可能不会保留。
页面处理
- 页面删除:
支持的专属参数:pageindexes(要删除的页码字符串,支持区间组合;按页码集合删除选中页,不按输入顺序重排)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 要删除的页码字符串,支持区间组合;按页码集合删除选中页,不按输入顺序重排 | 是 |
示例:
{"action":"pageremove","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3"}
会把PDF里的第一页、第三页删除;若传入 3,1 或 1,3,4-5,也是按页码集合选中后删除,不会因为输入顺序改变删除逻辑。
- 页面插入:
支持的专属参数:pageindex(插入位置)、pageinserturl(插入的PDF地址)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindex | number | 插入位置;示例为在第 1 页后插入 |
是 |
| pageinserturl | string | 待插入 PDF 的 URL | 是 |
示例:
{"action":"pageinsert","url":["https://xxx/xxx.pdf"],"pageindex":1,"pageinserturl":"https://xxx/xxx.pdf"}
会在PDF的第一页后面插入 pageinserturl 这个地址的PDF。
- 页面提取:
支持的专属参数:pageindexes(要提取的页码字符串,支持区间组合、乱序和列表/区间混合;结果按给定顺序输出)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 要提取的页码字符串,支持区间组合、乱序和列表/区间混合;结果按给定顺序输出 | 是 |
示例:
{"action":"pageextract","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3"}
会把PDF里的第一页、第三页提取出来作为一个PDF文件;也支持如 3,1,2,5-6 这样的页序写法。
- 页面重排:
支持的专属参数:pageindexes(最终页序,支持乱序、范围和列表/区间混合)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 最终页序,支持乱序、范围和列表/区间混合 | 是 |
示例:
{"action":"pageorder","url":["https://xxx/xxx.pdf"],"pageindexes":"3,1,2,5-6"}
会按给定顺序重新生成一个PDF文件。
- 页面倒序:
专属参数:无。
示例:
{"action":"pagereverse","url":["https://xxx/xxx.pdf"]}
会把PDF所有页面整体倒序输出。
- 页面复制:
支持的专属参数:pageindexes(可选;不传则每页复制一遍,传则按原PDF页序在原位复制指定页,支持区间组合)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 可选;不传则每页复制一遍,传则按原PDF页序在原位复制指定页,支持区间组合 | 否 |
示例:
{"action":"pageduplicate","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3,5-6"}
会在原页面后面插入对应页面副本;若传入 3,1,仍按原PDF页序在第1页、第3页后插入副本。
- 空白页插入:
支持的专属参数:pageindex(插入位置,0表示插到第一页前)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindex | number | 插入位置;0 表示插到第一页前 |
是 |
示例:
{"action":"blankpageinsert","url":["https://xxx/xxx.pdf"],"pageindex":2}
会在第2页后插入1个同尺寸空白页。
- 自动删除空白页:
专属参数:无。
示例:
{"action":"removeblankpages","url":["https://xxx/xxx.pdf"]}
会自动识别接近纯白的页面并删除,适合扫描件里的空白隔页清理。
- 页面旋转:
支持的专属参数:pagerotateangle(旋转角度)、pageindexes(可选,按原PDF页序筛选指定页面)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pagerotateangle | number | 旋转角度,如 90 |
是 |
| pageindexes | string | 可选;仅按原PDF页序筛选并旋转指定页面,支持区间组合 | 否 |
示例:
{"action":"pagerotate","url":["https://xxx/xxx.pdf"],"pagerotateangle":90,"pageindexes":"2,4-6"}
会把PDF整本或指定页面按给定角度旋转;若传入 3,1,会旋转第1页和第3页,但不会重排页面。
- PDF裁边:
支持的专属参数:pageindexes、data.left、data.right、data.top、data.bottom。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 需要裁边的页码范围,支持区间组合;按原PDF页序处理选中页 | 按需 |
| data.left | number | 左边裁剪量 | 按需 |
| data.right | number | 右边裁剪量 | 按需 |
| data.top | number | 上边裁剪量 | 按需 |
| data.bottom | number | 下边裁剪量 | 按需 |
示例:
{"action":"pdfcrop","url":["https://xxx/xxx.pdf"],"pageindexes":"2-10","data":{"left":18,"right":18,"top":24,"bottom":24}}
会按统一边距修改选中页面的CropBox,并输出新的pdfurl。pageindexes 仅用于筛选要裁边的页面,不会因为输入顺序而重排页面。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.pdfurl | string | 裁边后 PDF 地址 |
| result.count | number | 裁边后 PDF 总页数 |
| result.data | object | 裁边后整份 PDF 的页面信息;结构与 pageinfo 返回的 result.data 一致 |
返回结果示例:
{"result":{"status":"done","count":12,"pdfurl":"https://file.duhuitech.com/o/xxx/crop.pdf","data":{"uniform":true,"pages":[{"page":1,"width":559.28,"height":805.89,"orientation":"portrait"}]}}}
- PDF页数查询:
专属参数:无。
示例:
{"action":"pagecountinfo","url":["https://xxx/xxx.pdf"]}
会只查询PDF页数。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.count | number | PDF 总页数 |
返回结果示例:
{"result":{"status":"done","count":12}}
- PDF页面信息:
支持的专属参数:pageindexes(可选;不传返回全部页面,传则按原PDF页序返回指定页)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 可选;不传返回全部页面,传则按原PDF页序返回指定页 | 否 |
示例:
{"action":"pageinfo","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3-4"}
会返回每一页的宽高和横竖版信息;若传入 3,1,返回结果仍按第1页、第3页的原PDF页序排列。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.count | number | 返回的页面条数;不传 pageindexes 时等于 PDF 总页数 |
| result.data.uniform | boolean | 返回页面尺寸是否全部一致 |
| result.data.pages | array | 页面信息数组,按原 PDF 页序返回 |
| result.data.pages[].page | number | 页码,从 1 开始 |
| result.data.pages[].width | number | 页面宽度,单位 pt |
| result.data.pages[].height | number | 页面高度,单位 pt |
| result.data.pages[].orientation | string | 页面方向:portrait、landscape 或 square |
返回结果示例:
{"result":{"status":"done","count":3,"data":{"uniform":false,"pages":[{"page":1,"width":595.28,"height":841.89,"orientation":"portrait"},{"page":3,"width":841.89,"height":595.28,"orientation":"landscape"},{"page":4,"width":595.28,"height":595.28,"orientation":"square"}]}}}
内容提取与结构
- 提取图片:
专属参数:无。
示例:
{"action":"extractimg","url":["https://xxx/xxx.pdf"]}
会把PDF里的图片提取出来。
pdffilename 不支持;导出的图片文件会按 1.png、2.png 这类顺序命名。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.imageurls | string数组 | 提取出的图片地址数组,按输出顺序返回 |
| result.count | number | 提取出的图片数量 |
返回结果示例:
{"result":{"status":"done","count":2,"imageurls":["https://file.duhuitech.com/o/xxx/1.png","https://file.duhuitech.com/o/xxx/2.png"]}}
- PDF文本提取:
支持的专属参数:pageindexes、outfilename、data.textwithformat、data.textperpage。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 需要提取文字的页码范围,支持区间组合、乱序和列表/区间混合;会先按给定页序筛页,再提取文字 | 按需 |
| outfilename | string | 输出文件名;默认随机 | 按需 |
| data.textwithformat | number | 是否尽量保留排版信息;1 表示保留 |
按需 |
| data.textperpage | number | 是否按页拆分输出;1 表示每页单独输出并打包 |
按需 |
示例:
{"action":"extracttext","url":["https://xxx/xxx.pdf"],"pageindexes":"1-3","outfilename":"chapter1","data":{"textwithformat":1,"textperpage":1}}
会提取PDF文字内容;默认输出一个txt文件,textperpage 为1时输出按筛选后页序分拆的zip文件。
pdffilename 不适用,请使用 outfilename 控制输出文件名前缀。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.fileurl | string | 提取结果文件地址;可能是 txt,也可能是按页拆分后的 zip |
| result.count | number | 实际提取的页数;不传 pageindexes 时等于 PDF 总页数 |
| result.filesize | number | 输出文件大小 |
返回结果示例:
{"result":{"status":"done","count":3,"filesize":2048,"fileurl":"https://file.duhuitech.com/o/xxx/chapter1.zip"}}
- PDF元数据读取/修改:
支持的专属参数:meta.title、meta.author、meta.subject、meta.keywords、meta.creator、meta.producer。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| meta.title | string | PDF 标题 | 按需 |
| meta.author | string | PDF 作者 | 按需 |
| meta.subject | string | PDF 主题 | 按需 |
| meta.keywords | string | PDF 关键词 | 按需 |
| meta.creator | string | 生成工具 | 按需 |
| meta.producer | string | 生产程序 | 按需 |
示例:
{"action":"pdfmeta","url":["https://xxx/xxx.pdf"],"meta":{"title":"Quarterly Report","author":"Duhui"}}
不传 meta 时会读取当前PDF的常用元数据;传 meta 时会更新对应字段并返回新的pdfurl和更新后的data。
读取模式下 pdffilename 不适用;写入模式下支持 pdffilename。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.data | object | 元数据对象 |
| result.data.title | string | 标题,存在时返回 |
| result.data.author | string | 作者,存在时返回 |
| result.data.subject | string | 主题,存在时返回 |
| result.data.keywords | string | 关键词,存在时返回 |
| result.data.creator | string | 生成工具,存在时返回 |
| result.data.producer | string | 生产程序,存在时返回 |
| result.data.creationdate | string | 创建时间,存在时返回 |
| result.data.moddate | string | 修改时间,存在时返回 |
| result.data.tagged | string | 是否带标签,存在时返回 |
| result.data.encrypted | string | 是否加密,存在时返回 |
返回结果示例(读取):
{"result":{"status":"done","count":12,"data":{"title":"Quarterly Report","author":"Duhui","creator":"Word","producer":"Skia/PDF m123"}}}
更新模式下,返回结果会额外包含 result.pdfurl。
- PDF目录导出:
专属参数:无。
示例:
{"action":"outlineexport","url":["https://xxx/xxx.pdf"]}
会读取PDF目录书签。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.count | number | PDF 总页数 |
| result.data.named_dests | object | 命名目标映射 |
| result.data.outline | array | 目录树数组 |
| result.data.outline[].title | string | 目录标题 |
| result.data.outline[].dest.page_index | number | 目标页索引,从 0 开始 |
| result.data.outline[].dest.dest | array | 目标定位参数,如 ["/Fit"] |
| result.data.outline[].kids | array | 子目录数组;没有子目录时可省略 |
目录节点还可能包含 dest_name、color、flags、count、is_open 等可选字段。
返回结果示例:
{"result":{"status":"done","count":12,"data":{"named_dests":{},"outline":[{"title":"Chapter 1","dest":{"page_index":0,"dest":["/Fit"]},"kids":[{"title":"Section 1.1","dest":{"page_index":1,"dest":["/Fit"]}}]}]}}}
- PDF目录导入:
支持的专属参数:data(目录 JSON 对象,建议先调用 outlineexport 获取后原样传回)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data | JSON对象 | 目录 JSON 对象;建议先调用 outlineexport 获取后原样传回 |
是 |
示例:
{"action":"outlineimport","url":["https://xxx/xxx.pdf"],"data":{"named_dests":{},"outline":[{"title":"Chapter 1","dest":{"page_index":0,"dest":["/Fit"]}}]}}
会把目录JSON写回PDF,并输出新的pdfurl。data 顶层应包含 named_dests 和 outline;其中 page_index 从 0 开始计数。
安全与权限
- 文件加密:
支持的专属参数:userpassword、ownerpassword、pdfrestriction。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| userpassword | string | 用户密码;和 ownerpassword 至少传一个 |
条件必传 |
| ownerpassword | string | 所有者密码;和 userpassword 至少传一个 |
条件必传 |
| pdfrestriction | string | PDF 权限限制编码,如 110 |
按需 |
示例:
{"action":"encrypt","url":["https://xxx/xxx.pdf"],"userpassword":"YOUR_PASSWORD","ownerpassword":"YOUR_PASSWORD","pdfrestriction":"110"}
userpassword 和 ownerpassword 至少传一个。该操作会给PDF加密码和权限限制。
- 文件解密(文件加密转换接口中已有):
支持的专属参数:password(解密密码,可以为空)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| password | string | 解密密码;如果原文件无密码可传空字符串 | 按需 |
示例:
{"action":"decrypt","url":["https://xxx/xxx.pdf"],"password":""}
会把PDF解密。
- 文件是否加密:
专属参数:无。
示例:
{"action":"checkencrypt","url":["https://xxx/xxx.pdf"]}
会检查PDF是否加密。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.data.encrypted | boolean | true 表示已加密,false 表示未加密 |
返回结果示例:
{"result":{"status":"done","data":{"encrypted":true}}}
通用请求参数BODY(JSON):
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| action | string | 操作类型,取值见上方各 action 小节 | 是 |
| url | string数组 | 待处理的PDF URL数组,支持http(s)、ftp;每个action对url数量和含义的要求见对应 action 小节 | 是 |
| pdffilename | string | 生成输出文件的文件名,默认随机;是否支持及具体含义见对应 action 小节 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,详细见 回调URL | 否 |
其余参数均为 action 专属参数,见对应 action 小节。
请求示例:
https://pdfconvert.api.bdymkt.com/v1/pdfaction
传入的Body为JSON格式,见上方详细操作。
必须签名才能调用成功,签名见百度签名规则:
https://cloud.baidu.com/doc/APIGW/s/Ljx2m1qc4
返回数据结构:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| token | string | 是 | 用于查询结果接口 |
异步任务完成后的通用说明:
- 所有 action 都支持
callbackurl。 - 大多数生成 PDF 的 action 都支持
pdffilename;任务完成后,可在 查询结果 或回调结果里看到result.pdfurl、result.count,通常还会返回result.filesize。 - 特殊 action 的最终返回字段见对应 action 小节,例如:
split返回result.pdfurls,extractimg返回result.imageurls,extracttext返回result.fileurl,pagecountinfo、pageinfo、outlineexport、checkencrypt等返回结构化数据。
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
查询 QUERY
请求参数:
| 参数 | 类型及范围 | 备注 | 是否必须发送 |
|---|---|---|---|
| token | string | 是 |
请求示例:
https://api.duhuitech.com/q?token=YOUR_TOKEN
无需签名,无调用次数限制
由于转换需要时间,文件越大页数越多,转换越久,故需要轮询查询接口来获得结果。查询频率可以是1s一次,也可以更长一些。查询后先看status,如果是Done或Failed,则转换结束,停止轮询。如果是Doing或Pending,则继续轮询。
返回数据结构:
| 名称 | 含义 | 类型及范围 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| code | number | 是 | 10000:请求成功 | |
| msg | string | 是 | ||
| token | string | 是 | 请求的token | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 含义 | 类型及范围 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| status | 状态 | string | 是 | Pending:还未开始 Doing:正在转换 Done:转换成功 Failed:转换失败 |
| progress | 进度 | number(0.00 - 1.00) | 否(status为Doing时返回) | 比如0.88表示88% |
| pdfurl | pdf文件地址 | string | 否(status为Done时返回) | 转换出来的PDF地址,http和https都支持 |
| count | 总页数 | integer | 否(status为Done时返回) | PDF页面总数 |
| reason | 失败原因 | string | 否(status为Failed时可能返回) | 转换失败的原因 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"token":"YOUR_CREDENTIAL",
"result":
{
"progress":0.02,
"status":"Doing"
}
}
{
"code":10000,
"msg":"",
"token":"YOUR_CREDENTIAL",
"result":
{
"status":"Done",
"pdfurl":"https://file.duhuitech.com/o/xxx/xxx.pdf",
"count":10
}
}
返回示例(失败状态):
{
"code":40000,
"msg":"No such token"
}
注意:
- 上传文件大小不能超过1500M。
- 最大转换时长:1小时,超过时间未完成则自动失败。
- 转换完成后,下载链接有效时间:1小时。
回调URL:
用途:客户可以自行部署服务器,系统转换结束后会调用客户提供的回调URL,直接发送转换结果,从而无需再轮询Query。
当设置了回调URL,转换结束后(无论成功失败),系统都会尝试调用该URL,具体如下:
以POST方式调用该URL,Header头中Content-Type: application/json
Body为JSON格式,内容和Query的结果相同,例如:
{"code":10000,"msg":"","token":"YOUR_CREDENTIAL","result":{"status":"Done","pdfurl":"https://file.duhuitech.com/o/xxx/xxx.pdf","count":10}}
服务端收到该POST后需在10秒内返回HTTP STATUS CODE 200,视为调用成功,否则系统认为回调失败,会再次尝试。规则如下:
系统共计最多会调用3次回调URL,如果第一次失败,则等待3秒后尝试第二次,如果第二次失败,则等待5秒后尝试第三次,如果第三次失败,则不再尝试。
回调URL超时时间10秒。
关于下载转换后的文件需支持302跳转
接口返回的下载地址(如 fileurl / fileurls)会经 HTTP 302 跳转到实际文件。浏览器会自动跟随。
以下方式默认会跟随跳转,一般无需额外配置:
wget、Python requests / urllib、Node.js axios / got / fetch、Java OkHttp / HttpURLConnection、Go net/http、C# HttpClient、PHP file_get_contents、Objective-C / Swift NSURLSession / URLSession(含 Alamofire)
少数默认不跟随,需手动打开:
curl:加-L,如curl -L -o out.bin "下载地址"- Java
java.net.http.HttpClient:设置.followRedirects(HttpClient.Redirect.NORMAL) - PHP
curl扩展:设置CURLOPT_FOLLOWLOCATION => true
若只拿到 302 响应、本地没有文件内容,多半是未跟随跳转,按上面说明打开对应选项即可。
错误码表:
| JSON里返回的code | 错误信息 |
|---|---|
| 40000 | 通用错误 |
| 40001 | 参数错误 |
| 40002 | 参数不符合规范 |
附录:百度签名方式
参考链接:
https://cloud.baidu.com/doc/APIGW/s/Ljx2m1qc4
在调用API商品时,首先您需要了解采用哪种API认证方式,云市场API商品的认证方式主要有以下两种方式。两种方式可同时使用,您可以根据不同情况来选择。
- 简单身份认证(AppCode)
- 签名认证
简单身份认证(AppCode)
简单认证(AppCode)调用API,将AppCode放在Header中
在请求Header中添加一个X-Bce-Signature参数。
示例:
X-Bce-Signature: AppCode/YOUR_APPCODE
签名认证
比较复杂,推荐用百度自己的SDK来调用,参考链接:https://cloud.baidu.com/doc/Reference/s/njwvz1yfu
概述
3种转换方式
- 单一文档转为PDF,文档是一个下载链接,用HTTP GET方式,见:文档转换GET
- 单一文档转为PDF,文档POST到服务器,用HTTP POST方式,见:文档转换POST
- 多个图片转为PDF,文档是多个下载链接,用HTTP POST方式,见:多张图片转换POST
基本用法
由于转换需要时间,文件越大页数越多,转换越久,故系统采用异步的方式获得转换结果。调用转换接口后会获得token,随后有2种方式查询转换结果:
API调用需要签名,详细见华为官方签名:
https://support.huaweicloud.com/usermanual-apig/apig-ug-0011.html
文档转换GET
将文档下载地址url转换为PDF,type是源文档的type,比如要把docx转为pdf,type就是docx
请求参数:
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| url | string | 文件url,支持http(s),ftp开头,需要URL Encoding | 是 |
| type | string | 要转换的文档扩展名 | 是 |
| linearization | int | 是否需要快速web显示,默认0否,1是 | 否 |
| compress | int | 是否压缩,默认0不压缩,压缩分3档:1,2,3,1的压缩率最低,3最高 | 否 |
| excelislandscape | int | 如果是Excel文件,是否横屏,默认0否(竖屏),1是 | 否 |
| exceliscenter | int | 如果是Excel文件,是否居中,默认0否,1横竖居中,2仅横向居中,3仅纵向居中 | 否 |
| excelmargin | int | 如果是Excel文件,四边的边距,默认10px,单位是像素 | 否 |
| excelsheetindex | int | 如果是Excel文件,指定转换的Sheet索引,默认0:全部,第一个sheet就是1,以此类推 | 否 |
| excelnotshowgridlines | int | 如果是Excel文件,不显示网格线,默认0显示,1不显示 | 否 |
| exceluseprintarea | int | 如果是Excel文件,是否使用打印区域,默认0不使用,1使用 | 否 |
| excelpagefitmode | int | 如果是 Excel 文件,页面缩放方式:0 默认(不使用打印区域时将所有列调整为一页宽;使用打印区域时沿用源文件缩放);1 将所有列调整为一页宽;2 将每张工作表调整为一页;3 将所有行调整为一页高;4 无缩放,按 100% 比例输出。设置为 1、2、3、4 时,与 exceluseprintarea=1 同时使用仍会保留打印区域 | 否 |
| wordshowmarkup | int | 如果是Word文件,是否显示审阅标记,默认0不显示,1显示 | 否 |
| imageocr | int | 如果是图片文件,是否识别图中文字并且在PDF中可选可搜索文字,默认0否,1是 | 否 |
| imagedeskew | int | 如果是图片文件,是否将斜的文字矫正,默认0否,1是 | 否 |
| imageclean | int | 如果是图片文件,是否清除图像背景只显示文字,默认0否,1是 | 否 |
| userpassword | string | 生成PDF文件的User Password,默认无 | 否 |
| ownerpassword | string | 生成PDF文件的Owner Password,默认无 | 否 |
| pdfrestriction | string | 有密码时,生成PDF文件的权限,默认无权限。格式3位,比如010,第一位代表能否打印,第二位代表能否拷贝内容,第三位代表能否编辑 | 否 |
| watermark | string | 添加水印,字符个数最大10个 | 否 |
| pdffilename | string | 生成的PDF文件的文件名,默认随机 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,需要URL Encoding,详细见 回调URL | 否 |
请求示例:
http://all2pdf.apistore.huaweicloud.com/v1/convert?url=https%3a%2f%2fxxx%2fxxx.docx&type=docx
将所在url地址的docx文件转为PDF,type就是源文件的type,这个例子里就是docx
必须签名才能调用成功,签名见华为签名规则:
https://support.huaweicloud.com/usermanual-apig/apig-ug-0011.html
支持多种文件格式,具体如下(type可传入如下格式):
| 类型 | 扩展名(type取值) | 备注 |
|---|---|---|
| PDF文件 | ||
| 微软Office文档 | doc, docx, ppt, pptx, xls, xlsx, pot, pps, ppsx, csv | |
| WPS文档 | wps, wpt, dps, dpt, et, ett | |
| 苹果iWork文档 | pages, key, numbers | |
| 开放版式文档 | ofd | |
| 电子刊物 | caj, nh, kdh | |
| 电子书 | epub, chm, mobi, azw, azw3, fb2, cbr, cbz, djvu | |
| Markdown | md | |
| SVG | svg | |
| CAD文档 | dwg, dxf, dwt, dws, dwf, dwfx, dxb, dgn, plt, cf2, cgm | |
| 3D模型 | obj, 3ds, stl, gltf, glb, fbx, dae, ifc, step, stp, iges, igs, fcstd, brep, ply | 静态预览(平面示意图,按 6 个视角展示:等轴测 / 前 / 右 / 顶 / 后 / 左,便于快速查看模型外观;非可旋转的交互式 3D) |
| Figma和Sketch文档 | fig, sketch | |
| 网页文件 | html, htm, mht, eml | |
| 图片文件 | 几乎所有格式例如png, jpg, jpeg, gif, tif, tiff, bmp, webp, ai等 | type可以统一传img,代表一切图片 |
| 文本文件 | txt, rtf, java, js, c, cpp, jsp, css, xml, properties, log, | type可以统一传txt,代表一切文本 |
| 网址网页 | url | 网址,例如:https://www.duhuitech.com |
返回数据结构:
| 名称 | 含义 | 类型及范围 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| code | number | 是 | 10000:请求成功 | |
| msg | string | 是 | ||
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 含义 | 类型及范围 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| token | string | 是 | 用于query接口 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
文档转换POST
直接将单个文档POST到服务器,大小限制12M
请求参数:
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| file | file | 要转换的文档,Content-Type使用multipart/form-data,最大12M | 是 |
| type | string | 要转换的文档扩展名 | 是 |
| linearization | int | 是否需要快速web显示,默认0否,1是 | 否 |
| compress | int | 是否压缩,默认0不压缩,压缩分3档:1,2,3,1的压缩率最低,3最高 | 否 |
| excelislandscape | int | 如果是Excel文件,是否横屏,默认0否(竖屏),1是 | 否 |
| exceliscenter | int | 如果是Excel文件,是否居中,默认0否,1横竖居中,2仅横向居中,3仅纵向居中 | 否 |
| excelmargin | int | 如果是Excel文件,四边的边距,默认10px,单位是像素 | 否 |
| excelsheetindex | int | 如果是Excel文件,指定转换的Sheet索引,默认0:全部,第一个sheet就是1,以此类推 | 否 |
| excelnotshowgridlines | int | 如果是Excel文件,不显示网格线,默认0显示,1不显示 | 否 |
| exceluseprintarea | int | 如果是Excel文件,是否使用打印区域,默认0不使用,1使用 | 否 |
| excelpagefitmode | int | 如果是 Excel 文件,页面缩放方式:0 默认(不使用打印区域时将所有列调整为一页宽;使用打印区域时沿用源文件缩放);1 将所有列调整为一页宽;2 将每张工作表调整为一页;3 将所有行调整为一页高;4 无缩放,按 100% 比例输出。设置为 1、2、3、4 时,与 exceluseprintarea=1 同时使用仍会保留打印区域 | 否 |
| wordshowmarkup | int | 如果是Word文件,是否显示审阅标记,默认0不显示,1显示 | 否 |
| imageocr | int | 如果是图片文件,是否识别图中文字并且在PDF中可选可搜索文字,默认0否,1是 | 否 |
| imagedeskew | int | 如果是图片文件,是否将斜的文字矫正,默认0否,1是 | 否 |
| imageclean | int | 如果是图片文件,是否清除图像背景只显示文字,默认0否,1是 | 否 |
| userpassword | string | 生成PDF文件的User Password,默认无 | 否 |
| ownerpassword | string | 生成PDF文件的Owner Password,默认无 | 否 |
| pdfrestriction | string | 有密码时,生成PDF文件的权限,默认无权限。格式3位,比如010,第一位代表能否打印,第二位代表能否拷贝内容,第三位代表能否编辑 | 否 |
| watermark | string | 添加水印,字符个数最大10个 | 否 |
| pdffilename | string | 生成的PDF文件的文件名,默认随机 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,详细见 回调URL | 否 |
请求示例:
http://all2pdf.apistore.huaweicloud.com/v1/convert_post
Header中的Content-Type必须是multipart/form-data
必须签名才能调用成功,签名见华为签名规则:
https://support.huaweicloud.com/usermanual-apig/apig-ug-0011.html
支持多种文件格式,具体如下(type可传入如下格式):
| 类型 | 扩展名(type取值) | 备注 |
|---|---|---|
| PDF文件 | ||
| 微软Office文档 | doc, docx, ppt, pptx, xls, xlsx, pot, pps, ppsx, csv | |
| WPS文档 | wps, wpt, dps, dpt, et, ett | |
| 苹果iWork文档 | pages, key, numbers | |
| 开放版式文档 | ofd | |
| 电子刊物 | caj, nh, kdh | |
| 电子书 | epub, chm, mobi, azw, azw3, fb2, cbr, cbz, djvu | |
| Markdown | md | |
| SVG | svg | |
| CAD文档 | dwg, dxf, dwt, dws, dwf, dwfx, dxb, dgn, plt, cf2, cgm | |
| 3D模型 | obj, 3ds, stl, gltf, glb, fbx, dae, ifc, step, stp, iges, igs, fcstd, brep, ply | 静态预览(平面示意图,按 6 个视角展示:等轴测 / 前 / 右 / 顶 / 后 / 左,便于快速查看模型外观;非可旋转的交互式 3D) |
| Figma和Sketch文档 | fig, sketch | |
| 网页文件 | html, htm, mht, eml | |
| 图片文件 | 几乎所有格式例如png, jpg, jpeg, gif, tif, tiff, bmp, webp, ai等 | type可以统一传img,代表一切图片 |
| 文本文件 | txt, rtf, java, js, c, cpp, jsp, css, xml, properties, log, | type可以统一传txt,代表一切文本 |
返回数据结构:
| 名称 | 含义 | 类型及范围 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| code | number | 是 | 10000:请求成功 | |
| msg | string | 是 | ||
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 含义 | 类型及范围 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| token | string | 是 | 用于query接口 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
多张图片转换POST
将多张图片转换为pdf,url传入多张图片的地址,传入非图片格式无效
Header中的Content-Type传入application/json
POST Body传入JSON,格式如下:
请求参数BODY:
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| url | string数组 | 要转换的图片URL数组,支持http(s),ftp开头 | 是 |
| type | string | 固定传img | 是 |
| linearization | int | 是否需要快速web显示,默认0否,1是 | 否 |
| compress | int | 是否压缩,默认0不压缩,压缩分3档:1,2,3,1的压缩率最低,3最高 | 否 |
| ocr | int | 如果是图片文件,是否识别图中文字并且在PDF中可选可搜索文字,默认0否,1是 | 否 |
| deskew | int | 如果是图片文件,是否将斜的文字矫正,默认0否,1是 | 否 |
| clean | int | 如果是图片文件,是否清除图像背景只显示文字,默认0否,1是 | 否 |
| userpassword | string | 生成PDF文件的User Password,默认无 | 否 |
| ownerpassword | string | 生成PDF文件的Owner Password,默认无 | 否 |
| pdfrestriction | string | 有密码时,生成PDF文件的权限,默认无权限。格式3位,比如010,第一位代表能否打印,第二位代表能否拷贝内容,第三位代表能否编辑 | 否 |
| watermark | string | 添加水印,字符个数最大10个 | 否 |
| pdffilename | string | 生成的PDF文件的文件名,默认随机 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,详细见 回调URL | 否 |
请求示例:
http://all2pdf.apistore.huaweicloud.com/v1/convert
传入的Body为JSON格式,如下:
{ "url": [ "http://xxx/xxx1.png","http://xxx/xxx2.png" ], "type": "png" }
必须签名才能调用成功,签名见华为签名规则:
https://support.huaweicloud.com/usermanual-apig/apig-ug-0011.html
例如要把多张图片OCR,变为文字可选的PDF,并且将斜的文字矫正,将图片背景去除,那么JSON就是:
{ "url": [ "http://xxx/xxx1.png","http://xxx/xxx2.png" ], "type": "img", "ocr": 1, "deskew": 1, "clean": 1 }
支持几乎所有图片格式
返回数据结构:
| 名称 | 含义 | 类型及范围 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| code | number | 是 | 10000:请求成功 | |
| msg | string | 是 | ||
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 含义 | 类型及范围 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| token | string | 是 | 用于query接口 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
文件操作POST
支持以下操作:
| 类型 | 操作 |
|---|---|
| 文件处理 | 文件合并、文件拆分、转为图片PDF、文件修复、文件扁平化、文件线性化、PDF压缩、PDF净化、PDF灰度化 |
| 内容叠加与排版 | 图片签名、文件加水印、文件去水印、PDF前景叠加、PDF背景叠加、页眉页脚、页面加页码、PDF多页拼版 / n-up、PDF小册子排版 |
| 页面处理 | 页面删除、页面插入、页面提取、页面重排、页面倒序、页面复制、空白页插入、自动删除空白页、页面旋转、PDF裁边、PDF页数查询、PDF页面信息 |
| 内容提取与结构 | 提取图片、PDF文本提取、PDF元数据读取/修改、PDF目录导出、PDF目录导入 |
| 安全与权限 | 文件加密、文件解密、文件是否加密 |
POST Body传入JSON,Header中的Content-Type传入application/json
通过指定action,对PDF文件进行不同的操作,详细如下:
文件处理
- 文件合并:
专属参数:无。
示例:
{"action":"merge","url":["https://xxx/xxx.pdf", "https://xxx/xxx.pdf"]}
会合并为一个PDF文件。url数组需传2个以上PDF地址。
- 文件拆分:
支持的专属参数:splitcount(按固定页数拆分)、pageranges(按多个页段拆分,使用竖线分隔;和 splitcount 同时传时优先按 splitcount)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| splitcount | number | 按固定页数拆分;和 pageranges 同时传时优先按本参数处理 |
条件必传 |
| pageranges | string | 按多个页段拆分,使用竖线分隔,如 `1-3 | 4-10 |
示例:
{"action":"split","url":["https://xxx/xxx.pdf"],"splitcount":2}
会把PDF拆分为多个PDF,每个PDF是2页。
{"action":"split","url":["https://xxx/xxx.pdf"],"pageranges":"1-3|4-10|11-12"}
会按 pageranges 指定的页段拆分为多个PDF,依次输出为1.pdf、2.pdf、3.pdf。
pdffilename 不支持;拆分结果文件会按 1.pdf、2.pdf、3.pdf 这类顺序命名。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.pdfurls | string数组 | 拆分后 PDF 地址数组,按输出顺序返回 |
| result.count | number | 拆分后 PDF 数量 |
返回结果示例:
{"result":{"status":"done","count":3,"pdfurls":["https://file.duhuitech.com/o/xxx/1.pdf","https://file.duhuitech.com/o/xxx/2.pdf","https://file.duhuitech.com/o/xxx/3.pdf"]}}
- 转为图片PDF:
支持的专属参数:compress(可选,默认0不压缩)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| compress | number | 压缩等级;可选,默认 0 不压缩 |
否 |
示例:
{"action":"imagepdf","url":["https://xxx/xxx.pdf"],"compress":2}
会把PDF每一页转成图片后再重新生成一个图片型PDF。
- 文件修复:
专属参数:无。
示例:
{"action":"repairpdf","url":["https://xxx/xxx.pdf"]}
会尝试修复PDF结构问题,并输出修复后的PDF。
- 文件扁平化:
专属参数:无。
示例:
{"action":"flatten","url":["https://xxx/xxx.pdf"]}
会把PDF中的批注等可交互内容扁平化到页面内容里。
- 文件线性化:
专属参数:无。
示例:
{"action":"linearize","url":["https://xxx/xxx.pdf"]}
会把PDF做快速网页预览优化。
- PDF压缩:
支持的专属参数:compress(必传,支持1、2、3,也支持直接传目标图片分辨率)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| compress | number | 压缩等级;支持 1、2、3,也支持直接传目标图片分辨率 |
是 |
示例:
{"action":"compresspdf","url":["https://xxx/xxx.pdf"],"compress":2}
压缩PDF;如果压缩结果不比原文件更小,会保留较小版本输出。
- PDF净化:
专属参数:无。
示例:
{"action":"pdfsanitize","url":["https://xxx/xxx.pdf"]}
会重写PDF结构并清空常见元数据字段,输出净化后的PDF。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.pdfurl | string | 净化后 PDF 地址 |
| result.count | number | 净化后 PDF 总页数 |
| result.data | object | 净化后的元数据对象;字段结构与 pdfmeta 读取返回的 result.data 一致 |
返回结果示例:
{"result":{"status":"done","count":12,"pdfurl":"https://file.duhuitech.com/o/xxx/sanitize.pdf","data":{}}}
- PDF灰度化:
专属参数:无。
示例:
{"action":"grayscale","url":["https://xxx/xxx.pdf"]}
会把PDF转换为灰度版,并输出新的PDF。
内容叠加与排版
- 图片签名:
支持的专属参数:pageindex(签名页码)、stampurl(签名图片地址)、stamprect(签名位置和大小,格式 x,y,width,height)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindex | number | 签名页码,示例为第 1 页 |
是 |
| stampurl | string | 签名图片 URL | 是 |
| stamprect | string | 签名位置和大小,格式 x,y,width,height,单位像素 |
是 |
示例:
{"action":"stampsignature","url":["https://xxx/xxx.pdf"],"pageindex":1,"stampurl":"http://xxx/xxx.png","stamprect":"10,10,100,50"}
会把PDF的第一页加上图片签名,签名位置在x=10,y=10,宽度=100,高度=50,单位像素。
- 文件加水印:
支持的专属参数:watermark、watermarkstyle、watermarkfontsize、watermarkfontcolor、watermarkfontalpha。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| watermark | string | 水印文字内容 | 是 |
| watermarkstyle | number | 水印样式编号 | 按需 |
| watermarkfontsize | number | 水印字体大小 | 按需 |
| watermarkfontcolor | string | 水印字体颜色,格式如 #000000 |
按需 |
| watermarkfontalpha | number | 水印透明度 | 按需 |
示例:
{"action":"watermark","url":["https://xxx/xxx.pdf"],"watermark":"CONFIDENTIAL","watermarkstyle":1,"watermarkfontsize":24,"watermarkfontcolor":"#000000","watermarkfontalpha":20}
会给PDF每一页添加文字水印。
- 文件去水印:
专属参数:无。
示例:
{"action":"removewatermark","url":["https://xxx/xxx.pdf"]}
会尝试移除PDF中的水印内容,并输出新的PDF。
- PDF前景叠加:
支持的专属参数:data.repeat(可选,控制是否把第 2 个 PDF 按页序循环铺到所有页面)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.repeat | number | 可选;传 1 时把第 2 个 PDF 按页序循环铺到所有页面;不传时默认只按第 2 个 PDF 的实际页数逐页叠加 |
否 |
示例:
{"action":"overlaypdf","url":["https://xxx/base.pdf","https://xxx/overlay.pdf"],"data":{"repeat":1}}
行为说明:不传 data.repeat 时,默认只会按第 2 个 PDF 的实际页数逐页做前景叠加,超出的底稿页不再叠加;传 1 时会按页序循环铺到所有页面。若第 2 个 PDF 只有 1 页,即使不传 data.repeat,系统也会自动把这一页铺到所有页面。
会把第2个PDF作为前景叠加到第1个PDF上,并输出新的PDF。url固定传2个PDF,第1个是底稿PDF。
- PDF背景叠加:
支持的专属参数:data.repeat(可选,控制是否把第 2 个 PDF 按页序循环铺到所有页面)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.repeat | number | 可选;传 1 时把第 2 个 PDF 按页序循环铺到所有页面;不传时默认只按第 2 个 PDF 的实际页数逐页叠加 |
否 |
示例:
{"action":"underlaypdf","url":["https://xxx/base.pdf","https://xxx/background.pdf"],"data":{"repeat":1}}
行为说明:不传 data.repeat 时,默认只会按第 2 个 PDF 的实际页数逐页做背景叠加,超出的底稿页不再叠加;传 1 时会按页序循环铺到所有页面。若第 2 个 PDF 只有 1 页,即使不传 data.repeat,系统也会自动把这一页铺到所有页面。
会把第2个PDF作为背景叠加到第1个PDF下方,并输出新的PDF。url固定传2个PDF,第1个是底稿PDF。
- 页眉页脚:
支持的专属参数:data.header、data.footer、data.fontsize、data.fontcolor、data.fontalpha。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.header | string | 页眉文字;和 data.footer 至少传一个 |
条件必传 |
| data.footer | string | 页脚文字;和 data.header 至少传一个 |
条件必传 |
| data.fontsize | number | 文字大小 | 按需 |
| data.fontcolor | string | 文字颜色,格式如 #333333 |
按需 |
| data.fontalpha | number | 文字透明度 | 按需 |
示例:
{"action":"headerfooter","url":["https://xxx/xxx.pdf"],"data":{"header":"Confidential","footer":"第 {{page}} / {{total}} 页","fontsize":12,"fontcolor":"#333333","fontalpha":80}}
会给每一页叠加文字页眉页脚。
- 页面加页码:
专属参数:无。
示例:
{"action":"pageaddnumber","url":["https://xxx/xxx.pdf"]}
会把PDF每一页右下角添加页码。
- PDF多页拼版 / n-up:
支持的专属参数:data.nup、data.paper、data.landscape、data.frame、data.scale。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.nup | string | 每张输出纸放几页;格式为 列x行,如 2x1、2x2、3x2。2x1 表示一张纸放 2 页,2x2 表示一张纸放 4 页 |
是 |
| data.paper | string | 输出纸张大小。建议值:a3paper、a4paper、a5paper、b4paper、b5paper、letterpaper、legalpaper。默认值为 a4paper |
按需 |
| data.landscape | number | 输出纸张是否横向。1 为横向,省略或 0 为纵向。横向通常更适合 2x1、2x2 这类布局 |
按需 |
| data.frame | number | 是否给每个小页面画边框。1 表示画边框,方便区分每个子页;省略或 0 表示不画 |
按需 |
| data.scale | number | 每个小页面的缩放比例,必须大于 0。常用 0.9 到 1.0;数值越小,页面四周留白越多 |
按需 |
常见纸张说明:
a4paper:最常见的办公打印纸;如果不确定,优先用它。a3paper:比 A4 更大,适合一次拼更多页。a5paper:比 A4 更小,适合输出更小的页面。letterpaper:北美常见纸型。legalpaper:比letterpaper更长,常用于合同、表格。
示例 1:一张纸放 4 页,适合做讲义或速读版
{"action":"pdfnup","url":["https://xxx/xxx.pdf"],"data":{"nup":"2x2","paper":"a4paper","landscape":1,"frame":1,"scale":0.95}}
示例 2:一张纸放 2 页,保留更大的阅读字号
{"action":"pdfnup","url":["https://xxx/xxx.pdf"],"data":{"nup":"2x1","paper":"a4paper"}}
示例 3:放到更大的纸上,减少内容拥挤
{"action":"pdfnup","url":["https://xxx/xxx.pdf"],"data":{"nup":"2x2","paper":"a3paper","scale":0.9}}
这个操作会把多页 PDF 重新排到一张纸上。原文件里的超链接、书签、表单等交互信息可能不会保留。
- PDF小册子排版:
支持的专属参数:data.paper、data.landscape、data.scale、data.signature、data.flipotheredge。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.paper | string | 输出纸张大小。建议值:a3paper、a4paper、a5paper、b4paper、b5paper、letterpaper、legalpaper。默认值为 a4paper |
按需 |
| data.landscape | number | 输出纸张是否横向。1 为横向,省略或 0 为纵向;做双面打印小册子时,横向纸面通常更常见 |
按需 |
| data.scale | number | 页面缩放比例,必须大于 0。常用 0.9 到 1.0;如果担心装订后内容太靠边,可以适当调小 |
按需 |
| data.signature | number | 每个装订单元包含多少页,必须是 4 的倍数,如 4、8、16、32。省略时会把整份文件当成一个完整小册子自动排版 |
按需 |
| data.flipotheredge | number | 是否切换双面打印的翻页边。1 表示开启;如果你试打后发现背面上下颠倒,可以尝试开启这个参数 |
按需 |
signature 可以简单理解为“分几本小册子来装订”:
signature=16:每 16 页做成一个装订单元。signature=32:每 32 页做成一个装订单元。- 不传:整份 PDF 当成一个小册子,系统会自动补空白页到 4 的倍数。
示例 1:整份 PDF 直接做成一本小册子
{"action":"pdfbooklet","url":["https://xxx/xxx.pdf"],"data":{"paper":"a4paper"}}
示例 2:每 16 页做一个装订单元,适合页数较多的文档
{"action":"pdfbooklet","url":["https://xxx/xxx.pdf"],"data":{"paper":"a4paper","signature":16,"flipotheredge":1,"scale":0.95}}
示例 3:如果双面打印背面方向不对,可尝试切换翻页边
{"action":"pdfbooklet","url":["https://xxx/xxx.pdf"],"data":{"paper":"a4paper","signature":16,"flipotheredge":1}}
这个操作会按小册子阅读顺序重新排页,并在需要时自动补空白页,适合双面打印后对折装订。原文件里的超链接、书签、表单等交互信息可能不会保留。
页面处理
- 页面删除:
支持的专属参数:pageindexes(要删除的页码字符串,支持区间组合;按页码集合删除选中页,不按输入顺序重排)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 要删除的页码字符串,支持区间组合;按页码集合删除选中页,不按输入顺序重排 | 是 |
示例:
{"action":"pageremove","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3"}
会把PDF里的第一页、第三页删除;若传入 3,1 或 1,3,4-5,也是按页码集合选中后删除,不会因为输入顺序改变删除逻辑。
- 页面插入:
支持的专属参数:pageindex(插入位置)、pageinserturl(插入的PDF地址)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindex | number | 插入位置;示例为在第 1 页后插入 |
是 |
| pageinserturl | string | 待插入 PDF 的 URL | 是 |
示例:
{"action":"pageinsert","url":["https://xxx/xxx.pdf"],"pageindex":1,"pageinserturl":"https://xxx/xxx.pdf"}
会在PDF的第一页后面插入 pageinserturl 这个地址的PDF。
- 页面提取:
支持的专属参数:pageindexes(要提取的页码字符串,支持区间组合、乱序和列表/区间混合;结果按给定顺序输出)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 要提取的页码字符串,支持区间组合、乱序和列表/区间混合;结果按给定顺序输出 | 是 |
示例:
{"action":"pageextract","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3"}
会把PDF里的第一页、第三页提取出来作为一个PDF文件;也支持如 3,1,2,5-6 这样的页序写法。
- 页面重排:
支持的专属参数:pageindexes(最终页序,支持乱序、范围和列表/区间混合)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 最终页序,支持乱序、范围和列表/区间混合 | 是 |
示例:
{"action":"pageorder","url":["https://xxx/xxx.pdf"],"pageindexes":"3,1,2,5-6"}
会按给定顺序重新生成一个PDF文件。
- 页面倒序:
专属参数:无。
示例:
{"action":"pagereverse","url":["https://xxx/xxx.pdf"]}
会把PDF所有页面整体倒序输出。
- 页面复制:
支持的专属参数:pageindexes(可选;不传则每页复制一遍,传则按原PDF页序在原位复制指定页,支持区间组合)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 可选;不传则每页复制一遍,传则按原PDF页序在原位复制指定页,支持区间组合 | 否 |
示例:
{"action":"pageduplicate","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3,5-6"}
会在原页面后面插入对应页面副本;若传入 3,1,仍按原PDF页序在第1页、第3页后插入副本。
- 空白页插入:
支持的专属参数:pageindex(插入位置,0表示插到第一页前)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindex | number | 插入位置;0 表示插到第一页前 |
是 |
示例:
{"action":"blankpageinsert","url":["https://xxx/xxx.pdf"],"pageindex":2}
会在第2页后插入1个同尺寸空白页。
- 自动删除空白页:
专属参数:无。
示例:
{"action":"removeblankpages","url":["https://xxx/xxx.pdf"]}
会自动识别接近纯白的页面并删除,适合扫描件里的空白隔页清理。
- 页面旋转:
支持的专属参数:pagerotateangle(旋转角度)、pageindexes(可选,按原PDF页序筛选指定页面)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pagerotateangle | number | 旋转角度,如 90 |
是 |
| pageindexes | string | 可选;仅按原PDF页序筛选并旋转指定页面,支持区间组合 | 否 |
示例:
{"action":"pagerotate","url":["https://xxx/xxx.pdf"],"pagerotateangle":90,"pageindexes":"2,4-6"}
会把PDF整本或指定页面按给定角度旋转;若传入 3,1,会旋转第1页和第3页,但不会重排页面。
- PDF裁边:
支持的专属参数:pageindexes、data.left、data.right、data.top、data.bottom。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 需要裁边的页码范围,支持区间组合;按原PDF页序处理选中页 | 按需 |
| data.left | number | 左边裁剪量 | 按需 |
| data.right | number | 右边裁剪量 | 按需 |
| data.top | number | 上边裁剪量 | 按需 |
| data.bottom | number | 下边裁剪量 | 按需 |
示例:
{"action":"pdfcrop","url":["https://xxx/xxx.pdf"],"pageindexes":"2-10","data":{"left":18,"right":18,"top":24,"bottom":24}}
会按统一边距修改选中页面的CropBox,并输出新的pdfurl。pageindexes 仅用于筛选要裁边的页面,不会因为输入顺序而重排页面。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.pdfurl | string | 裁边后 PDF 地址 |
| result.count | number | 裁边后 PDF 总页数 |
| result.data | object | 裁边后整份 PDF 的页面信息;结构与 pageinfo 返回的 result.data 一致 |
返回结果示例:
{"result":{"status":"done","count":12,"pdfurl":"https://file.duhuitech.com/o/xxx/crop.pdf","data":{"uniform":true,"pages":[{"page":1,"width":559.28,"height":805.89,"orientation":"portrait"}]}}}
- PDF页数查询:
专属参数:无。
示例:
{"action":"pagecountinfo","url":["https://xxx/xxx.pdf"]}
会只查询PDF页数。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.count | number | PDF 总页数 |
返回结果示例:
{"result":{"status":"done","count":12}}
- PDF页面信息:
支持的专属参数:pageindexes(可选;不传返回全部页面,传则按原PDF页序返回指定页)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 可选;不传返回全部页面,传则按原PDF页序返回指定页 | 否 |
示例:
{"action":"pageinfo","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3-4"}
会返回每一页的宽高和横竖版信息;若传入 3,1,返回结果仍按第1页、第3页的原PDF页序排列。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.count | number | 返回的页面条数;不传 pageindexes 时等于 PDF 总页数 |
| result.data.uniform | boolean | 返回页面尺寸是否全部一致 |
| result.data.pages | array | 页面信息数组,按原 PDF 页序返回 |
| result.data.pages[].page | number | 页码,从 1 开始 |
| result.data.pages[].width | number | 页面宽度,单位 pt |
| result.data.pages[].height | number | 页面高度,单位 pt |
| result.data.pages[].orientation | string | 页面方向:portrait、landscape 或 square |
返回结果示例:
{"result":{"status":"done","count":3,"data":{"uniform":false,"pages":[{"page":1,"width":595.28,"height":841.89,"orientation":"portrait"},{"page":3,"width":841.89,"height":595.28,"orientation":"landscape"},{"page":4,"width":595.28,"height":595.28,"orientation":"square"}]}}}
内容提取与结构
- 提取图片:
专属参数:无。
示例:
{"action":"extractimg","url":["https://xxx/xxx.pdf"]}
会把PDF里的图片提取出来。
pdffilename 不支持;导出的图片文件会按 1.png、2.png 这类顺序命名。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.imageurls | string数组 | 提取出的图片地址数组,按输出顺序返回 |
| result.count | number | 提取出的图片数量 |
返回结果示例:
{"result":{"status":"done","count":2,"imageurls":["https://file.duhuitech.com/o/xxx/1.png","https://file.duhuitech.com/o/xxx/2.png"]}}
- PDF文本提取:
支持的专属参数:pageindexes、outfilename、data.textwithformat、data.textperpage。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 需要提取文字的页码范围,支持区间组合、乱序和列表/区间混合;会先按给定页序筛页,再提取文字 | 按需 |
| outfilename | string | 输出文件名;默认随机 | 按需 |
| data.textwithformat | number | 是否尽量保留排版信息;1 表示保留 |
按需 |
| data.textperpage | number | 是否按页拆分输出;1 表示每页单独输出并打包 |
按需 |
示例:
{"action":"extracttext","url":["https://xxx/xxx.pdf"],"pageindexes":"1-3","outfilename":"chapter1","data":{"textwithformat":1,"textperpage":1}}
会提取PDF文字内容;默认输出一个txt文件,textperpage 为1时输出按筛选后页序分拆的zip文件。
pdffilename 不适用,请使用 outfilename 控制输出文件名前缀。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.fileurl | string | 提取结果文件地址;可能是 txt,也可能是按页拆分后的 zip |
| result.count | number | 实际提取的页数;不传 pageindexes 时等于 PDF 总页数 |
| result.filesize | number | 输出文件大小 |
返回结果示例:
{"result":{"status":"done","count":3,"filesize":2048,"fileurl":"https://file.duhuitech.com/o/xxx/chapter1.zip"}}
- PDF元数据读取/修改:
支持的专属参数:meta.title、meta.author、meta.subject、meta.keywords、meta.creator、meta.producer。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| meta.title | string | PDF 标题 | 按需 |
| meta.author | string | PDF 作者 | 按需 |
| meta.subject | string | PDF 主题 | 按需 |
| meta.keywords | string | PDF 关键词 | 按需 |
| meta.creator | string | 生成工具 | 按需 |
| meta.producer | string | 生产程序 | 按需 |
示例:
{"action":"pdfmeta","url":["https://xxx/xxx.pdf"],"meta":{"title":"Quarterly Report","author":"Duhui"}}
不传 meta 时会读取当前PDF的常用元数据;传 meta 时会更新对应字段并返回新的pdfurl和更新后的data。
读取模式下 pdffilename 不适用;写入模式下支持 pdffilename。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.data | object | 元数据对象 |
| result.data.title | string | 标题,存在时返回 |
| result.data.author | string | 作者,存在时返回 |
| result.data.subject | string | 主题,存在时返回 |
| result.data.keywords | string | 关键词,存在时返回 |
| result.data.creator | string | 生成工具,存在时返回 |
| result.data.producer | string | 生产程序,存在时返回 |
| result.data.creationdate | string | 创建时间,存在时返回 |
| result.data.moddate | string | 修改时间,存在时返回 |
| result.data.tagged | string | 是否带标签,存在时返回 |
| result.data.encrypted | string | 是否加密,存在时返回 |
返回结果示例(读取):
{"result":{"status":"done","count":12,"data":{"title":"Quarterly Report","author":"Duhui","creator":"Word","producer":"Skia/PDF m123"}}}
更新模式下,返回结果会额外包含 result.pdfurl。
- PDF目录导出:
专属参数:无。
示例:
{"action":"outlineexport","url":["https://xxx/xxx.pdf"]}
会读取PDF目录书签。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.count | number | PDF 总页数 |
| result.data.named_dests | object | 命名目标映射 |
| result.data.outline | array | 目录树数组 |
| result.data.outline[].title | string | 目录标题 |
| result.data.outline[].dest.page_index | number | 目标页索引,从 0 开始 |
| result.data.outline[].dest.dest | array | 目标定位参数,如 ["/Fit"] |
| result.data.outline[].kids | array | 子目录数组;没有子目录时可省略 |
目录节点还可能包含 dest_name、color、flags、count、is_open 等可选字段。
返回结果示例:
{"result":{"status":"done","count":12,"data":{"named_dests":{},"outline":[{"title":"Chapter 1","dest":{"page_index":0,"dest":["/Fit"]},"kids":[{"title":"Section 1.1","dest":{"page_index":1,"dest":["/Fit"]}}]}]}}}
- PDF目录导入:
支持的专属参数:data(目录 JSON 对象,建议先调用 outlineexport 获取后原样传回)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data | JSON对象 | 目录 JSON 对象;建议先调用 outlineexport 获取后原样传回 |
是 |
示例:
{"action":"outlineimport","url":["https://xxx/xxx.pdf"],"data":{"named_dests":{},"outline":[{"title":"Chapter 1","dest":{"page_index":0,"dest":["/Fit"]}}]}}
会把目录JSON写回PDF,并输出新的pdfurl。data 顶层应包含 named_dests 和 outline;其中 page_index 从 0 开始计数。
安全与权限
- 文件加密:
支持的专属参数:userpassword、ownerpassword、pdfrestriction。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| userpassword | string | 用户密码;和 ownerpassword 至少传一个 |
条件必传 |
| ownerpassword | string | 所有者密码;和 userpassword 至少传一个 |
条件必传 |
| pdfrestriction | string | PDF 权限限制编码,如 110 |
按需 |
示例:
{"action":"encrypt","url":["https://xxx/xxx.pdf"],"userpassword":"YOUR_PASSWORD","ownerpassword":"YOUR_PASSWORD","pdfrestriction":"110"}
userpassword 和 ownerpassword 至少传一个。该操作会给PDF加密码和权限限制。
- 文件解密(文件加密转换接口中已有):
支持的专属参数:password(解密密码,可以为空)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| password | string | 解密密码;如果原文件无密码可传空字符串 | 按需 |
示例:
{"action":"decrypt","url":["https://xxx/xxx.pdf"],"password":""}
会把PDF解密。
- 文件是否加密:
专属参数:无。
示例:
{"action":"checkencrypt","url":["https://xxx/xxx.pdf"]}
会检查PDF是否加密。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.data.encrypted | boolean | true 表示已加密,false 表示未加密 |
返回结果示例:
{"result":{"status":"done","data":{"encrypted":true}}}
通用请求参数BODY(JSON):
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| action | string | 操作类型,取值见上方各 action 小节 | 是 |
| url | string数组 | 待处理的PDF URL数组,支持http(s)、ftp;每个action对url数量和含义的要求见对应 action 小节 | 是 |
| pdffilename | string | 生成输出文件的文件名,默认随机;是否支持及具体含义见对应 action 小节 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,详细见 回调URL | 否 |
其余参数均为 action 专属参数,见对应 action 小节。
请求示例:
http://all2pdf.apistore.huaweicloud.com/v1/pdfaction
传入的Body为JSON格式,见上方详细操作。
必须签名才能调用成功,签名见华为签名规则:
https://support.huaweicloud.com/usermanual-apig/apig-ug-0011.html
返回数据结构:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| token | string | 是 | 用于查询结果接口 |
异步任务完成后的通用说明:
- 所有 action 都支持
callbackurl。 - 大多数生成 PDF 的 action 都支持
pdffilename;任务完成后,可在 查询结果 或回调结果里看到result.pdfurl、result.count,通常还会返回result.filesize。 - 特殊 action 的最终返回字段见对应 action 小节,例如:
split返回result.pdfurls,extractimg返回result.imageurls,extracttext返回result.fileurl,pagecountinfo、pageinfo、outlineexport、checkencrypt等返回结构化数据。
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
查询 QUERY
请求参数:
| 参数 | 类型及范围 | 备注 | 是否必须发送 |
|---|---|---|---|
| token | string | 是 |
请求示例:
https://api.duhuitech.com/q?token=YOUR_TOKEN
无需签名,无调用次数限制
由于转换需要时间,文件越大页数越多,转换越久,故需要轮询查询接口来获得结果。查询频率可以是1s一次,也可以更长一些。查询后先看status,如果是Done或Failed,则转换结束,停止轮询。如果是Doing或Pending,则继续轮询。
返回数据结构:
| 名称 | 含义 | 类型及范围 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| code | number | 是 | 10000:请求成功 | |
| msg | string | 是 | ||
| token | string | 是 | 请求的token | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 含义 | 类型及范围 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| status | 状态 | string | 是 | Pending:还未开始 Doing:正在转换 Done:转换成功 Failed:转换失败 |
| progress | 进度 | number(0.00 - 1.00) | 否(status为Doing时返回) | 比如0.88表示88% |
| pdfurl | pdf文件地址 | string | 否(status为Done时返回) | 转换出来的PDF地址,http和https都支持 |
| count | 总页数 | integer | 否(status为Done时返回) | PDF页面总数 |
| reason | 失败原因 | string | 否(status为Failed时可能返回) | 转换失败的原因 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"token":"YOUR_CREDENTIAL",
"result":
{
"progress":0.02,
"status":"Doing"
}
}
{
"code":10000,
"msg":"",
"token":"YOUR_CREDENTIAL",
"result":
{
"status":"Done",
"pdfurl":"https://file.duhuitech.com/o/xxx/xxx.pdf",
"count":10
}
}
返回示例(失败状态):
{
"code":40000,
"msg":"No such token"
}
注意:
- 上传文件大小不能超过1500M。
- 最大转换时长:1小时,超过时间未完成则自动失败。
- 转换完成后,下载链接有效时间:1小时。
回调URL:
用途:客户可以自行部署服务器,系统转换结束后会调用客户提供的回调URL,直接发送转换结果,从而无需再轮询Query。
当设置了回调URL,转换结束后(无论成功失败),系统都会尝试调用该URL,具体如下:
以POST方式调用该URL,Header头中Content-Type: application/json
Body为JSON格式,内容和Query的结果相同,例如:
{"code":10000,"msg":"","token":"YOUR_CREDENTIAL","result":{"status":"Done","pdfurl":"https://file.duhuitech.com/o/xxx/xxx.pdf","count":10}}
服务端收到该POST后需在10秒内返回HTTP STATUS CODE 200,视为调用成功,否则系统认为回调失败,会再次尝试。规则如下:
系统共计最多会调用3次回调URL,如果第一次失败,则等待3秒后尝试第二次,如果第二次失败,则等待5秒后尝试第三次,如果第三次失败,则不再尝试。
回调URL超时时间10秒。
关于下载转换后的文件需支持302跳转
接口返回的下载地址(如 fileurl / fileurls)会经 HTTP 302 跳转到实际文件。浏览器会自动跟随。
以下方式默认会跟随跳转,一般无需额外配置:
wget、Python requests / urllib、Node.js axios / got / fetch、Java OkHttp / HttpURLConnection、Go net/http、C# HttpClient、PHP file_get_contents、Objective-C / Swift NSURLSession / URLSession(含 Alamofire)
少数默认不跟随,需手动打开:
curl:加-L,如curl -L -o out.bin "下载地址"- Java
java.net.http.HttpClient:设置.followRedirects(HttpClient.Redirect.NORMAL) - PHP
curl扩展:设置CURLOPT_FOLLOWLOCATION => true
若只拿到 302 响应、本地没有文件内容,多半是未跟随跳转,按上面说明打开对应选项即可。
错误码表:
| JSON里返回的code | 错误信息 |
|---|---|
| 40000 | 通用错误 |
| 40001 | 参数错误 |
| 40002 | 参数不符合规范 |
概述
使用流程
由于转换需要时间,文件越大页数越多,转换越久,故默认采用异步的方式获得转换结果。即调用转换接口后会获得token,随后有2种方式查询转换结果:
调用转换接口
由于腾讯云网关迁移的关系,故新老用户拿到的 SecretID 不同,老用户SecretID以AKID开头的,请使用V1域名和签名。新用户使用v2域名和签名。 注意:v1和v2调用api的域名不一样。 注意:v1文档和v2文档调用api的url不一样。
由于腾讯云GET方式支持参数数量有限,故优先建议使用 文档转换-全参数 接口,该接口直接HTTP POST JSON:
- JSON支持输入:文件url;文件Base64字符串;多张图片的url。见:文档转换-全参数
- 支持全量参数
旧转换接口包括3种转换方式:
- 单一文档转为PDF,文档是一个下载链接,用HTTP GET方式,见:文档转换GET
- 单一文档转为PDF,文档POST到服务器,用HTTP POST Form Data方式,见:文档转换POST
- 多个图片转为PDF,文档是多个下载链接,用HTTP POST JSON方式,见:多张图片转换POST
调用文件操作接口
- 文件操作接口见文件操作
调用转换API需要签名,详细见文档附录:腾讯签名规则 调用查询结果API无需签名。
文档转换-全参数
v2域名:
http&https://ap-shanghai.cloudmarket-apigw.com/service-gsefnc5p/v2/convert_async
v1域名:
http&https://service-gsefnc5p-1256652084.sh.apigw.tencentcs.com/release/v2/convert_async
HTTP方式: POST
Header中的Content-Type传入application/json
Body是JSON格式,支持以下3种输入源文件的方法:
方法1: 文件url,最大1500M:
{"input": ["http://xxx.docx"]}
方法2: 文件Base64字符串,注意需要传入type(源文档类型),Base64字符串最大10M:
{"input": ["base64字符串"], "type": "docx"}
方法3: 多张图片url,注意只能是图片:
{"input": ["http://xxx.jpg", "http://xxx.png"]}
必须签名才能调用成功,签名见腾讯签名规则:
支持以下源文件格式:
| 类型 | 扩展名(type取值) | 备注 |
|---|---|---|
| PDF文件 | ||
| 微软Office文档 | doc, docx, ppt, pptx, xls, xlsx, pot, pps, ppsx, csv | |
| WPS文档 | wps, wpt, dps, dpt, et, ett | |
| 苹果iWork文档 | pages, key, numbers | |
| 开放版式文档 | ofd | |
| 电子刊物 | caj, nh, kdh | |
| 电子书 | epub, chm, mobi, azw, azw3, fb2, cbr, cbz, djvu | |
| Markdown | md | |
| SVG | svg | |
| CAD文档 | dwg, dxf, dwt, dws, dwf, dwfx, dxb, dgn, plt, cf2, cgm | |
| 3D模型 | obj, 3ds, stl, gltf, glb, fbx, dae, ifc, step, stp, iges, igs, fcstd, brep, ply | 静态预览(平面示意图,按 6 个视角展示:等轴测 / 前 / 右 / 顶 / 后 / 左,便于快速查看模型外观;非可旋转的交互式 3D) |
| Figma和Sketch文档 | fig, sketch | |
| 网页文件 | html, htm, mht, eml | |
| 图片文件 | 几乎所有格式例如png, jpg, jpeg, gif, tif, tiff, bmp, webp, ai等 | type可以统一传img,代表一切图片 |
| 文本文件 | txt, rtf, java, js, c, cpp, jsp, css, xml, properties, log, | type可以统一传txt,代表一切文本 |
| 网址网页 | url | 网址,例如:https://www.duhuitech.com |
自定义参数:
| 参数 | 类型 | 备注 | 默认值 |
| type | string | 要转换的原始文件扩展名,如果不传,则取url中的扩展名,注意如果无法获取扩展名会导致转换异常或出错 | 空 |
| 输出PDF相关 | |||
| linearization | int | 是否需要快速web显示(PDF流式显示),默认0否,1是 | 0 |
| compress | int | 是否压缩,默认0不压缩,压缩分3档:1,2,3,1的压缩率最低,3最高 | 0 |
| flatten | int | 是否扁平化(注释合并到PDF),默认0否,1是 | 0 |
| imagepdf | int | 生成图片PDF,默认0否,1是 | 0 |
| pagesize | int | 设定页面大小。 如果源文件是Word,TXT,Excel,HTML,Epub此参数会覆盖excelpagesize。默认0:源文档设定值,如无则是A4。 如果源文件是图片,默认0:长图保持原图大小,非长图A4,原图不满A4大小的保持原图大小。 取值:1:A3,2:A4,3:A5,4:B4,5:B5,6:Letter,7:Legal,8:Tabloid,9:Ledger |
0 |
| adjustorientation | int | 调整所有页横屏或是竖屏。默认0不调整。 1: 竖屏,如果页面横屏则顺时针90度变竖屏 2: 竖屏,如果页面横屏则逆时针90度变竖屏 3: 横屏,如果页面竖屏则顺时针90度变横屏 4 :横屏,如果页面竖屏则逆时针90度变横屏 |
0 |
| pagesplit | int | 将每一页按长边等分为多页。例如一页是试卷,可以分为左右二页。默认0不分页,2: 分2页,3: 分3页 | 0 |
| needpagesizeinfo | int | 是否返回每一页的大小信息,默认0:否,1:是 | 0 |
| userpassword | string | 生成PDF文件的User Password,用户密码加密指打开文件时需要输入的密码,默认无 | 空 |
| ownerpassword | string | 生成PDF文件的Owner Password,所有者密码加密指修改文件时需要输入的密码,默认无 | 空 |
| pdfrestriction | string | 有密码时,生成PDF文件的权限,默认无权限。格式3位,比如010,第一位代表能否打印,第二位代表能否拷贝内容,第三位代表能否编辑 | 空 |
| pdffilename | string | 生成的PDF文件的文件名,默认随机 | 空 |
| 输出水印相关 | |||
| watermark | string | 添加水印,字符个数最大15个 | 空 |
| watermarkfontsize | int | 水印的字体大小,默认24pt | 24 |
| watermarkfontcolor | string | 水印的颜色,输入颜色码,默认黑色#000000,必须7位 | #000000 |
| watermarkfontalpha | int | 水印的透明度,取值范围1-100,越小越透明,默认20 | 20 |
| watermarkstyle | int | 水印的样式,默认0:文档中央一个水印;1: 文档铺满水印 | 0 |
| 输入Office文件相关(源文件为Word,PPT,Excel,WPS等) | |||
| excelislandscape | int | 如果是Excel文件,是否横屏,默认0否(竖屏),1是 | 0 |
| exceliscenter | int | 如果是Excel文件,是否居中,默认0否,1横竖居中,2仅横向居中,3仅纵向居中 | 0 |
| excelmargin | int | 如果是Excel文件,四边的边距,默认10px,单位是像素 | 0 |
| excelsheetindex | int | 如果是Excel文件,指定转换的Sheet索引,默认0:全部,第一个sheet就是1,以此类推 | 0 |
| excelnotshowgridlines | int | 如果是Excel文件,不显示网格线,默认0显示,1不显示 | 0 |
| exceluseprintarea | int | 如果是Excel文件,是否使用打印区域,默认0不使用,1使用,2不使用且只显示有内容的区域 | 0 |
| excelpagesize | int | 如果是Excel文件,设定页面大小,默认A4。0:A4,1:A3,2:A4,3:A5,4:B4,5:B5,6:Letter,7:Legal,8:Tabloid,9:Ledger | 0 |
| wordshowmarkup | int | 如果是Word文件,是否显示审阅标记,默认0不显示,1显示 | 0 |
| powerpointoutputtype | int | 如果是PPT文件,设定导出样式,默认幻灯片。0:幻灯片,0以上是讲义模式:1:每页一个幻灯片,2:每页二个幻灯片,3:每页三个幻灯片,4:每页四个幻灯片,5:每页六个幻灯片,6:每页九个幻灯片 | 0 |
| powerpointhandoutorder | int | 如果是PPT文件,当设置为讲义时,设定顺序,默认0水平,1垂直 | 0 |
| powerpointhandoutorientation | int | 如果是PPT文件,当设置为讲义时,输出文件的方向,默认0不改变,1横向,2纵向 | 0 |
| pageorientation | int | 如果是Word,TXT,Excel,HTML,设定页面横向还是竖向,此参数会覆盖excelislandscape。默认0不变,1横向,2 竖向 | 0 |
| 输入图片,扫描版PDF相关(源文件jpg,png,pdf等) | |||
| ocr | int | 是否识别图中文字或扫描版PDF文字,在输出的PDF中变为可选可搜索的文字,默认0否,1是 | 0 |
| language | int | 如果开启OCR,识别语言选项,默认2简体中文: 1:英语 2:简体中文 3:繁体中文 4:法语 5:德语 6:意大利语 7:俄语 8:日文 9:韩文 10:西班牙语 11:葡萄牙语 12:丹麦语 13:荷兰语 14:芬兰语 15:挪威语 16:瑞典语 17:土耳其语 |
2 |
| dewarp | int | 是否切边矫正,默认0否,1是。如果打开,每次只允许传入一张图(图片分辨率短边大于20,长边小于10000) | 0 |
| deskew | int | 是否将斜的文字矫正,默认0否,1是 | 0 |
| clean | int | 是否清除图像背景只显示文字,默认0否,1是 | 0 |
| grayimage | int | 如果是图片文件,是否把图片变为灰度图,默认0否,1是 | 0 |
| text | int | 如果开启ocr,是否使用矢量文字替换图片内文字,使得即使图片中的文字模糊,pdf放大后文字仍然清晰。默认0否,1是 | 0 |
| split2p | int | 如果开启ocr,横向图片若有左右两部分(常见于试卷),分割为2页。默认0:否,1是 | 0 |
| imagesize | int | 统一每页为固定宽,默认0否,输入数字即每页宽度,最大4096。设置该值将导致pagesize失效。 | 0 |
| 网址网页相关(type传url, html, md等) | |||
| ismobileurl | int | 如果type是url,html,md,是否移动端显示。默认0:桌面端网页,1:移动端网页 | 0 |
| urldesktopwidth | int | 如果type是url,html,md,桌面端显示。设定网页最大的宽度,默认:1440,最大:1920 | 0 |
| htmlpagemargin | string | 如果type是url,html,md,生成的页面边距。输入的是字符串,按照顺序:left top right bottom。单位可以是:px,in,cm,mm。例如左上右下分别是1px,2px,3px,4px,传的字符串就是:1px 2px 3px 4px。默认值:左右0,上下各1cm | 空 |
| urlwait | int | 如果type是url,停留一段时间再抓取页面,单位秒。默认0:不停留,最大30。比如10就是延迟10秒 | 0 |
| urltimeout | int | 如果type是url,加载资源的超时时间。默认0:40秒,最大120秒。比如10就是10秒 | 0 |
| urlonepage | int | 如果type是url,html,md,是否生成单页的长PDF。默认0:否, 1:是。注意打开这个选项后htmlpagemargin失效 | 0 |
| 输入网页HTML相关(源文件HTML) | |||
| htmloutline | int | 如果是HTML,是否根据h1,h2等html标记生成outline,默认0否,1是 | 0 |
| 输入EPUB相关(type传epub等) | |||
| epubfontsize | int | 如果type是epub等,输出的字体大小(单位pt,磅)。默认0自动 | 0 |
| epublineheight | int | 如果type是epub等,输出的行高(单位百分比)。例如120表示行高是字体大小的120%。默认0自动 | 0 |
| epubpagesize | string | 如果type是epub等,输出的页面自定义大小(单位厘米)。此参数如果设置会覆盖pagesize。默认空自动。例如7.2x15.5 | 空 |
| epubmargin | string | 如果type是epub等,输出的页面边距(单位pt,磅)。默认空自动。页边距格式:左 上 右 下,用空格分隔。例如5 5 5 5 | 空 |
| 输入CAD文件相关(源文件dwg, dwf等) | |||
| cadlayer | int | 如果是CAD文件,是否生成Layer层,默认0否,1是 | 0 |
| cadisdisplay | int | 如果是CAD文件,是否按照Display显示,默认0不按照,1按照Display | 0 |
| cadquality | int | 如果是CAD文件,生成的文件品质,默认3。取值从1-5品质从低到高。 | 3 |
| caddetectempty | int | 如果是CAD文件,是否删除空页,默认0不删除,1删除。 | 0 |
| 其他 | |||
| password | string | 源文件的密码,支持有密码的PDF,Word,PPT,Excel文件类型,默认空无密码 | 空 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,详细见 回调URL | 空 |
请求示例:
- 例1: 把word文件转为PDF,并设置1级压缩
{"input": ["http://xxx.docx"], "compress":1}
- 例2: 把2张图片转为PDF,并识别图中文字,去除图片,转为矢量文字可选的PDF
{"input":["http://xxx.jpg", "http://xxx.png"], "ocr":1, "clean":1, "text":1}
- 例3: 把Excel文件转为PDF,并只包含有内容的单元格,加上水印"度慧科技",设置PDF打开密码为123
{"input":["http://xxx.xlsx"], "exceluseprintarea":2, "watermark":"度慧科技", "userpassword":"YOUR_PASSWORD"}
返回数据结构:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| token | string | 是 | 用于查询结果接口 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
文件操作POST
支持以下操作:
| 类型 | 操作 |
|---|---|
| 文件处理 | 文件合并、文件拆分、转为图片PDF、文件修复、文件扁平化、文件线性化、PDF压缩、PDF净化、PDF灰度化 |
| 内容叠加与排版 | 图片签名、文件加水印、文件去水印、PDF前景叠加、PDF背景叠加、页眉页脚、页面加页码、PDF多页拼版 / n-up、PDF小册子排版 |
| 页面处理 | 页面删除、页面插入、页面提取、页面重排、页面倒序、页面复制、空白页插入、自动删除空白页、页面旋转、PDF裁边、PDF页数查询、PDF页面信息 |
| 内容提取与结构 | 提取图片、PDF文本提取、PDF元数据读取/修改、PDF目录导出、PDF目录导入 |
| 安全与权限 | 文件加密、文件解密、文件是否加密 |
POST Body传入JSON,Header中的Content-Type传入application/json
通过指定action,对PDF文件进行不同的操作,详细如下:
文件处理
- 文件合并:
专属参数:无。
示例:
{"action":"merge","url":["https://xxx/xxx.pdf", "https://xxx/xxx.pdf"]}
会合并为一个PDF文件。url数组需传2个以上PDF地址。
- 文件拆分:
支持的专属参数:splitcount(按固定页数拆分)、pageranges(按多个页段拆分,使用竖线分隔;和 splitcount 同时传时优先按 splitcount)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| splitcount | number | 按固定页数拆分;和 pageranges 同时传时优先按本参数处理 |
条件必传 |
| pageranges | string | 按多个页段拆分,使用竖线分隔,如 `1-3 | 4-10 |
示例:
{"action":"split","url":["https://xxx/xxx.pdf"],"splitcount":2}
会把PDF拆分为多个PDF,每个PDF是2页。
{"action":"split","url":["https://xxx/xxx.pdf"],"pageranges":"1-3|4-10|11-12"}
会按 pageranges 指定的页段拆分为多个PDF,依次输出为1.pdf、2.pdf、3.pdf。
pdffilename 不支持;拆分结果文件会按 1.pdf、2.pdf、3.pdf 这类顺序命名。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.pdfurls | string数组 | 拆分后 PDF 地址数组,按输出顺序返回 |
| result.count | number | 拆分后 PDF 数量 |
返回结果示例:
{"result":{"status":"done","count":3,"pdfurls":["https://file.duhuitech.com/o/xxx/1.pdf","https://file.duhuitech.com/o/xxx/2.pdf","https://file.duhuitech.com/o/xxx/3.pdf"]}}
- 转为图片PDF:
支持的专属参数:compress(可选,默认0不压缩)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| compress | number | 压缩等级;可选,默认 0 不压缩 |
否 |
示例:
{"action":"imagepdf","url":["https://xxx/xxx.pdf"],"compress":2}
会把PDF每一页转成图片后再重新生成一个图片型PDF。
- 文件修复:
专属参数:无。
示例:
{"action":"repairpdf","url":["https://xxx/xxx.pdf"]}
会尝试修复PDF结构问题,并输出修复后的PDF。
- 文件扁平化:
专属参数:无。
示例:
{"action":"flatten","url":["https://xxx/xxx.pdf"]}
会把PDF中的批注等可交互内容扁平化到页面内容里。
- 文件线性化:
专属参数:无。
示例:
{"action":"linearize","url":["https://xxx/xxx.pdf"]}
会把PDF做快速网页预览优化。
- PDF压缩:
支持的专属参数:compress(必传,支持1、2、3,也支持直接传目标图片分辨率)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| compress | number | 压缩等级;支持 1、2、3,也支持直接传目标图片分辨率 |
是 |
示例:
{"action":"compresspdf","url":["https://xxx/xxx.pdf"],"compress":2}
压缩PDF;如果压缩结果不比原文件更小,会保留较小版本输出。
- PDF净化:
专属参数:无。
示例:
{"action":"pdfsanitize","url":["https://xxx/xxx.pdf"]}
会重写PDF结构并清空常见元数据字段,输出净化后的PDF。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.pdfurl | string | 净化后 PDF 地址 |
| result.count | number | 净化后 PDF 总页数 |
| result.data | object | 净化后的元数据对象;字段结构与 pdfmeta 读取返回的 result.data 一致 |
返回结果示例:
{"result":{"status":"done","count":12,"pdfurl":"https://file.duhuitech.com/o/xxx/sanitize.pdf","data":{}}}
- PDF灰度化:
专属参数:无。
示例:
{"action":"grayscale","url":["https://xxx/xxx.pdf"]}
会把PDF转换为灰度版,并输出新的PDF。
内容叠加与排版
- 图片签名:
支持的专属参数:pageindex(签名页码)、stampurl(签名图片地址)、stamprect(签名位置和大小,格式 x,y,width,height)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindex | number | 签名页码,示例为第 1 页 |
是 |
| stampurl | string | 签名图片 URL | 是 |
| stamprect | string | 签名位置和大小,格式 x,y,width,height,单位像素 |
是 |
示例:
{"action":"stampsignature","url":["https://xxx/xxx.pdf"],"pageindex":1,"stampurl":"http://xxx/xxx.png","stamprect":"10,10,100,50"}
会把PDF的第一页加上图片签名,签名位置在x=10,y=10,宽度=100,高度=50,单位像素。
- 文件加水印:
支持的专属参数:watermark、watermarkstyle、watermarkfontsize、watermarkfontcolor、watermarkfontalpha。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| watermark | string | 水印文字内容 | 是 |
| watermarkstyle | number | 水印样式编号 | 按需 |
| watermarkfontsize | number | 水印字体大小 | 按需 |
| watermarkfontcolor | string | 水印字体颜色,格式如 #000000 |
按需 |
| watermarkfontalpha | number | 水印透明度 | 按需 |
示例:
{"action":"watermark","url":["https://xxx/xxx.pdf"],"watermark":"CONFIDENTIAL","watermarkstyle":1,"watermarkfontsize":24,"watermarkfontcolor":"#000000","watermarkfontalpha":20}
会给PDF每一页添加文字水印。
- 文件去水印:
专属参数:无。
示例:
{"action":"removewatermark","url":["https://xxx/xxx.pdf"]}
会尝试移除PDF中的水印内容,并输出新的PDF。
- PDF前景叠加:
支持的专属参数:data.repeat(可选,控制是否把第 2 个 PDF 按页序循环铺到所有页面)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.repeat | number | 可选;传 1 时把第 2 个 PDF 按页序循环铺到所有页面;不传时默认只按第 2 个 PDF 的实际页数逐页叠加 |
否 |
示例:
{"action":"overlaypdf","url":["https://xxx/base.pdf","https://xxx/overlay.pdf"],"data":{"repeat":1}}
行为说明:不传 data.repeat 时,默认只会按第 2 个 PDF 的实际页数逐页做前景叠加,超出的底稿页不再叠加;传 1 时会按页序循环铺到所有页面。若第 2 个 PDF 只有 1 页,即使不传 data.repeat,系统也会自动把这一页铺到所有页面。
会把第2个PDF作为前景叠加到第1个PDF上,并输出新的PDF。url固定传2个PDF,第1个是底稿PDF。
- PDF背景叠加:
支持的专属参数:data.repeat(可选,控制是否把第 2 个 PDF 按页序循环铺到所有页面)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.repeat | number | 可选;传 1 时把第 2 个 PDF 按页序循环铺到所有页面;不传时默认只按第 2 个 PDF 的实际页数逐页叠加 |
否 |
示例:
{"action":"underlaypdf","url":["https://xxx/base.pdf","https://xxx/background.pdf"],"data":{"repeat":1}}
行为说明:不传 data.repeat 时,默认只会按第 2 个 PDF 的实际页数逐页做背景叠加,超出的底稿页不再叠加;传 1 时会按页序循环铺到所有页面。若第 2 个 PDF 只有 1 页,即使不传 data.repeat,系统也会自动把这一页铺到所有页面。
会把第2个PDF作为背景叠加到第1个PDF下方,并输出新的PDF。url固定传2个PDF,第1个是底稿PDF。
- 页眉页脚:
支持的专属参数:data.header、data.footer、data.fontsize、data.fontcolor、data.fontalpha。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.header | string | 页眉文字;和 data.footer 至少传一个 |
条件必传 |
| data.footer | string | 页脚文字;和 data.header 至少传一个 |
条件必传 |
| data.fontsize | number | 文字大小 | 按需 |
| data.fontcolor | string | 文字颜色,格式如 #333333 |
按需 |
| data.fontalpha | number | 文字透明度 | 按需 |
示例:
{"action":"headerfooter","url":["https://xxx/xxx.pdf"],"data":{"header":"Confidential","footer":"第 {{page}} / {{total}} 页","fontsize":12,"fontcolor":"#333333","fontalpha":80}}
会给每一页叠加文字页眉页脚。
- 页面加页码:
专属参数:无。
示例:
{"action":"pageaddnumber","url":["https://xxx/xxx.pdf"]}
会把PDF每一页右下角添加页码。
- PDF多页拼版 / n-up:
支持的专属参数:data.nup、data.paper、data.landscape、data.frame、data.scale。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.nup | string | 每张输出纸放几页;格式为 列x行,如 2x1、2x2、3x2。2x1 表示一张纸放 2 页,2x2 表示一张纸放 4 页 |
是 |
| data.paper | string | 输出纸张大小。建议值:a3paper、a4paper、a5paper、b4paper、b5paper、letterpaper、legalpaper。默认值为 a4paper |
按需 |
| data.landscape | number | 输出纸张是否横向。1 为横向,省略或 0 为纵向。横向通常更适合 2x1、2x2 这类布局 |
按需 |
| data.frame | number | 是否给每个小页面画边框。1 表示画边框,方便区分每个子页;省略或 0 表示不画 |
按需 |
| data.scale | number | 每个小页面的缩放比例,必须大于 0。常用 0.9 到 1.0;数值越小,页面四周留白越多 |
按需 |
常见纸张说明:
a4paper:最常见的办公打印纸;如果不确定,优先用它。a3paper:比 A4 更大,适合一次拼更多页。a5paper:比 A4 更小,适合输出更小的页面。letterpaper:北美常见纸型。legalpaper:比letterpaper更长,常用于合同、表格。
示例 1:一张纸放 4 页,适合做讲义或速读版
{"action":"pdfnup","url":["https://xxx/xxx.pdf"],"data":{"nup":"2x2","paper":"a4paper","landscape":1,"frame":1,"scale":0.95}}
示例 2:一张纸放 2 页,保留更大的阅读字号
{"action":"pdfnup","url":["https://xxx/xxx.pdf"],"data":{"nup":"2x1","paper":"a4paper"}}
示例 3:放到更大的纸上,减少内容拥挤
{"action":"pdfnup","url":["https://xxx/xxx.pdf"],"data":{"nup":"2x2","paper":"a3paper","scale":0.9}}
这个操作会把多页 PDF 重新排到一张纸上。原文件里的超链接、书签、表单等交互信息可能不会保留。
- PDF小册子排版:
支持的专属参数:data.paper、data.landscape、data.scale、data.signature、data.flipotheredge。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data.paper | string | 输出纸张大小。建议值:a3paper、a4paper、a5paper、b4paper、b5paper、letterpaper、legalpaper。默认值为 a4paper |
按需 |
| data.landscape | number | 输出纸张是否横向。1 为横向,省略或 0 为纵向;做双面打印小册子时,横向纸面通常更常见 |
按需 |
| data.scale | number | 页面缩放比例,必须大于 0。常用 0.9 到 1.0;如果担心装订后内容太靠边,可以适当调小 |
按需 |
| data.signature | number | 每个装订单元包含多少页,必须是 4 的倍数,如 4、8、16、32。省略时会把整份文件当成一个完整小册子自动排版 |
按需 |
| data.flipotheredge | number | 是否切换双面打印的翻页边。1 表示开启;如果你试打后发现背面上下颠倒,可以尝试开启这个参数 |
按需 |
signature 可以简单理解为“分几本小册子来装订”:
signature=16:每 16 页做成一个装订单元。signature=32:每 32 页做成一个装订单元。- 不传:整份 PDF 当成一个小册子,系统会自动补空白页到 4 的倍数。
示例 1:整份 PDF 直接做成一本小册子
{"action":"pdfbooklet","url":["https://xxx/xxx.pdf"],"data":{"paper":"a4paper"}}
示例 2:每 16 页做一个装订单元,适合页数较多的文档
{"action":"pdfbooklet","url":["https://xxx/xxx.pdf"],"data":{"paper":"a4paper","signature":16,"flipotheredge":1,"scale":0.95}}
示例 3:如果双面打印背面方向不对,可尝试切换翻页边
{"action":"pdfbooklet","url":["https://xxx/xxx.pdf"],"data":{"paper":"a4paper","signature":16,"flipotheredge":1}}
这个操作会按小册子阅读顺序重新排页,并在需要时自动补空白页,适合双面打印后对折装订。原文件里的超链接、书签、表单等交互信息可能不会保留。
页面处理
- 页面删除:
支持的专属参数:pageindexes(要删除的页码字符串,支持区间组合;按页码集合删除选中页,不按输入顺序重排)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 要删除的页码字符串,支持区间组合;按页码集合删除选中页,不按输入顺序重排 | 是 |
示例:
{"action":"pageremove","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3"}
会把PDF里的第一页、第三页删除;若传入 3,1 或 1,3,4-5,也是按页码集合选中后删除,不会因为输入顺序改变删除逻辑。
- 页面插入:
支持的专属参数:pageindex(插入位置)、pageinserturl(插入的PDF地址)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindex | number | 插入位置;示例为在第 1 页后插入 |
是 |
| pageinserturl | string | 待插入 PDF 的 URL | 是 |
示例:
{"action":"pageinsert","url":["https://xxx/xxx.pdf"],"pageindex":1,"pageinserturl":"https://xxx/xxx.pdf"}
会在PDF的第一页后面插入 pageinserturl 这个地址的PDF。
- 页面提取:
支持的专属参数:pageindexes(要提取的页码字符串,支持区间组合、乱序和列表/区间混合;结果按给定顺序输出)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 要提取的页码字符串,支持区间组合、乱序和列表/区间混合;结果按给定顺序输出 | 是 |
示例:
{"action":"pageextract","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3"}
会把PDF里的第一页、第三页提取出来作为一个PDF文件;也支持如 3,1,2,5-6 这样的页序写法。
- 页面重排:
支持的专属参数:pageindexes(最终页序,支持乱序、范围和列表/区间混合)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 最终页序,支持乱序、范围和列表/区间混合 | 是 |
示例:
{"action":"pageorder","url":["https://xxx/xxx.pdf"],"pageindexes":"3,1,2,5-6"}
会按给定顺序重新生成一个PDF文件。
- 页面倒序:
专属参数:无。
示例:
{"action":"pagereverse","url":["https://xxx/xxx.pdf"]}
会把PDF所有页面整体倒序输出。
- 页面复制:
支持的专属参数:pageindexes(可选;不传则每页复制一遍,传则按原PDF页序在原位复制指定页,支持区间组合)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 可选;不传则每页复制一遍,传则按原PDF页序在原位复制指定页,支持区间组合 | 否 |
示例:
{"action":"pageduplicate","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3,5-6"}
会在原页面后面插入对应页面副本;若传入 3,1,仍按原PDF页序在第1页、第3页后插入副本。
- 空白页插入:
支持的专属参数:pageindex(插入位置,0表示插到第一页前)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindex | number | 插入位置;0 表示插到第一页前 |
是 |
示例:
{"action":"blankpageinsert","url":["https://xxx/xxx.pdf"],"pageindex":2}
会在第2页后插入1个同尺寸空白页。
- 自动删除空白页:
专属参数:无。
示例:
{"action":"removeblankpages","url":["https://xxx/xxx.pdf"]}
会自动识别接近纯白的页面并删除,适合扫描件里的空白隔页清理。
- 页面旋转:
支持的专属参数:pagerotateangle(旋转角度)、pageindexes(可选,按原PDF页序筛选指定页面)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pagerotateangle | number | 旋转角度,如 90 |
是 |
| pageindexes | string | 可选;仅按原PDF页序筛选并旋转指定页面,支持区间组合 | 否 |
示例:
{"action":"pagerotate","url":["https://xxx/xxx.pdf"],"pagerotateangle":90,"pageindexes":"2,4-6"}
会把PDF整本或指定页面按给定角度旋转;若传入 3,1,会旋转第1页和第3页,但不会重排页面。
- PDF裁边:
支持的专属参数:pageindexes、data.left、data.right、data.top、data.bottom。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 需要裁边的页码范围,支持区间组合;按原PDF页序处理选中页 | 按需 |
| data.left | number | 左边裁剪量 | 按需 |
| data.right | number | 右边裁剪量 | 按需 |
| data.top | number | 上边裁剪量 | 按需 |
| data.bottom | number | 下边裁剪量 | 按需 |
示例:
{"action":"pdfcrop","url":["https://xxx/xxx.pdf"],"pageindexes":"2-10","data":{"left":18,"right":18,"top":24,"bottom":24}}
会按统一边距修改选中页面的CropBox,并输出新的pdfurl。pageindexes 仅用于筛选要裁边的页面,不会因为输入顺序而重排页面。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.pdfurl | string | 裁边后 PDF 地址 |
| result.count | number | 裁边后 PDF 总页数 |
| result.data | object | 裁边后整份 PDF 的页面信息;结构与 pageinfo 返回的 result.data 一致 |
返回结果示例:
{"result":{"status":"done","count":12,"pdfurl":"https://file.duhuitech.com/o/xxx/crop.pdf","data":{"uniform":true,"pages":[{"page":1,"width":559.28,"height":805.89,"orientation":"portrait"}]}}}
- PDF页数查询:
专属参数:无。
示例:
{"action":"pagecountinfo","url":["https://xxx/xxx.pdf"]}
会只查询PDF页数。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.count | number | PDF 总页数 |
返回结果示例:
{"result":{"status":"done","count":12}}
- PDF页面信息:
支持的专属参数:pageindexes(可选;不传返回全部页面,传则按原PDF页序返回指定页)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 可选;不传返回全部页面,传则按原PDF页序返回指定页 | 否 |
示例:
{"action":"pageinfo","url":["https://xxx/xxx.pdf"],"pageindexes":"1,3-4"}
会返回每一页的宽高和横竖版信息;若传入 3,1,返回结果仍按第1页、第3页的原PDF页序排列。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.count | number | 返回的页面条数;不传 pageindexes 时等于 PDF 总页数 |
| result.data.uniform | boolean | 返回页面尺寸是否全部一致 |
| result.data.pages | array | 页面信息数组,按原 PDF 页序返回 |
| result.data.pages[].page | number | 页码,从 1 开始 |
| result.data.pages[].width | number | 页面宽度,单位 pt |
| result.data.pages[].height | number | 页面高度,单位 pt |
| result.data.pages[].orientation | string | 页面方向:portrait、landscape 或 square |
返回结果示例:
{"result":{"status":"done","count":3,"data":{"uniform":false,"pages":[{"page":1,"width":595.28,"height":841.89,"orientation":"portrait"},{"page":3,"width":841.89,"height":595.28,"orientation":"landscape"},{"page":4,"width":595.28,"height":595.28,"orientation":"square"}]}}}
内容提取与结构
- 提取图片:
专属参数:无。
示例:
{"action":"extractimg","url":["https://xxx/xxx.pdf"]}
会把PDF里的图片提取出来。
pdffilename 不支持;导出的图片文件会按 1.png、2.png 这类顺序命名。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.imageurls | string数组 | 提取出的图片地址数组,按输出顺序返回 |
| result.count | number | 提取出的图片数量 |
返回结果示例:
{"result":{"status":"done","count":2,"imageurls":["https://file.duhuitech.com/o/xxx/1.png","https://file.duhuitech.com/o/xxx/2.png"]}}
- PDF文本提取:
支持的专属参数:pageindexes、outfilename、data.textwithformat、data.textperpage。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| pageindexes | string | 需要提取文字的页码范围,支持区间组合、乱序和列表/区间混合;会先按给定页序筛页,再提取文字 | 按需 |
| outfilename | string | 输出文件名;默认随机 | 按需 |
| data.textwithformat | number | 是否尽量保留排版信息;1 表示保留 |
按需 |
| data.textperpage | number | 是否按页拆分输出;1 表示每页单独输出并打包 |
按需 |
示例:
{"action":"extracttext","url":["https://xxx/xxx.pdf"],"pageindexes":"1-3","outfilename":"chapter1","data":{"textwithformat":1,"textperpage":1}}
会提取PDF文字内容;默认输出一个txt文件,textperpage 为1时输出按筛选后页序分拆的zip文件。
pdffilename 不适用,请使用 outfilename 控制输出文件名前缀。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.fileurl | string | 提取结果文件地址;可能是 txt,也可能是按页拆分后的 zip |
| result.count | number | 实际提取的页数;不传 pageindexes 时等于 PDF 总页数 |
| result.filesize | number | 输出文件大小 |
返回结果示例:
{"result":{"status":"done","count":3,"filesize":2048,"fileurl":"https://file.duhuitech.com/o/xxx/chapter1.zip"}}
- PDF元数据读取/修改:
支持的专属参数:meta.title、meta.author、meta.subject、meta.keywords、meta.creator、meta.producer。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| meta.title | string | PDF 标题 | 按需 |
| meta.author | string | PDF 作者 | 按需 |
| meta.subject | string | PDF 主题 | 按需 |
| meta.keywords | string | PDF 关键词 | 按需 |
| meta.creator | string | 生成工具 | 按需 |
| meta.producer | string | 生产程序 | 按需 |
示例:
{"action":"pdfmeta","url":["https://xxx/xxx.pdf"],"meta":{"title":"Quarterly Report","author":"Duhui"}}
不传 meta 时会读取当前PDF的常用元数据;传 meta 时会更新对应字段并返回新的pdfurl和更新后的data。
读取模式下 pdffilename 不适用;写入模式下支持 pdffilename。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.data | object | 元数据对象 |
| result.data.title | string | 标题,存在时返回 |
| result.data.author | string | 作者,存在时返回 |
| result.data.subject | string | 主题,存在时返回 |
| result.data.keywords | string | 关键词,存在时返回 |
| result.data.creator | string | 生成工具,存在时返回 |
| result.data.producer | string | 生产程序,存在时返回 |
| result.data.creationdate | string | 创建时间,存在时返回 |
| result.data.moddate | string | 修改时间,存在时返回 |
| result.data.tagged | string | 是否带标签,存在时返回 |
| result.data.encrypted | string | 是否加密,存在时返回 |
返回结果示例(读取):
{"result":{"status":"done","count":12,"data":{"title":"Quarterly Report","author":"Duhui","creator":"Word","producer":"Skia/PDF m123"}}}
更新模式下,返回结果会额外包含 result.pdfurl。
- PDF目录导出:
专属参数:无。
示例:
{"action":"outlineexport","url":["https://xxx/xxx.pdf"]}
会读取PDF目录书签。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.count | number | PDF 总页数 |
| result.data.named_dests | object | 命名目标映射 |
| result.data.outline | array | 目录树数组 |
| result.data.outline[].title | string | 目录标题 |
| result.data.outline[].dest.page_index | number | 目标页索引,从 0 开始 |
| result.data.outline[].dest.dest | array | 目标定位参数,如 ["/Fit"] |
| result.data.outline[].kids | array | 子目录数组;没有子目录时可省略 |
目录节点还可能包含 dest_name、color、flags、count、is_open 等可选字段。
返回结果示例:
{"result":{"status":"done","count":12,"data":{"named_dests":{},"outline":[{"title":"Chapter 1","dest":{"page_index":0,"dest":["/Fit"]},"kids":[{"title":"Section 1.1","dest":{"page_index":1,"dest":["/Fit"]}}]}]}}}
- PDF目录导入:
支持的专属参数:data(目录 JSON 对象,建议先调用 outlineexport 获取后原样传回)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| data | JSON对象 | 目录 JSON 对象;建议先调用 outlineexport 获取后原样传回 |
是 |
示例:
{"action":"outlineimport","url":["https://xxx/xxx.pdf"],"data":{"named_dests":{},"outline":[{"title":"Chapter 1","dest":{"page_index":0,"dest":["/Fit"]}}]}}
会把目录JSON写回PDF,并输出新的pdfurl。data 顶层应包含 named_dests 和 outline;其中 page_index 从 0 开始计数。
安全与权限
- 文件加密:
支持的专属参数:userpassword、ownerpassword、pdfrestriction。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| userpassword | string | 用户密码;和 ownerpassword 至少传一个 |
条件必传 |
| ownerpassword | string | 所有者密码;和 userpassword 至少传一个 |
条件必传 |
| pdfrestriction | string | PDF 权限限制编码,如 110 |
按需 |
示例:
{"action":"encrypt","url":["https://xxx/xxx.pdf"],"userpassword":"YOUR_PASSWORD","ownerpassword":"YOUR_PASSWORD","pdfrestriction":"110"}
userpassword 和 ownerpassword 至少传一个。该操作会给PDF加密码和权限限制。
- 文件解密(文件加密转换接口中已有):
支持的专属参数:password(解密密码,可以为空)。
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| password | string | 解密密码;如果原文件无密码可传空字符串 | 按需 |
示例:
{"action":"decrypt","url":["https://xxx/xxx.pdf"],"password":""}
会把PDF解密。
- 文件是否加密:
专属参数:无。
示例:
{"action":"checkencrypt","url":["https://xxx/xxx.pdf"]}
会检查PDF是否加密。
pdffilename 不适用。
返回结果重点字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| result.data.encrypted | boolean | true 表示已加密,false 表示未加密 |
返回结果示例:
{"result":{"status":"done","data":{"encrypted":true}}}
通用请求参数BODY(JSON):
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| action | string | 操作类型,取值见上方各 action 小节 | 是 |
| url | string数组 | 待处理的PDF URL数组,支持http(s)、ftp;每个action对url数量和含义的要求见对应 action 小节 | 是 |
| pdffilename | string | 生成输出文件的文件名,默认随机;是否支持及具体含义见对应 action 小节 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,详细见 回调URL | 否 |
其余参数均为 action 专属参数,见对应 action 小节。
请求示例:
v2域名:
https://ap-shanghai.cloudmarket-apigw.com/service-gsefnc5p/v1/pdfaction
v1域名:
https://service-gsefnc5p-1256652084.sh.apigw.tencentcs.com/release/v1/pdfaction
传入的Body为JSON格式,见上方详细操作。
必须签名才能调用成功,签名见腾讯签名规则:
返回数据结构:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| token | string | 是 | 用于查询结果接口 |
异步任务完成后的通用说明:
- 所有 action 都支持
callbackurl。 - 大多数生成 PDF 的 action 都支持
pdffilename;任务完成后,可在 查询结果 或回调结果里看到result.pdfurl、result.count,通常还会返回result.filesize。 - 特殊 action 的最终返回字段见对应 action 小节,例如:
split返回result.pdfurls,extractimg返回result.imageurls,extracttext返回result.fileurl,pagecountinfo、pageinfo、outlineexport、checkencrypt等返回结构化数据。
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
查询结果
请求参数:
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| token | string | 调用转换接口拿到的token | 是 |
请求示例:
https://api.duhuitech.com/q?token=YOUR_TOKEN
无需签名,无调用次数限制
由于转换需要时间,文件越大页数越多,转换越久,故需要轮询查询接口来获得结果。查询频率可以是1s一次,也可以更长一些。 查询后先看status,如果是Done或Failed,则转换结束,停止轮询。如果是Doing或Pending,则继续轮询。
返回数据结构:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| token | string | 是 | 请求的token |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 含义 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|---|
| status | 状态 | string | 是 | Pending:还未开始 Doing:正在转换 Done:转换成功 Failed:转换失败 |
| progress | 进度 | number | 否(status为Doing时返回) | 范围:0.00 - 1.00, 比如0.88表示88% |
| pdfurl | pdf文件地址 | string | 否(status为Done时返回) | 转换出来的PDF地址,http和https都支持 |
| count | 总页数 | integer | 否(status为Done时返回) | PDF页面总数 |
| filesize | 文件大小 | integer | 否(status为Done时返回) | 输出文件大小 |
| reason | 失败原因 | string | 否(status为Failed时可能返回) | 转换失败的原因 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"token":"YOUR_CREDENTIAL",
"result":
{
"progress":0.02,
"status":"Doing"
}
}
{
"code":10000,
"msg":"",
"token":"YOUR_CREDENTIAL",
"result":
{
"status":"Done",
"pdfurl":"https://file.duhuitech.com/o/xxx/xxx.pdf",
"count":10,
"filesize":17747
}
}
返回示例(失败状态):
{
"code":40000,
"msg":"No such token"
}
备注:
- 文件url方式支持文件大小 1500M。
- 如果图片开启OCR,最大支持的图片大小长边不超过8000像素。
- 最大转换时长:1小时,超过时间未完成则自动失败。
- 转换完成后,下载链接有效时间:1小时。
上述最后2项有延长需求请联系客服:

回调URL:
用途: 客户可以自行部署服务器,系统转换结束后会调用客户提供的回调URL,直接发送转换结果,从而无需再轮询查询结果。
当设置了回调URL,转换结束后(无论成功失败),系统都会尝试调用该URL,具体如下:
以POST方式调用该URL,Header头中Content-Type: application/json
Body为JSON格式,内容和查询结果的结果相同,例如:
{
"code":10000,
"msg":"",
"token":"YOUR_CREDENTIAL",
"result":
{
"status":"Done",
"pdfurl":"https://file.duhuitech.com/o/xxx/xxx.pdf",
"count":10,
"filesize":17747
}
}
服务端收到该POST后需在10秒内返回HTTP STATUS CODE 200,视为调用成功,否则系统认为回调失败,会再次尝试。规则如下:
系统共计最多会调用3次回调URL,如果第一次失败,则等待3秒后尝试第二次,如果第二次失败,则等待5秒后尝试第三次,如果第三次失败,则不再尝试。
回调URL超时时间10秒。
关于下载转换后的文件需支持302跳转
接口返回的下载地址(如 fileurl / fileurls)会经 HTTP 302 跳转到实际文件。浏览器会自动跟随。
以下方式默认会跟随跳转,一般无需额外配置:
wget、Python requests / urllib、Node.js axios / got / fetch、Java OkHttp / HttpURLConnection、Go net/http、C# HttpClient、PHP file_get_contents、Objective-C / Swift NSURLSession / URLSession(含 Alamofire)
少数默认不跟随,需手动打开:
curl:加-L,如curl -L -o out.bin "下载地址"- Java
java.net.http.HttpClient:设置.followRedirects(HttpClient.Redirect.NORMAL) - PHP
curl扩展:设置CURLOPT_FOLLOWLOCATION => true
若只拿到 302 响应、本地没有文件内容,多半是未跟随跳转,按上面说明打开对应选项即可。
错误码表:
返回的code如果是10000,代表成功,其余是失败
| JSON里返回的code | 错误信息 |
|---|---|
| 40000 | 通用错误 |
| 40001 | 参数错误 |
| 40002 | 参数不符合规范 |
附录:腾讯签名方式
腾讯云市场接口分V1和V2
新老用户拿到的 SecretID 不同,老用户SecretID以AKID开头的,请使用V1对应签名。新用户使用V2对应签名。 新购用户都是V2签名。
V2签名: 参考链接:https://cloud.tencent.com/document/product/306/57449
建议使用腾讯提供的各种语言的SDK,例如Java: https://cloud.tencent.com/document/product/306/57449#Java
V1签名: 参考链接:https://cloud.tencent.com/document/product/628/11782
建议使用腾讯提供的各种语言的SDK,例如Java: https://cloud.tencent.com/document/product/628/42184
附录:旧接口
文档转换GET
将文档下载地址url转换为PDF,type是源文档的type,比如要把docx转为pdf,type就是docx
请求参数:
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| url | string | 文件url,支持http(s),ftp开头,需要URL Encoding | 是 |
| type | string | 要转换的原始文件扩展名,如果不传,则取url中的扩展名,注意如果获取失败会导致转换异常或出错 | 否 |
| linearization | int | 是否需要快速web显示,默认0否,1是 | 否 |
| compress | int | 是否压缩,默认0不压缩,压缩分3档:1,2,3,1的压缩率最低,3最高 | 否 |
| excelislandscape | int | 如果是Excel文件,是否横屏,默认0否(竖屏),1是 | 否 |
| exceliscenter | int | 如果是Excel文件,是否居中,默认0否,1横竖居中,2仅横向居中,3仅纵向居中 | 否 |
| excelmargin | int | 如果是Excel文件,四边的边距,默认10px,单位是像素 | 否 |
| excelsheetindex | int | 如果是Excel文件,指定转换的Sheet索引,默认0:全部,第一个sheet就是1,以此类推 | 否 |
| excelnotshowgridlines | int | 如果是Excel文件,不显示网格线,默认0显示,1不显示 | 否 |
| exceluseprintarea | int | 如果是Excel文件,是否使用打印区域,默认0不使用,1使用,2不使用且只显示有内容的区域 | 否 |
| excelpagesize | int | 如果是Excel文件,设定页面大小,默认A4。0:A4,1:A3,2:A4,3:A5,4:B4,5:B5,6:Letter,7:Legal,8:Tabloid,9:Ledger | 否 |
| wordshowmarkup | int | 如果是Word文件,是否显示审阅标记,默认0不显示,1显示 | 否 |
| powerpointoutputtype | int | 如果是PPT文件,设定导出样式,默认幻灯片。0:幻灯片,0以上是讲义模式:1:每页一个幻灯片,2:每页二个幻灯片,3:每页三个幻灯片,4:每页四个幻灯片,5:每页六个幻灯片,6:每页九个幻灯片 | 否 |
| powerpointhandoutorder | int | 如果是PPT文件,当设置为讲义时,设定顺序,默认0水平,1垂直 | 否 |
| powerpointhandoutorientation | int | 如果是PPT文件,当设置为讲义时,输出文件的方向,默认0不改变,1横向,2纵向 | 否 |
| imageocr | int | 如果是图片文件,是否识别图中文字并且在PDF中可选可搜索文字,默认0否,1是 | 否 |
| imagedeskew | int | 如果是图片文件,是否将斜的文字矫正,默认0否,1是 | 否 |
| imageclean | int | 如果是图片文件,是否清除图像背景只显示文字,默认0否,1是 | 否 |
| ismobileurl | int | 如果type是“url”才有效,抓取的网页是否移动端显示。默认0:桌面端网页,1:移动端网页 | 否 |
| urlmargin | string | 如果type是url,生成的页面边距。输入的是URLEncoding后的字符串,按照顺序:left top right bottom。单位可以是:px,in,cm,mm。例如左上右下分别是1px,2px,3px,4px,传的字符串就是:1px%202px%203px%204px。默认值:左右0,上下各1cm | 否 |
| pagesize | int | 如果是Word,TXT,Excel,HTML,设定页面大小,此参数会覆盖excelpagesize。默认0:源文档设定值,如无则是A4,1:A3,2:A4,3:A5,4:B4,5:B5,6:Letter,7:Legal,8:Tabloid,9:Ledger | 否 |
| pageorientation | int | 如果是Word,TXT,Excel,HTML,设定页面横向还是竖向,此参数会覆盖excelislandscape。默认0不变,1横向,2 竖向 | 否 |
| userpassword | string | 生成PDF文件的User Password,用户密码加密指打开文件时需要输入的密码,默认无 | 否 |
| ownerpassword | string | 生成PDF文件的Owner Password,所有者密码加密指修改文件时需要输入的密码,默认无 | 否 |
| pdfrestriction | string | 有密码时,生成PDF文件的权限,默认无权限。格式3位,比如010,第一位代表能否打印,第二位代表能否拷贝内容,第三位代表能否编辑 | 否 |
| watermark | string | 添加水印,字符个数最大15个,需要URL Encoding | 否 |
| watermarkfontsize | int | 水印的字体大小,默认24pt | 否 |
| imagepdf | int | 生成图片PDF,默认0否,1是 | 否 |
| password | string | 源文件的密码,支持有密码的PDF,Word,PPT,Excel文件类型,默认空无密码 | 否 |
| pdffilename | string | 生成的PDF文件的文件名,默认随机 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,需要URL Encoding,详细见 回调URL | 否 |
请求示例:
v2域名:
https://ap-shanghai.cloudmarket-apigw.com/service-gsefnc5p/v1/convert?url=https%3a%2f%2fxxx%2fxxx.docx
v1域名:
https://service-gsefnc5p-1256652084.sh.apigw.tencentcs.com/release/v1/convert?url=https%3a%2f%2fxxx%2fxxx.docx
将所在url地址的docx文件转为PDF,type就是源文件的type,这个例子里就是docx
必须签名才能调用成功,签名见腾讯签名规则:
支持多种文件格式,type可传入如下格式:
| 类型 | 扩展名(type取值) | 备注 |
|---|---|---|
| PDF文件 | ||
| 微软Office文档 | doc, docx, ppt, pptx, xls, xlsx, pot, pps, ppsx, csv | |
| WPS文档 | wps, wpt, dps, dpt, et, ett | |
| 苹果iWork文档 | pages, key, numbers | |
| 开放版式文档 | ofd | |
| 电子刊物 | caj, nh, kdh | |
| 电子书 | epub, chm, mobi, azw, azw3, fb2, cbr, cbz, djvu | |
| Markdown | md | |
| SVG | svg | |
| CAD文档 | dwg, dxf, dwt, dws, dwf, dwfx, dxb, dgn, plt, cf2, cgm | |
| 3D模型 | obj, 3ds, stl, gltf, glb, fbx, dae, ifc, step, stp, iges, igs, fcstd, brep, ply | 静态预览(平面示意图,按 6 个视角展示:等轴测 / 前 / 右 / 顶 / 后 / 左,便于快速查看模型外观;非可旋转的交互式 3D) |
| Figma和Sketch文档 | fig, sketch | |
| 网页文件 | html, htm, mht, eml | |
| 图片文件 | 几乎所有格式例如png, jpg, jpeg, gif, tif, tiff, bmp, webp, ai等 | type可以统一传img,代表一切图片 |
| 文本文件 | txt, rtf, java, js, c, cpp, jsp, css, xml, properties, log, | type可以统一传txt,代表一切文本 |
| 网址网页 | url | 网址,例如:https://www.duhuitech.com |
返回数据结构:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| token | string | 是 | 用于查询结果接口 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
文档转换POST
直接将单个文档POST到服务器,大小限制10M
请求参数:
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| file | file | 要转换的文档,Content-Type使用multipart/form-data,最大10M | 是 |
| type | string | 要转换的原始文件扩展名,如果不传,则取file中的文件扩展名,注意如果获取失败会导致转换异常或出错 | 否 |
| linearization | int | 是否需要快速web显示,默认0否,1是 | 否 |
| compress | int | 是否压缩,默认0不压缩,压缩分3档:1,2,3,1的压缩率最低,3最高 | 否 |
| excelislandscape | int | 如果是Excel文件,是否横屏,默认0否(竖屏),1是 | 否 |
| exceliscenter | int | 如果是Excel文件,是否居中,默认0否,1横竖居中,2仅横向居中,3仅纵向居中 | 否 |
| excelmargin | int | 如果是Excel文件,四边的边距,默认10px,单位是像素 | 否 |
| excelsheetindex | int | 如果是Excel文件,指定转换的Sheet索引,默认0:全部,第一个sheet就是1,以此类推 | 否 |
| excelnotshowgridlines | int | 如果是Excel文件,不显示网格线,默认0显示,1不显示 | 否 |
| exceluseprintarea | int | 如果是Excel文件,是否使用打印区域,默认0不使用,1使用,2不使用且只显示有内容的区域 | 否 |
| excelpagesize | int | 如果是Excel文件,设定页面大小,默认A4。0:A4,1:A3,2:A4,3:A5,4:B4,5:B5,6:Letter,7:Legal,8:Tabloid,9:Ledger | 否 |
| wordshowmarkup | int | 如果是Word文件,是否显示审阅标记,默认0不显示,1显示 | 否 |
| powerpointoutputtype | int | 如果是PPT文件,设定导出样式,默认幻灯片。0:幻灯片,0以上是讲义模式:1:每页一个幻灯片,2:每页二个幻灯片,3:每页三个幻灯片,4:每页四个幻灯片,5:每页六个幻灯片,6:每页九个幻灯片 | 否 |
| powerpointhandoutorder | int | 如果是PPT文件,当设置为讲义时,设定顺序,默认0水平,1垂直 | 否 |
| powerpointhandoutorientation | int | 如果是PPT文件,当设置为讲义时,输出文件的方向,默认0不改变,1横向,2纵向 | 否 |
| imageocr | int | 如果是图片文件,是否识别图中文字并且在PDF中可选可搜索文字,默认0否,1是 | 否 |
| imagedeskew | int | 如果是图片文件,是否将斜的文字矫正,默认0否,1是 | 否 |
| imageclean | int | 如果是图片文件,是否清除图像背景只显示文字,默认0否,1是 | 否 |
| grayimage | int | 如果是图片文件,是否把图片变为灰度图,默认0否,1是 | 否 |
| pagesize | int | 如果是Word,TXT,Excel,HTML,设定页面大小,此参数会覆盖excelpagesize。默认0:源文档设定值,如无则是A4,1:A3,2:A4,3:A5,4:B4,5:B5,6:Letter,7:Legal,8:Tabloid,9:Ledger | 否 |
| pageorientation | int | 如果是Word,TXT,Excel,HTML,设定页面横向还是竖向,此参数会覆盖excelislandscape。默认0不变,1横向,2 竖向 | 否 |
| userpassword | string | 生成PDF文件的User Password,用户密码加密指打开文件时需要输入的密码,默认无 | 否 |
| ownerpassword | string | 生成PDF文件的Owner Password,所有者密码加密指修改文件时需要输入的密码,默认无 | 否 |
| pdfrestriction | string | 有密码时,生成PDF文件的权限,默认无权限。格式3位,比如010,第一位代表能否打印,第二位代表能否拷贝内容,第三位代表能否编辑 | 否 |
| watermark | string | 添加水印,字符个数最大15个,需要URL Encoding | 否 |
| watermarkfontsize | int | 水印的字体大小,默认24pt | 否 |
| imagepdf | int | 生成图片PDF,默认0否,1是 | 否 |
| cadlayer | int | 如果是CAD文件,是否生成Layer层,默认0否,1是 | 否 |
| cadisdisplay | int | 如果是CAD文件,是否按照Display显示,默认0不按照,1按照Display | 否 |
| cadquality | int | 如果是CAD文件,生成的文件品质,默认3。取值从1-5品质从低到高。 | 否 |
| password | string | 源文件的密码,支持有密码的PDF,Word,PPT,Excel文件类型,默认空无密码 | 否 |
| pdffilename | string | 生成的PDF文件的文件名,默认随机 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,详细见 回调URL | 否 |
请求示例:
v2域名:
https://ap-shanghai.cloudmarket-apigw.com/service-gsefnc5p/v1/convert_post
v1域名:
https://service-gsefnc5p-1256652084.sh.apigw.tencentcs.com/release/v1/convert_post
Header中的Content-Type必须是multipart/form-data
必须签名才能调用成功,签名见腾讯签名规则:
支持多种文件格式,type可传入如下格式:
| 类型 | 扩展名(type取值) | 备注 |
|---|---|---|
| PDF文件 | ||
| 微软Office文档 | doc, docx, ppt, pptx, xls, xlsx, pot, pps, ppsx, csv | |
| WPS文档 | wps, wpt, dps, dpt, et, ett | |
| 苹果iWork文档 | pages, key, numbers | |
| 开放版式文档 | ofd | |
| 电子刊物 | caj, nh, kdh | |
| 电子书 | epub, chm, mobi, azw, azw3, fb2, cbr, cbz, djvu | |
| Markdown | md | |
| SVG | svg | |
| CAD文档 | dwg, dxf, dwt, dws, dwf, dwfx, dxb, dgn, plt, cf2, cgm | |
| 3D模型 | obj, 3ds, stl, gltf, glb, fbx, dae, ifc, step, stp, iges, igs, fcstd, brep, ply | 静态预览(平面示意图,按 6 个视角展示:等轴测 / 前 / 右 / 顶 / 后 / 左,便于快速查看模型外观;非可旋转的交互式 3D) |
| Figma和Sketch文档 | fig, sketch | |
| 网页文件 | html, htm, mht, eml | |
| 图片文件 | 几乎所有格式例如png, jpg, jpeg, gif, tif, tiff, bmp, webp, ai等 | type可以统一传img,代表一切图片 |
| 文本文件 | txt, rtf, java, js, c, cpp, jsp, css, xml, properties, log, | type可以统一传txt,代表一切文本 |
返回数据结构:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| token | string | 是 | 用于查询结果接口 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
多张图片转换POST
将多张图片转换为pdf,url传入多张图片的地址,传入非图片格式无效
Header中的Content-Type传入application/json
POST Body传入JSON,格式如下:
请求参数BODY:
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| url | string数组 | 要转换的图片URL数组,支持http(s),ftp开头 | 是 |
| type | string | 固定传img | 是 |
| linearization | int | 是否需要快速web显示,默认0否,1是 | 否 |
| compress | int | 是否压缩,默认0不压缩,压缩分3档:1,2,3,1的压缩率最低,3最高 | 否 |
| ocr | int | 是否识别图中文字并且在PDF中可选可搜索文字,默认0否,1是 | 否 |
| deskew | int | 是否将斜的文字矫正,默认0否,1是 | 否 |
| clean | int | 是否清除图像背景只显示文字,默认0否,1是 | 否 |
| grayimage | int | 如果是图片文件,是否把图片变为灰度图,默认0否,1是 | 否 |
| imagesize | int | 统一每页为固定宽,默认0否,输入数字即每页宽度,最大4096。设置该值将导致pagesize失效。 | 否 |
| pagesize | int | 设定页面大小。默认0:长图保持原图大小,非长图A4,原图不满A4大小的保持原图大小。1:A3,2:A4,3:A5,4:B4,5:B5,6:Letter,7:Legal,8:Tabloid,9:Ledger | 否 |
| language | int | 如果开启OCR,识别语言选项,默认2简体中文: 1:英语 2:简体中文 3:繁体中文 4:法语 5:德语 6:意大利语 7:俄语 8:日文 9:韩文 10:西班牙语 11:葡萄牙语 12:丹麦语 13:荷兰语 14:芬兰语 15:挪威语 16:瑞典语 17:土耳其语 |
否 |
| userpassword | string | 生成PDF文件的User Password,用户密码加密指打开文件时需要输入的密码,默认无 | 否 |
| ownerpassword | string | 生成PDF文件的Owner Password,所有者密码加密指修改文件时需要输入的密码,默认无 | 否 |
| pdfrestriction | string | 有密码时,生成PDF文件的权限,默认无权限。格式3位,比如010,第一位代表能否打印,第二位代表能否拷贝内容,第三位代表能否编辑 | 否 |
| watermark | string | 添加水印,字符个数最大15个 | 否 |
| watermarkfontsize | int | 水印的字体大小,默认24pt | 否 |
| pdffilename | string | 生成的PDF文件的文件名,默认随机 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,详细见 回调URL | 否 |
请求示例:
v2域名:
https://ap-shanghai.cloudmarket-apigw.com/service-gsefnc5p/v1/convert
v1域名:
https://service-gsefnc5p-1256652084.sh.apigw.tencentcs.com/release/v1/convert
传入的Body为JSON格式,如下:
{ "url": ["http://xxx/xxx1.png", "http://xxx/xxx2.png"], "type": "img" }
必须签名才能调用成功,签名见腾讯签名规则:
例如要把多张图片OCR,变为文字可选的PDF,并且将斜的文字矫正,将图片背景去除,那么JSON就是:
{ "url": ["http://xxx/xxx1.png", "http://xxx/xxx2.png"], "type": "img", "ocr": 1, "deskew": 1, "clean": 1}
支持几乎所有图片格式
返回数据结构:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| token | string | 是 | 用于查询结果接口 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
附录:废弃接口
合并PDF文件POST(废弃,用文件操作代替)
将多个PDF文件合并为一个PDF,url传入多个PDF文件的地址
Header中的Content-Type传入application/json
POST Body传入JSON,格式如下:
请求参数BODY:
| 参数 | 类型 | 备注 | 是否必须发送 |
|---|---|---|---|
| url | string数组 | 要合并的PDF URL数组,支持http(s),ftp开头 | 是 |
| linearization | int | 是否需要快速web显示,默认0否,1是 | 否 |
| compress | int | 是否压缩,默认0不压缩,压缩分3档:1,2,3,1的压缩率最低,3最高 | 否 |
| userpassword | string | 生成PDF文件的User Password,用户密码加密指打开文件时需要输入的密码,默认无 | 否 |
| ownerpassword | string | 生成PDF文件的Owner Password,所有者密码加密指修改文件时需要输入的密码,默认无 | 否 |
| pdfrestriction | string | 有密码时,生成PDF文件的权限,默认无权限。格式3位,比如010,第一位代表能否打印,第二位代表能否拷贝内容,第三位代表能否编辑 | 否 |
| watermark | string | 添加水印,字符个数最大15个 | 否 |
| watermarkfontsize | int | 水印的字体大小,默认24pt | 否 |
| pdffilename | string | 生成的PDF文件的文件名,默认随机 | 否 |
| callbackurl | string | 回调URL,转换结束后,会回调该URL,详细见 回调URL | 否 |
请求示例:
v2域名:
https://ap-shanghai.cloudmarket-apigw.com/service-gsefnc5p/v1/merge
v1域名:
https://service-gsefnc5p-1256652084.sh.apigw.tencentcs.com/release/v1/merge
传入的Body为JSON格式,如下:
{ "url": ["http://xxx/xxx1.png", "http://xxx/xxx2.png"]}
必须签名才能调用成功,签名见腾讯签名规则:
例如要把多个PDF合并为一个,并且开启快速web显示,加上水印,那么JSON就是:
{ "url": ["http://xxx/xxx1.png","http://xxx/xxx2.png"], "linearization":1, "watermark":"测试水印"}
返回数据结构:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| code | number | 是 | 10000:请求成功 |
| msg | string | 是 | |
| result | Dictionary | 否 | 成功后返回 |
result:
| 名称 | 类型 | 是否必须返回 | 备注 |
|---|---|---|---|
| token | string | 是 | 用于查询结果接口 |
返回示例(成功状态):
{
"code":10000,
"msg":"",
"result":{"token":"YOUR_CREDENTIAL"}
}
返回示例(失败状态):
{
"code":40001,
"msg":"ParmNotRight"
}
