首页 > 解决方案 > 如何在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);

标签: javaandroidpdf

解决方案


我有同样的问题。我设法从这篇文章中解决了这个问题。它使用静态布局。下面是我的整个代码,它将字符串值保存到使用多行换行符创建的 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 初始化中。我将提供一些前后截图。

在多行换行符之前

多行中断后


推荐阅读