HarmonyOS 鸿蒙Next:创建PDF添加文字或图片后,保存到本地打开显示为空白内容

发布于 1周前 作者 htzhanglong 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:创建PDF添加文字或图片后,保存到本地打开显示为空白内容 pdf相关文档地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/pdf-introduction-V5

按照文档描述创建pdf,添加图片和文字,保存到本地Documents目录下后打开是空白的

3 回复
  1. 添加文字,当前addTextObject,添加文本内容,只可按行添加,只支持单行,不支持换行:

    https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/pdf-arkts-pdfservice-V5#section67811517143913

  2. 创建pdf添加文字或者图片建议参考一下代码(当前图片和pdf文件保存的路径都为沙箱路径,具体可查看:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/share-app-file-V5#应用可分享目录):

import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { pdfService } from '@kit.PDFKit';
import fs from '@ohos.file.fs';

@Entry
@Component
struct Index {
  @State imageUri: string = '';

  build() {
    Column() {
      Button('选择图片')
        .onClick(() => {
          this.selectImage()
        })
      Image(this.imageUri)
        .width('100%')
        .layoutWeight(1)
      Button('image转PDF')
        .onClick(() => {
          this.savePdf()
        })
    }
  }

  async savePdf() {
    console.info('testTag', 'enter savePath')
    let pdfDocument = new pdfService.PdfDocument();
    let isCreate = pdfDocument.createDocument(600, 900);
    if (isCreate) {
      console.info('testTag', 'enter savePath getPageCount = ' + pdfDocument.getPageCount())
      let imagePdfPage = pdfDocument.getPage(0)
      let dir = getContext().filesDir;
      let imgPath = dir + "/test.jpg";
      console.info('testTag', 'pdf imgPath =' + imgPath)
      imagePdfPage.addImageObject(imgPath, 20, 20, 500, 500);
      let textPdfPage = pdfDocument.insertBlankPage(1, 600, 900)
      let textStyle: pdfService.TextStyle = new pdfService.TextStyle;
      let fontInfo = new pdfService.FontInfo();
      fontInfo.fontPath = "/system/fonts/HarmonyOS_Sans.ttf"
      textStyle.fontInfo = fontInfo;
      textStyle.textSize = 32;
      textStyle.textColor = 234;
      textStyle.isBold = true;
      textStyle.isItalic = false;
      textPdfPage.addTextObject(text, 20, 120, textStyle); //添加示例文字
      let randomNumber = Math.floor((Math.random() * 100));
      let savePath = getContext().filesDir + `/output${randomNumber}.pdf`;
      console.info('testTag', 'pdf savePath =' + savePath)
      let result = pdfDocument.saveDocument(savePath)
      console.info('testTag', 'pdf 保存结果:' + result)
    }
  }

  selectImage() {
    let photoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
    photoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
    photoSelectOptions.maxSelectNumber = 1
    let photoPicker = new photoAccessHelper.PhotoViewPicker();
    photoPicker.select(photoSelectOptions).then((photo: photoAccessHelper.PhotoSelectResult) => {
      let images = photo.photoUris
      if (images.length > 0) {
        this.imageUri = images[0]
        let file = fs.openSync(images[0], fs.OpenMode.READ_ONLY);
        fs.copyFileSync(file.fd, getContext().filesDir + '/test.jpg');
      }
    }).catch((err: BusinessError) => {
      console.error(`PhotoViewPicker.select failed with err: ${err.code}, ${err.message}`);
    });
  }
}

更多关于HarmonyOS 鸿蒙Next:创建PDF添加文字或图片后,保存到本地打开显示为空白内容的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


怎么解决的?

针对帖子标题“HarmonyOS 鸿蒙Next:创建PDF添加文字或图片后,保存到本地打开显示为空白内容”的问题,可能的原因及解决方案如下:

  1. PDF生成库问题:检查所使用的PDF生成库是否兼容HarmonyOS系统,或者是否存在已知的bug导致生成的PDF文件在某些情况下无法正常显示内容。尝试更新或更换PDF生成库。

  2. 文件保存路径或权限问题:确认文件保存路径是否正确,以及应用是否具有写入该路径的权限。权限不足可能导致文件保存不完整或无法正确写入内容。

  3. PDF内容格式问题:检查添加的文字或图片格式是否正确,以及是否遵循了PDF的规范。例如,图片格式不支持或文字编码错误都可能导致内容显示为空白。

  4. 文件损坏:在文件生成和保存过程中,可能存在某些操作导致文件损坏。尝试在生成PDF后立即打开以检查是否立即出现空白内容,以判断是生成过程还是保存过程的问题。

  5. PDF阅读器兼容性问题:尝试使用不同的PDF阅读器打开生成的PDF文件,以排除是特定阅读器兼容性问题导致的空白显示。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部