如何使用 kotlin 在 Android studio 中使用 Storage Access Storage 创建 pdf?
How can I create pdf using Storage Access Storage in Android studio using kotlin?
我是一个新手Android/Kotlin程序员。
我正在做一个在 Android 中生成 pdf 的项目。我曾尝试在内部应用程序特定位置使用 itextpdf:itext7 制作简单的 pdf 文档,但这样做不允许用户查看文件。所以我必须使用存储访问框架来创建。我使用 SAF 创建了文本文件,但 pdf 文件对我来说似乎是死胡同
我搜索了可用资源,但找不到任何 materials/or 资源。我尝试尝试也失败了。该应用程序只需 crashed/closed 即可。
谁能告诉我如何正确完成?
谢谢。
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()
}
}
替换:
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
,然后通过 SAF 将 File
的内容复制到用户选择的位置。
我是一个新手Android/Kotlin程序员。 我正在做一个在 Android 中生成 pdf 的项目。我曾尝试在内部应用程序特定位置使用 itextpdf:itext7 制作简单的 pdf 文档,但这样做不允许用户查看文件。所以我必须使用存储访问框架来创建。我使用 SAF 创建了文本文件,但 pdf 文件对我来说似乎是死胡同
我搜索了可用资源,但找不到任何 materials/or 资源。我尝试尝试也失败了。该应用程序只需 crashed/closed 即可。
谁能告诉我如何正确完成?
谢谢。
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()
}
}
替换:
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
,然后通过 SAF 将 File
的内容复制到用户选择的位置。