java - 如何在android中创建PDF时将长文本分成多行?
问题描述
我有一个笔记本应用程序,我希望将笔记保存为 PDF 文件。用户可以在 TextView 中编写长文本,但是当我将文本转换为字符串并创建 PDF 文件时,单行中只有一小部分文本会在 PDF 文件中。如何将文本分成多行以查看 PDF 页面中的整个文本?我使用这部分 java 代码来破坏文本,但它不起作用。
textView = findViewById(R.id.textView);
String pdfText = textView.getText().toString();
Paint contentPaint = new Paint();
int length = pdfText.length();
contentPaint.breakText(pdfText, 0, length, true, 70, null);
canvas.drawText(pdfText, 30, 285, contentPaint);
解决方案
我有同样的问题。我设法从这篇文章中解决了这个问题。它使用静态布局。下面是我的整个代码,它将字符串值保存到使用多行换行符创建的 pdf 文件中。
String saveFilePath = path.getPath();
String textToSave = detectedText.getText().toString();
File file = new File(path, filenameString + ".pdf");
file.createNewFile();
FileOutputStream fOut = new FileOutputStream(file);
PdfDocument document = new PdfDocument();
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595, 842, 1).create();
PdfDocument.Page page = document.startPage(pageInfo);
Canvas canvas = page.getCanvas();
//*this part i took from the post for multiline breaks*
TextPaint mTextPaint = new TextPaint();
StaticLayout mTextLayout = new StaticLayout( textToSave ,mTextPaint, canvas.getWidth() - 100, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
canvas.save();
int textX = 50;
int textY = 50;
canvas.translate(textX, textY);
//**
mTextLayout.draw(canvas);
canvas.restore();
document.finishPage(page);
document.writeTo(fOut);
document.close();
如果您的字符串仍然溢出页面,请在此处尝试不同的值
canvas.getWidth() - 100
在 StaticLayout 初始化中。我将提供一些前后截图。
推荐阅读
- .net - 在域端升级 .Net 版本
- r - 根据与 dplyr 的部分匹配替换数据框中任何位置的整个字符串
- php - 通过 call_user_func 和 ::call 在类中调用闭包的区别
- c# - WPF Toolkit Extended - 将下拉按钮关闭事件绑定到 ViewModel 方法
- jira - 强制将合并请求链接放在“准备合并”列中
- node.js - node.js 中的 include_type_name 参数设置为 true
- jquery - 带有刻度尺的响应式 jQuery 滑块,起点和终点将动态变化
- java - onCommand() 设置正确,但根本没有执行
- python - 排序方法如何在python内部工作?
- sql - 这个任务有更有效的查询吗?