如果前一个 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
}
我正在我的 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
}