docPreview.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. const COS = require('../lib/cos-wx-sdk-v5');
  2. var wxfs = wx.getFileSystemManager();
  3. const config = require('../config');
  4. const { cos, requestCallback } = require('../tools');
  5. const docPreviewDao = {
  6. '查询文档预览开通状态 describeDocProcessService': describeDocProcessService,
  7. '文档转html同步请求 getDocHtmlPreviewUrl': getDocHtmlPreviewUrl,
  8. '文档转码同步请求 getDocPreview': getDocPreview,
  9. '提交文档转码任务 createDocProcessJob': createDocProcessJob,
  10. '查询指定文档转码任务 describeDocProcessJob': describeDocProcessJob,
  11. '拉取符合条件的文档转码任务 describeDocProcessJobList': describeDocProcessJobList,
  12. '查询文档转码队列 describeDocProcessQueue': describeDocProcessQueue,
  13. '更新文档转码队列 updateProcessQueue': updateProcessQueue,
  14. };
  15. function describeDocProcessService() {
  16. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  17. const key = `docbucket`; //
  18. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  19. const url = `https://${host}/${key}`;
  20. cos.request(
  21. {
  22. Method: 'GET', // 固定值,必须
  23. Key: key, // 必须
  24. Url: url, // 请求的url,必须
  25. Query: {
  26. // 地域信息,以“,”分隔字符串,支持 All、ap-shanghai、ap-beijing;是否必传:否
  27. regions: '',
  28. // 存储桶名称,以“,”分隔,支持多个存储桶,精确搜索;是否必传:否
  29. bucketNames: '',
  30. // 存储桶名称前缀,前缀搜索;是否必传:否
  31. bucketName: '',
  32. // 第几页;是否必传:否
  33. pageNumber: '',
  34. // 每页个数;是否必传:否
  35. pageSize: '',
  36. },
  37. },
  38. function (err, data) {
  39. if (err) {
  40. // 处理请求失败
  41. console.log(err);
  42. } else {
  43. // 处理请求成功
  44. console.log(data.Response);
  45. }
  46. }
  47. );
  48. }
  49. function getDocHtmlPreviewUrl() {
  50. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  51. const ObjectKey = 'test.docx';
  52. const key = `${ObjectKey}`; // ObjectKey:{ObjectKey};
  53. const host = `${config.Bucket}.cos.${config.Region}.myqcloud.com`;
  54. const url = `https://${host}/${key}`;
  55. cos.request(
  56. {
  57. Method: 'GET', // 固定值,必须
  58. Key: key, // 必须
  59. Url: url, // 请求的url,必须
  60. Query: {
  61. // 数据万象处理能力,文档 HTML 预览固定为 doc-preview;是否必传:是
  62. 'ci-process': 'doc-preview',
  63. // 转换输出目标文件类型,文档 HTML 预览固定为 html(需为小写字母);是否必传:是
  64. dstType: 'html',
  65. // 是否获取预览链接。填入值为1会返回预览链接和Token信息;填入值为2只返回Token信息;不传会直接预览;是否必传:否
  66. weboffice_url: 1,
  67. // 指定目标文件类型,支持的文件类型请见下方;是否必传:否
  68. srcType: '',
  69. // 对象下载签名,如果预览的对象为私有读时,需要传入签名,详情请参见 请求签名 文档注意:需要进行 urlencode;是否必传:否
  70. sign: '',
  71. // 是否可复制。默认为可复制,填入值为1;不可复制,填入值为0;是否必传:否
  72. copyable: '',
  73. // 自定义配置参数,json结构,需要经过 URL 安全 的 Base64 编码,默认配置为:{ commonOptions: { isShowTopArea: true, isShowHeader: true, language: "zh" }},支持的配置参考 自定义配置项说明。htmlParams支持的特殊配置:语言切换,通过 commonOptions 的 language 参数指定预览语言,支持"zh"、"en“,默认为"zh"。;是否必传:否
  74. htmlParams: '',
  75. // 水印文字,需要经过 URL 安全 的 Base64 编码,默认为空;是否必传:否
  76. htmlwaterword: '',
  77. // 水印 RGBA(颜色和透明度),需要经过 URL 安全 的 Base64 编码,默认为:rgba(192,192,192,0.6);是否必传:否
  78. htmlfillstyle: '',
  79. // 水印文字样式,需要经过 URL 安全 的 Base64 编码,默认为:bold 20px Serif;是否必传:否
  80. htmlfront: '',
  81. // 水印文字旋转角度,0 - 360,默认315度;是否必传:否
  82. htmlrotate: '',
  83. // 水印文字水平间距,单位 px,默认为50;是否必传:否
  84. htmlhorizontal: '',
  85. // 水印文字垂直间距,单位 px,默认为100;是否必传:否
  86. htmlvertical: '',
  87. },
  88. },
  89. function (err, data) {
  90. if (err) {
  91. // 处理请求失败
  92. console.log(err);
  93. } else {
  94. // 处理请求成功
  95. console.log(data.Response);
  96. }
  97. }
  98. );
  99. }
  100. function getDocPreview() {
  101. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  102. const ObjectKey = 'test.docx';
  103. const key = `${ObjectKey}`; // ObjectKey:{ObjectKey};
  104. const host = `${config.Bucket}.cos.${config.Region}.myqcloud.com`;
  105. const url = `https://${host}/${key}`;
  106. cos.request(
  107. {
  108. Method: 'GET', // 固定值,必须
  109. Key: key, // 必须
  110. Url: url, // 请求的url,必须
  111. Query: {
  112. // 数据万象处理能力,文档预览固定为 doc-preview;是否必传:是
  113. 'ci-process': 'doc-preview',
  114. // 源数据的后缀类型,当前文档转换根据 COS 对象的后缀名来确定源数据类型。当 COS 对象没有后缀名时,可以设置该值;是否必传:否
  115. srcType: '',
  116. // 需转换的文档页码,默认从1开始计数;表格文件中 page 表示转换的第 X 个 sheet 的第 X 张图;是否必传:否
  117. page: 0,
  118. // 转换输出目标文件类型:png,转成 png 格式的图片文件jpg,转成 jpg 格式的图片文件pdf,转成 pdf 格式文件。 无法选择页码,page 参数不生效如果传入的格式未能识别,默认使用 jpg 格式;是否必传:否
  119. dstType: 'jpg',
  120. // Office 文档的打开密码,如果需要转换有密码的文档,请设置该字段;是否必传:否
  121. password: '',
  122. // 是否隐藏批注和应用修订,默认为00:隐藏批注,应用修订1:显示批注和修订;是否必传:否
  123. comment: 0,
  124. // 表格文件参数,转换第 X 个表,默认为1;是否必传:否
  125. sheet: 0,
  126. // 表格文件转换纸张方向,0代表垂直方向,非0代表水平方向,默认为0;是否必传:否
  127. excelPaperDirection: 0,
  128. // 设置纸张(画布)大小,对应信息为: 0 → A4 、 1 → A2 、 2 → A0 ,默认 A4 纸张 (需配合 excelRow 或 excelCol 一起使用);是否必传:否
  129. excelPaperSize: 0,
  130. // 转换后的图片处理参数,支持 基础图片处理 所有处理参数,多个处理参数可通过 管道操作符 分隔,从而实现在一次访问中按顺序对图片进行不同处理;是否必传:否
  131. ImageParams: '',
  132. // 生成预览图的图片质量,取值范围为 [1, 100],默认值100。 例如取值为100,代表生成图片质量为100%;是否必传:否
  133. quality: 0,
  134. // 预览图片的缩放参数,取值范围为 [10, 200], 默认值100。 例如取值为200,代表图片缩放比例为200% 即放大两倍;是否必传:否
  135. scale: 0,
  136. // 按指定 dpi 渲染图片,该参数与 scale 共同作用,取值范围 96-600 ,默认值为 96 。转码后的图片单边宽度需小于65500像素;是否必传:否
  137. imageDpi: 0,
  138. },
  139. },
  140. function (err, data) {
  141. if (err) {
  142. // 处理请求失败
  143. console.log(err);
  144. } else {
  145. // 处理请求成功
  146. console.log(data.Response);
  147. }
  148. }
  149. );
  150. }
  151. function createDocProcessJob() {
  152. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  153. const key = `doc_jobs`; //
  154. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  155. const url = `https://${host}/${key}`;
  156. const body = COS.util.json2xml({
  157. Request: {
  158. // 创建任务的 Tag,目前仅支持:DocProcess;是否必传:是
  159. Tag: 'DocProcess',
  160. // 待操作的文件对象;是否必传:是
  161. Input: {
  162. // 文件在 COS 上的文件路径,Bucket 由 Host 指定;是否必传:是
  163. Object: 'test.docx',
  164. },
  165. // 操作规则;是否必传:是
  166. Operation: {
  167. // 当 Tag 为 DocProcess 时有效,指定该任务的参数;是否必传:否
  168. DocProcess: {
  169. // 源数据的后缀类型,当前文档转换根据 cos 对象的后缀名来确定源数据类型,当 cos 对象没有后缀名时,可以设置该值;是否必传:否
  170. SrcType: '',
  171. // 转换输出目标文件类型:jpg,转成 jpg 格式的图片文件;如果传入的格式未能识别,默认使用 jpg 格式png,转成 png 格式的图片文件pdf,转成 pdf 格式文件(暂不支持指定页数);是否必传:否
  172. TgtType: '',
  173. // 从第 X 页开始转换;在表格文件中,一张表可能分割为多页转换,生成多张图片。StartPage 表示从指定 SheetId 的第 X 页开始转换。默认为1;是否必传:否
  174. StartPage: 1,
  175. // 转换至第 X 页;在表格文件中,一张表可能分割为多页转换,生成多张图片。EndPage 表示转换至指定 SheetId 的第 X 页。默认为-1,即转换全部页;是否必传:否
  176. EndPage: 2,
  177. // 表格文件参数,转换第 X 个表,默认为0;设置 SheetId 为0,即转换文档中全部表;是否必传:否
  178. SheetId: 0,
  179. // 表格文件转换纸张方向,0代表垂直方向,非0代表水平方向,默认为0;是否必传:否
  180. PaperDirection: 0,
  181. // 设置纸张(画布)大小,对应信息为: 0 → A4 、 1 → A2 、 2 → A0 ,默认 A4 纸张;是否必传:否
  182. PaperSize: 0,
  183. // 转换后的图片处理参数,支持 基础图片处理 所有处理参数,多个处理参数可通过 管道操作符 分隔,从而实现在一次访问中按顺序对图片进行不同处理;是否必传:否
  184. ImageParams: '',
  185. // 生成预览图的图片质量,取值范围 [1-100],默认值100。 例:值为100,代表生成图片质量为100%;是否必传:否
  186. Quality: 0,
  187. // 预览图片的缩放参数,取值范围[10-200], 默认值100。 例:值为200,代表图片缩放比例为200% 即放大两倍;是否必传:否
  188. Zoom: 100,
  189. // 按指定 dpi 渲染图片,该参数与 Zoom 共同作用,取值范围 96-600 ,默认值为 96 。转码后的图片单边宽度需小于65500像素;是否必传:否
  190. ImageDpi: 96,
  191. // 是否转换成单张长图,设置为 1 时,最多仅支持将 20 标准页面合成单张长图,超过可能会报错,分页范围可以通过 StartPage、EndPage 控制。默认值为 0 ,按页导出图片,TgtType="png"/"jpg" 时生效;是否必传:否
  192. PicPagination: 0,
  193. },
  194. // 结果输出地址;是否必传:是
  195. Output: {
  196. // 存储桶的地域;是否必传:是
  197. Region: config.Region,
  198. // 存储结果的存储桶;是否必传:是
  199. Bucket: config.Bucket,
  200. // 输出文件路径。非表格文件输出文件名需包含 ${Number} 或 ${Page} 参数。多个输出文件,${Number} 表示序号从1开始,${Page} 表示序号与预览页码一致。${Number} 表示多个输出文件,序号从1开始,例如输入 abc_${Number}.jpg,预览某文件5 - 6页,则输出文件名为 abc_1.jpg,abc_2.jpg${Page} 表示多个输出文件,序号与预览页码一致,例如输入 abc_${Page}.jpg,预览某文件5-6页,则输出文件名为 abc_5.jpg,abc_6.jpg表格文件输出路径需包含 ${SheetID} 占位符,输出文件名必须包含 ${Number} 参数。例如 /${SheetID}/abc_${Number}.jpg,先根据 excel 转换的表格数,生成对应数量的文件夹,再在对应的文件夹下,生成对应数量的图片文件;是否必传:是
  201. Object: '${Number}',
  202. },
  203. },
  204. // 任务所在的队列 ID,开通预览服务后自动生成,请使用 查询队列 获取或前往 万象控制台 在存储桶中查询 ;是否必传:否
  205. QueueId: '',
  206. },
  207. });
  208. cos.request(
  209. {
  210. Method: 'POST', // 固定值,必须
  211. Key: key, // 必须
  212. Url: url, // 请求的url,必须
  213. Body: body, // 请求体参数,必须
  214. ContentType: 'application/xml', // 固定值,必须
  215. },
  216. function (err, data) {
  217. if (err) {
  218. // 处理请求失败
  219. console.log(err);
  220. } else {
  221. // 处理请求成功
  222. console.log(data.Response);
  223. }
  224. }
  225. );
  226. }
  227. function describeDocProcessJob() {
  228. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  229. const jobId = 'xxx';
  230. const key = `doc_jobs/${jobId}`; // jobId:{jobId};
  231. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  232. const url = `https://${host}/${key}`;
  233. cos.request(
  234. {
  235. Method: 'GET', // 固定值,必须
  236. Key: key, // 必须
  237. Url: url, // 请求的url,必须
  238. },
  239. function (err, data) {
  240. if (err) {
  241. // 处理请求失败
  242. console.log(err);
  243. } else {
  244. // 处理请求成功
  245. console.log(data.Response);
  246. }
  247. }
  248. );
  249. }
  250. function describeDocProcessJobList() {
  251. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  252. const key = `doc_jobs`; //
  253. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  254. const url = `https://${host}/${key}`;
  255. cos.request(
  256. {
  257. Method: 'GET', // 固定值,必须
  258. Key: key, // 必须
  259. Url: url, // 请求的url,必须
  260. Query: {
  261. // 任务的 Tag:DocProcess;是否必传:是
  262. tag: 'DocProcess',
  263. // 拉取该队列 ID 下的任务,可在任务响应内容或控制台中获取;是否必传:否
  264. queueId: '',
  265. // Desc 或者 Asc。默认为 Desc;是否必传:否
  266. orderByTime: 'Desc',
  267. // 请求的上下文,用于翻页。上次返回的值;是否必传:否
  268. nextToken: '',
  269. // 拉取该状态的任务,以,分割,支持多状态:All、Submitted、Running、Success、Failed、Pause、Cancel。默认为 All;是否必传:否
  270. states: 'Success',
  271. // 拉取创建时间大于等于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z;是否必传:否
  272. // startCreationTime: "",
  273. // 拉取创建时间小于等于该时间的任务。格式为:%Y-%m-%dT%H:%m:%S%z;是否必传:否
  274. // endCreationTime: "",
  275. },
  276. },
  277. function (err, data) {
  278. if (err) {
  279. // 处理请求失败
  280. console.log(err);
  281. } else {
  282. // 处理请求成功
  283. console.log(data.Response);
  284. }
  285. }
  286. );
  287. }
  288. function describeDocProcessQueue() {
  289. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  290. const key = `docqueue`; //
  291. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  292. const url = `https://${host}/${key}`;
  293. cos.request(
  294. {
  295. Method: 'GET', // 固定值,必须
  296. Key: key, // 必须
  297. Url: url, // 请求的url,必须
  298. Query: {
  299. // 队列 ID,以“,”符号分割字符串;是否必传:否
  300. queueIds: '',
  301. // 1. Active 表示队列内的作业会被文档预览服务调度执行2. Paused 表示队列暂停,作业不再会被文档预览服务调度执行,队列内的所有作业状态维持在暂停状态,已经处于执行中的任务将继续执行,不受影响;是否必传:否
  302. state: 'Active',
  303. // 第几页,默认第一页;是否必传:否
  304. pageNumber: '',
  305. // 每页个数,默认10个;是否必传:否
  306. pageSize: '',
  307. },
  308. },
  309. function (err, data) {
  310. if (err) {
  311. // 处理请求失败
  312. console.log(err);
  313. } else {
  314. // 处理请求成功
  315. console.log(data.Response);
  316. }
  317. }
  318. );
  319. }
  320. function updateProcessQueue() {
  321. // sdk引入以及初始化请参考:https://cloud.tencent.com/document/product/436/31953
  322. const queueId = 'xxx';
  323. const key = `docqueue/${queueId}`;
  324. const host = `${config.Bucket}.ci.${config.Region}.myqcloud.com`;
  325. const url = `https://${host}/${key}`;
  326. const body = COS.util.json2xml({
  327. Request: {
  328. // 队列名称;是否必传:是
  329. Name: 'xxx',
  330. // 队列 ID;是否必传:是
  331. QueueID: queueId,
  332. // 队列状态;是否必传:是
  333. State: 'Active',
  334. // 通知渠道;是否必传:是
  335. NotifyConfig: {
  336. // 回调配置;是否必传:否
  337. Url: '',
  338. // 回调类型,普通回调:Url;是否必传:否
  339. Type: 'Url',
  340. // 回调事件,文档预览任务完成;是否必传:否
  341. Event: 'TaskFinish',
  342. // 回调开关,Off,On;是否必传:否
  343. State: 'Off',
  344. },
  345. },
  346. });
  347. cos.request(
  348. {
  349. Method: 'PUT', // 固定值,必须
  350. Key: key, // 必须
  351. Url: url, // 请求的url,必须
  352. Body: body, // 请求体参数,必须
  353. ContentType: 'application/xml', // 固定值,必须
  354. },
  355. function (err, data) {
  356. if (err) {
  357. // 处理请求失败
  358. console.log(err);
  359. } else {
  360. // 处理请求成功
  361. console.log(data.Response);
  362. }
  363. }
  364. );
  365. }
  366. module.exports = docPreviewDao;