如何解决如何使用静态布局在多页中绘制多行文本以创建 PDF
我正在使用下面的代码绘制文本并以 PDF 格式书写,但无法绘制多个页面?解决此问题的最佳方法是什么。
PdfDocument document = new PdfDocument();
PdfDocument.PageInfo pageInfo = new
PdfDocument.PageInfo.Builder(pageWidth,pageheight,3).create();
PdfDocument.Page page = document.startPage(pageInfo);
Canvas canvas = page.getCanvas();
TextPaint paint=new TextPaint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.rgb(0,0));
paint.setTextSize((int) (7 * 2));
paint.setShadowLayer(1f,0f,1f,Color.WHITE);
int textWidth = canvas.getWidth() - (int) (16 * 2);
StaticLayout textLayout = new StaticLayout(
edittextContent.getText().toString(),paint,pageWidth-50,Layout.Alignment.ALIGN_NORMAL,1.0f,0.0f,false);
int textHeight = textLayout.getHeight();
float x = ((pageWidth-15) - textWidth)/2;
float y = ((pageheight-15) - textHeight)/2;
// draw text to the Canvas center
canvas.save();
canvas.translate(15,10);
textLayout.draw(canvas);
canvas.restore();
document.finishPage(page);
document.writeTo(fOut);
document.close();
解决方法
我假设您使用的是原生 android android.graphics.pdf.PdfDocument
。看起来它真的只提供了将文本行放置在特定页面上的特定坐标处的低级功能。如果您想坚持使用此 API,您可能需要为要在文档中创建的每个页面调用 startPage()
和 finishPage()
,并为每个页面准备拆分内容。像这样:
// start 1st page
PdfDocument.Page page = document.startPage(pageInfo);
// draw something on the page
// finish 1st page
document.finishPage(page);
// start 2nd page
PdfDocument.Page page = document.startPage(pageInfo);
// draw something on the page
// finish 2nd page
document.finishPage(page);
...
如果您想要更多高级功能,如果内容不适合,可以跨越多个页面,您需要使用一些其他工具。
例如你可以试试 iText7
库:
PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
Document document = new Document(pdf,new PageSize(pageWidth,pageheight));
// set here any amount of text,it will span across multiple pages if needed
String text = ...;
document.add(new Paragraph(line));
document.close();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。