【问题标题】:How can I create pdf using Storage Access Storage in Android studio using kotlin?如何使用 kotlin 在 Android Studio 中使用 Storage Access Storage 创建 pdf?
【发布时间】:2021-07-06 08:50:48
【问题描述】:

我是一名新手 Android/Kotlin 程序员。 我正在做一个在 Android 中生成 pdf 的项目。我尝试在内部应用程序特定位置使用 itextpdf:itext7 制作简单的 pdf 文档,但这样做不允许用户查看文件。所以我必须使用存储访问框架来创建。我使用 SAF 创建了文本文件,但 pdf 文件对我来说似乎是死路一条

我搜索了可用资源,但找不到任何材料/或资源。我尝试尝试的尝试也失败了。该应用程序只是崩溃/关闭。

谁能告诉我它是如何正确完成的?

谢谢。

class MainActivity : AppCompatActivity() {

    lateinit var binding: ActivityMainBinding

    var saveHandle = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){
        resultData: ActivityResult ->
        val uri = resultData.data?.data
        if (resultData.resultCode == Activity.RESULT_OK){
            if (uri != null){
                WritetoPdf(uri)
            }
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //setContentView(R.layout.activity_main)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.btnCreate.setOnClickListener {
            //CreatePdf()
            val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
                type = "text/.pdf"
                addCategory(Intent.CATEGORY_OPENABLE)
            }
            saveHandle.launch(intent)
        }
    }

    fun WritetoPdf(uri: Uri) {
        var writeStream: ParcelFileDescriptor? = contentResolver.openFileDescriptor(uri, "w")
        var pdfFile = File(uri.toString())
        val pdf = PdfDocument(PdfWriter(pdfFile.toString()))
        val document = Document(pdf)
        val line = "Hello! Welcome to iTextPdf"
        document.add(Paragraph(line))
        document.close()
    }
}

【问题讨论】:

  • My attempts to give it a try also failed. The app simply crashed/closed down.你有这个网站的经验,你应该知道这行不通,贴出你试过的和不行的

标签: android android-studio kotlin itext7


【解决方案1】:

替换:

    var writeStream: ParcelFileDescriptor? = contentResolver.openFileDescriptor(uri, "w")
    var pdfFile = File(uri.toString())
    val pdf = PdfDocument(PdfWriter(pdfFile.toString()))

与:

    var writeStream = contentResolver.openOutputStream(uri, "w")
    val pdf = PdfDocument(PdfWriter(writeStream))

或者,将 PDF 写入您控制的 File,然后将 File 的内容复制到用户通过 SAF 选择的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 2020-01-05
    • 2021-10-01
    • 2019-07-22
    • 2018-05-23
    • 1970-01-01
    • 2020-12-13
    相关资源
    最近更新 更多