HarmonyOS 打印的print接口传path参数报文件格式不支持

1、使用photoAccessHelper返回的文件公共路径URI,或者应用沙箱文件URI,拉起打印服务会显示文件格式不支持。

2、将上述两种URI参数转换为fd,再以fd的参数传入显示正常。

3、只支持图片格式,传入PDF格式文件也会显示文件格式不支持。

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

可以使用print接口,示例如下:

startPrint(): void {
  let file = fs.openSync('/data/storage/el2/base/haps/entry/files/test_print.pdf', fs.OpenMode.READ_WRITE);
  let jobName: string = 'test';
  let printAdapter: print.PrintDocumentAdapter = {
    onStartLayoutWrite(jobId: string,
      oldAttrs: print.PrintAttributes,
      newAttrs: print.PrintAttributes,
      fd: number, writeResultCallback: (jobId: string, writeResult: print.PrintFileCreationState) => void): void {
      console.log('printxxx', 'jobId:', jobId, 'oldAttrs:', JSON.stringify(oldAttrs), 'newAttrs:',
        JSON.stringify(newAttrs), 'fd:', fd.toString());
      let bufSize = 4096;
      let readSize = 0;
      let buf = new ArrayBuffer(bufSize);
      let readOptions: ReadOptions = {
        offset: readSize,
        length: bufSize
      };
      let readLen = fs.readSync(file.fd, buf, readOptions);
      while (readLen > 0) {
        readSize += readLen;
        let writeOptions: WriteOptions = {
          length: readLen
        };
        fs.writeSync(fd, buf, writeOptions);
        readOptions.offset = readSize;
        readLen = fs.readSync(file.fd, buf, readOptions);
      }

      writeResultCallback(jobId, print.PrintFileCreationState.PRINT_FILE_CREATED)
    },
    onJobStateChanged(): void {
    }
  }
  let printAttributes: print.PrintAttributes = {
    copyNumber: 1,
    pageRange: {
      startPage: 0,
      endPage: 5,
      pages: []
    },
    pageSize: print.PrintPageType.PAGE_ISO_A3,
    directionMode: print.PrintDirectionMode.DIRECTION_MODE_AUTO,
    colorMode: print.PrintColorMode.COLOR_MODE_MONOCHROME,
    duplexMode: print.PrintDuplexMode.DUPLEX_MODE_NONE
  };
  print.print(jobName, printAdapter, printAttributes, this.context).then((printTask: print.PrintTask) => {
    printTask.on('succeed', () => {
      console.log('print state is succeed');
    })
  }).catch((err: BusinessError) => {
    console.log('print err ' + JSON.stringify(err))
  })
}
分享
微博
QQ
微信
回复
21h前
相关问题
HarmonyOS imagePacker不支持编码成jpg格式
451浏览 • 1回复 待解决
HarmonyOS print组件 支持 excel 打印
61浏览 • 1回复 待解决
Lite Wearable 不支持 http 网络接口
3543浏览 • 1回复 待解决
HarmonyOS SVG文件不支持<text>标签吗
42浏览 • 1回复 待解决
HarmonyOS TextSpan不支持align
26浏览 • 1回复 待解决
web组件不支持localstorage
832浏览 • 1回复 待解决
HarmonyOS image不支持mask吗
49浏览 • 1回复 待解决
HarmonyOS Span不支持n换行
36浏览 • 1回复 待解决
@BuilderParam 不支持普通class变量
803浏览 • 1回复 待解决
HarmonyOS RN使用datetimePicker显示不支持
110浏览 • 1回复 待解决
http类不支持cancel方法
207浏览 • 1回复 待解决
Panel不支持水平方向拖拉
678浏览 • 1回复 待解决