HarmonyOS 调用打印机界面的demo

HarmonyOS
2024-12-25 08:14:09
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa
import { common } from '@kit.AbilityKit';
import fs, { ReadOptions, WriteOptions } from '@ohos.file.fs';
import { BusinessError, print } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';

@Entry
@Component
struct Index {
  @State message: string = '开始写入PDF'
  @State isOpenPdfButtonShow: Visibility = Visibility.Hidden
  @State writePdfProgress: number = 0
  private context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext
  private pathDir: string = '/data/storage/el2/base/haps/entry/files'
  private filePath: string = this.pathDir + "/test.pdf";
  private fileFd: number = 0

  async startPrint() {
    let jobName: string = 'test'
    const filePath: string = this.context.filesDir + "/testShare1.pdf";
    let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    let printAdapter: print.PrintDocumentAdapter = {
      onStartLayoutWrite(jobId: string,
        oldAttrs: print.PrintAttributes,
        newAttrs: print.PrintAttributes,
        fd: number, writeResultCallback: (jobId: string, writeResult: print.PrintFileCreationState) => void) {
        console.log('printxxx', 'jobId:', jobId, 'oldAttrs:', JSON.stringify(oldAttrs), 'newAttrs:',
          JSON.stringify(newAttrs), 'fd:', fd.toString());
        // 用openSync读取
        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))
    })
  }

  createFile(): void {
    getContext(this).resourceManager.getRawFileContent('G.G 2017-1.pdf', (err: BusinessError, value: Uint8Array) => {
      const filePath: string = this.context.filesDir + "/testShare1.pdf";
      // let file = fs.openSync(this.pathDir + '/testShare.pdf', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
      let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
      let arrayBuffer = value.buffer.slice(0)
      fs.writeSync(file.fd, arrayBuffer)
      fs.closeSync(file);
      promptAction.showToast({
        message: '沙箱pdf创建成果',
        duration: 2000
      });
    })

    // getContext(this).resourceManager.getRawFileContent('startIcon.png', (err: BusinessError, value: Uint8Array) => {
    //   let file = fs.openSync(this.pathDir + '/printImage.png', fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    //   let arrayBuffer = value.buffer.slice(0)
    //   fs.writeSync(file.fd, arrayBuffer)
    //   fs.closeSync(file);
    // })
  }

  build() {
    Column() {
      Button('创建PDF文件')
        .onClick(() => {
          this.createFile()
        })
      Button('打印')
        .onClick(() => {
          this.startPrint()
        })
    }
    .width('100%')
    .width('100%')
    .justifyContent(FlexAlign.Center)
  }
}

在rowfile目录下新增G.G 2017-1.pdf文件

"requestPermissions": [
{
  "name": "ohos.permission.PRINT",
},
{
  "name": "ohos.permission.INTERNET"
}
]
分享
微博
QQ
微信
回复
2024-12-25 10:25:48
相关问题
HarmonyOS 蓝牙热敏打印机sdk
39浏览 • 1回复 待解决
HarmonyOS 便携式移动打印机
220浏览 • 1回复 待解决
通过USB连接打印机打印小票时报错
578浏览 • 1回复 待解决
如何拉起相机界面,有人知道吗?
1983浏览 • 1回复 待解决
HarmonyOS 能否提供登录界面样例demo
420浏览 • 1回复 待解决
HarmonyOS Web如何搜索html界面的内容?
404浏览 • 1回复 待解决
HarmonyOS TabContent与父界面的变量传递
209浏览 • 1回复 待解决
如何实现page界面的预渲染?
473浏览 • 1回复 待解决
HarmonyOS rcp能力调用demo
150浏览 • 1回复 待解决
HarmonyOS 如何调用拨打电话界面
290浏览 • 1回复 待解决
HarmonyOS 需要一个筛选页面的demo
554浏览 • 1回复 待解决