如果前一个 pdf 页面已满,则创建第二个 pdf 页面

create second pdf page if previous one is full

我正在我的 A4 大小的应用程序中创建一个 pdf 文档,我想在那个页面上绘制我的文本,但是当文本大得多时,它会覆盖页面的所有区域而其余文本没有在页面上绘制,所以我想实现这一点,如果我的第一页是创建另一个页面并在另一个页面上绘制其余文本。有人可以帮帮我吗??

我的密码是

public void create_Pdf_File(String text, String filename) {

    Typeface font = scanEditText.getTypeface();


    PdfDocument pdf_doc = new PdfDocument();

    try {

        String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Scanned Documents/pdf file/";


        File pdf_dir = new File(path);

        if(!pdf_dir.exists())
            pdf_dir.mkdirs();


        File pdf_file = new File(pdf_dir,  filename + ".pdf");
        FileOutputStream fout = new FileOutputStream(pdf_file);

        PdfDocument.PageInfo pageInfo = new             PdfDocument.PageInfo.Builder(595, 842, 1).create();
        PdfDocument.Page page = pdf_doc.startPage(pageInfo);

        Paint myPaint = new Paint();
        myPaint.setTypeface(font);


        int x = 10, y = 25;


        for(String line : text.split("\n")) {

            page.getCanvas().drawText(line, x, y, myPaint);
            y += myPaint.descent() - myPaint.ascent();

        }

        pdf_doc.finishPage(page);
        pdf_doc.writeTo(fout);
        pdf_doc.close();

        Toast.makeText(this, "saved", Toast.LENGTH_SHORT).show();
    }

    catch(Exception e) {

        System.out.println(e);
        e.printStackTrace();
    }


}

试试下面的代码片段。阅读代码之间的评论

   //...
   //...
   int x = 10, y = 25;
   String[] lines = text.split("\n"); 
   for(int i = 0; i < lines.length; i++) {
        // Check if drawing is close to the end of page
        if(842 - y < 40)page = getNextPage(pdf_doc,page);
        page.getCanvas().drawText(lines[i], x, y, myPaint);
        y += myPaint.descent() - myPaint.ascent();
       //Check if last line in loop
       if(i == lines.length - 1) pdf_doc.finishPage(page); // Close last page
   }
   pdf_doc.writeTo(fout);
   pdf_doc.close();
   //...
   //...

辅助函数

    function PdfDocument.Page getNextPage(PdfDocument pdf_doc, PdfDocument.Page previous_page){
       pdf_doc.finishPage(previous_page); //Closes Previous page
       PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595, 842, 1).create(); 
       return pdf_doc.startPage(pageInfo); //Begins New page
    }