【问题标题】:how to break a long text to multiple lines in PDF creation in android?如何在android中创建PDF时将长文本分成多行?
【发布时间】:2020-05-17 19:44:48
【问题描述】:

我有一个笔记本应用程序,我希望将笔记保存为 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);

【问题讨论】:

标签: java android pdf


【解决方案1】:

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

before multiline breaks

after multiline breaks

【讨论】:

  • 如果文本很长,它应该在 pdf 中创建下一页,但是上面的代码会在下面溢出,知道如何解决这个问题吗?
猜你喜欢
  • 1970-01-01
  • 2021-09-03
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多