Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-将附加pdf页面附加到打印的pdf文档_Android_Pdf_Pdfdocument - Fatal编程技术网

Android-将附加pdf页面附加到打印的pdf文档

Android-将附加pdf页面附加到打印的pdf文档,android,pdf,pdfdocument,Android,Pdf,Pdfdocument,在我的应用程序中,我将一些部分打印成pdf供用户使用。我使用打印的PDF文档来实现这一点 代码简而言之如下所示: // create a new document val printAttributes = PrintAttributes.Builder() .setMediaSize(mediaSize) .setColorMode(PrintAttributes.COLOR_MODE_COLOR) .se

在我的应用程序中,我将一些部分打印成pdf供用户使用。我使用打印的PDF文档来实现这一点

代码简而言之如下所示:

    // create a new document
    val printAttributes = PrintAttributes.Builder()
            .setMediaSize(mediaSize)
            .setColorMode(PrintAttributes.COLOR_MODE_COLOR)
            .setMinMargins(PrintAttributes.Margins.NO_MARGINS)
            .build()
    val document = PrintedPdfDocument(context, printAttributes)

    // add pages
    for ((n, pdfPageView) in pdfPages.withIndex()) {
        val page = document.startPage(n)
        Timber.d("Printing page " + (n + 1))
        pdfPageView.draw(page.canvas)
        document.finishPage(page)
    }

    // write the document content
    try {
        val out: OutputStream = FileOutputStream(outputFile)
        document.writeTo(out)
        out.close()
        Timber.d("PDF written to $outputFile")
    } catch (e: IOException) {
        return
    }
一切都很好。但是现在我想在末尾添加另一个页面。唯一的例外是,这将是从资产中预生成的pdf文件我只需要附加它,因此不需要额外的渲染等

有没有办法通过Android SDK中的PdfDocument类实现这一点

我想这可能是一个类似的问题:


但这是真的吗?答案没有被接受,只有3岁。有什么建议吗?

好的,我在这里回答我自己的问题

看起来没有太多的选择。至少我找不到任何本地的东西。Android框架中有一些pdf库,但它们似乎都只支持创建新页面,而不支持对现有文档的操作

这就是我所做的:

首先,似乎没有任何好的Android库。我在这里找到了一个为Android准备ApachePDF文件盒的文件。将此项添加到Gradle文件:

implementation 'com.tom_roush:pdfbox-android:1.8.10.3'
在代码中,您现在可以导入

import com.tom_roush.pdfbox.multipdf.PDFMergerUtility
在这里我添加了一个方法

val ut = PDFMergerUtility()
ut.addSource(file)

val assetManager: AssetManager = context.assets
var inputStream: InputStream? = null
try {
    inputStream = assetManager.open("appendix.pdf")
    ut.addSource(inputStream)
} catch (e: IOException) {
    ...
}

// Write the destination file over the original document
ut.destinationFileName = file.absolutePath
ut.mergeDocuments(true)
通过这种方式,从资产中加载附录页面,并将其附加到文档末尾。 然后,它会被写回与以前相同的文件