用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
每秒处理 350k 个请求并将数据保存到 Google Cloud Storage
将图像存储在 Firebase Storage 中并将元数据保存在 Firebase Cloud Firestore(测试版)中