用pdf写canvas并将其保存在storage android studio中,不起作用

Posted

技术标签:

【中文标题】用pdf写canvas并将其保存在storage android studio中,不起作用【英文标题】:Write canvas in pdf and save it in storage android studio, doesn't work 【发布时间】:2021-10-22 02:35:04 【问题描述】:

我有一个问题,我想创建一个pdf并将他保存在手机上的下载路径中,但似乎有一个错误,我不知道如何解决。

谁能帮帮我? (我认为我已经拥有访问存储的权限:/)。

这是我的代码 -->

fun createPdf

fun createPdf(
    text: String,
    context: Context
) 
    val myPDFdocument = PdfDocument()
    val myPaint = Paint()
    val myPageInfo1 = PdfDocument.PageInfo.Builder(1240, 1754, 1).create()
    val myPage1 = myPDFdocument.startPage(myPageInfo1)
    val canvas = myPage1.canvas

    canvas.drawText(text, 40F, 50F, myPaint)
    myPDFdocument.finishPage(myPage1)

    val file = File(context.externalCacheDir!!.absolutePath, "/FirstPdf.pdf")
    try 
        myPDFdocument.writeTo(FileOutputStream(file))
     catch (e: IOException) 
        e.printStackTrace()
    

    myPDFdocument.close()

【问题讨论】:

【参考方案1】:

我发现了问题,这里是解决方案:(Principaly for android 11)

fun createPdf

val imageCollection = 
MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY)

val contentValues = ContentValues().apply 
    put(MediaStore.Downloads.DISPLAY_NAME, "$commande.pdf")
    put(MediaStore.Downloads.MIME_TYPE, "application/pdf")
    put(MediaStore.Downloads.IS_PENDING, 1)


val itemUri = resolver.insert(imageCollection, contentValues)
try 
    Toast.makeText(context, "salut toi", Toast.LENGTH_SHORT).show()
    resolver.insert(imageCollection, contentValues)?.also  uri ->
        resolver.openOutputStream(uri).use  outputStream ->
            myPDFdocument.writeTo(outputStream)
        
    
    contentValues.clear()
    contentValues.put(MediaStore.Downloads.IS_PENDING, 0)
    resolver.update(itemUri!!, contentValues, null, null)
    myPDFdocument.close()
 catch (e: IOException) 
    e.printStackTrace()

【讨论】:

以上是关于用pdf写canvas并将其保存在storage android studio中,不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Python tkinter 将画布保存为 postscript 并添加到 pdf

扫描图像并将其像 pdf 一样保存到数据库 c#

获取打印预览并将其保存为 PDF 文件

每秒处理 350k 个请求并将数据保存到 Google Cloud Storage

PHP:预先填写 PDF 文件的字段并将其保存为默认值

将图像存储在 Firebase Storage 中并将元数据保存在 Firebase Cloud Firestore(测试版)中