0

我正在使用下面的代码来绘制文本并用 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, 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();
4

1 回答 1

0

我假设您使用的是本机 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();

有关更多示例,请参阅https://kb.itextpdf.com/home/it7kb/ebooks/itext-7-building-blocks/chapter-2-adding-content-to-a-canvas-or-a-document

于 2021-05-27T07:46:45.097 回答