【发布时间】:2022-08-15 16:36:48
【问题描述】:
嗨,我正在尝试按照 this resource 从视图创建 A4 PDF。我已经能够成功地创建 pdf,但它切断了我的视野。我已经对视图大小进行了几次调整并调整了所有测量功能,但似乎仍然无法独立于屏幕来扩展此视图。我相信我的问题在于这段代码的某个地方。
/**
* Entry point for creating PDF
*
* @param context (app context)
* @param activity
*/
fun createPdf(
context: Context,
activity: Activity
) {
val inflater = LayoutInflater.from(context)
val view = inflater.inflate(R.layout.layout_pdf_page_one, null)
val bitmap = createBitmapFromView(context, view, activity, 1)
convertBitmapToPdf(bitmap, activity, nPage = 1)
}
private fun createBitmapFromView(
context: Context,
view: View,
activity: Activity,
page: Int
): Bitmap {
val binding = LayoutPdfPageOneBinding.bind(view)
binding.lifecycleOwner = binding.root.findViewTreeLifecycleOwner()
initPageOne(binding, context)
return createBitmap(context, binding.root, activity, binding)
}
private fun createBitmap(
context: Context,
view: View,
activity: Activity,
binding: LayoutPdfPageOneBinding
): Bitmap {
// whats going on here is getting the display metrics I think I need the layout
size as losing some of the bottom.
val displayMetrics = DisplayMetrics()
activity.display?.getRealMetrics(displayMetrics)
displayMetrics.densityDpi
view
view.measure(
View.MeasureSpec.makeMeasureSpec(
displayMetrics.widthPixels, View.MeasureSpec.EXACTLY
),
View.MeasureSpec.makeMeasureSpec(
displayMetrics.heightPixels, View.MeasureSpec.EXACTLY
)
)
view.layout(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels)
val bitmap = Bitmap.createBitmap(
view.measuredWidth,
view.measuredWidth,
Bitmap.Config.ARGB_8888
)
Log.d(TAG, \"createBitmap: ${binding.pdfLayoutPageOne.width}\")
Log.d(TAG, \"createBitmap: ${binding.pdfLayoutPageOne.height}\")
val canvas = Canvas(bitmap)
view.draw(canvas)
return Bitmap.createScaledBitmap(bitmap, 595, 842, true)
}
我意识到这目前取决于屏幕,但我已将这些变量调整为没有成功。我还尝试更改布局视图大小以计算 dp 宽度和大小以及尝试 mm 宽度和大小。可以在这里看到前两个块,它们当前都是匹配父块,但请放心,我已经尝试了几种不同的大小调整方法。
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<layout xmlns:android=\"http://schemas.android.com/apk/res/android\"
xmlns:app=\"http://schemas.android.com/apk/res-auto\"
xmlns:tools=\"http://schemas.android.com/tools\">
<androidx.constraintlayout.widget.ConstraintLayout
android:id=\"@+id/pdf_layout_page_one\"
android:layout_width=\"match_parent\"
android:layout_height=\"match_parent\"
android:layout_margin=\"10sp\"
android:paddingStart=\"24sp\"
android:paddingTop=\"24sp\"
android:paddingEnd=\"24sp\"
android:paddingBottom=\"88sp\">
问题是如何制作一个 A4 大小的 xml,以便设计看起来像我成功导出和导出该视图时的样子?任何 cmets 都非常受欢迎。我真的不想使用外部库,因为我要在视图中导出一些 mpandroidcharts 以便从位图导出到 pdf。
标签: android android-layout android-bitmap android-pdf-api