我无法使用 Android 的 PdfDocument 创建两页 pdf
I am not able to create two pages of pdf using PdfDocument of Android
开发者!我正在使用 PdfDocument 尝试将文本保存为 pdf 文件。所以我写了这段代码:
public void Convert(String text, String fileName){
PdfDocument myPdfDocument = new PdfDocument();
PdfDocument.PageInfo myPageInfo = new PdfDocument.PageInfo.Builder(this.pageWidth,this.pageHeight,this.pageNumber).create();
PdfDocument.Page myPage = myPdfDocument.startPage(myPageInfo);
Paint myPaint = new Paint();
Paint backPaint = new Paint();
backPaint.setColor(this.backgroundcolor);
myPaint.setTextSize(this.textSize);
myPaint.setColor(this.fontcolor);
//To find size of screen so that line is perfectly fit
DisplayMetrics dm = this.context.getResources().getDisplayMetrics();
int widthOfScreen = dm.widthPixels;
int periodForSplittingText = widthOfScreen / Math.round(this.textSize);
// To make line split in width of the screen here;
String insert = "\n";
StringBuilder builder = new StringBuilder(
text.length() + insert.length() * (text.length()/periodForSplittingText)+1);
int index = 0;
String prefix = "";
while (index < text.length()){
builder.append(prefix);
prefix = insert;
builder.append(text.substring(index, Math.min(index + periodForSplittingText, text.length())));
index += periodForSplittingText;
}
String myString = builder.toString();
for (String line:myString.split("\n")){
myPage.getCanvas().drawPaint(backPaint);
myPage.getCanvas().drawText(line, this.x, this.y, myPaint);
y+=myPaint.descent()-myPaint.ascent();
}
myPdfDocument.finishPage(myPage);
// Started another page
myPdfDocument.startPage(myPageInfo);
myPage.getCanvas().drawText("Second Page Text", 14, 25, myPaint);
myPdfDocument.finishPage(myPage);
String myFilePath = Environment.getExternalStorageDirectory().getPath() + this.filePath + "/" + fileName;
File myFile = new File (myFilePath);
try {
myPdfDocument.writeTo(new FileOutputStream(myFile));
} catch (Exception e) {
e.printStackTrace();
}
myPdfDocument.close();
}
但是,如果我输入了长文本,则无法在两个页面上创建它。根据 Android 开发者
This class enables generating a PDF document from native Android content. You create a new document and then for every page you want to add you start a page, write content to the page, and finish the page. After you are done with all pages, you write the document to an output stream and close the document. After a document is closed you should not use it anymore. Note that pages are created one by one, i.e. you can have only a single page to which you are writing at any given time. This class is not thread-safe.
但是我不明白这是什么意思?
我该如何解决这个问题?帮助
编辑:
现在添加这个
// Started another page
myPdfDocument.startPage(myPageInfo);
myPage.getCanvas().drawText("Second Page Text", 14, 25, myPaint);
myPdfDocument.finishPage(myPage);
导致此错误:尝试在空对象引用上调用虚拟方法 'void android.graphics.Canvas.drawText(java.lang.String, float, float, android.graphics.Paint)'
当你开始一个新页面时,你并没有将它分配给一个变量
改为
// Started another page
myPage = myPdfDocument.startPage(myPageInfo);
开发者!我正在使用 PdfDocument 尝试将文本保存为 pdf 文件。所以我写了这段代码:
public void Convert(String text, String fileName){
PdfDocument myPdfDocument = new PdfDocument();
PdfDocument.PageInfo myPageInfo = new PdfDocument.PageInfo.Builder(this.pageWidth,this.pageHeight,this.pageNumber).create();
PdfDocument.Page myPage = myPdfDocument.startPage(myPageInfo);
Paint myPaint = new Paint();
Paint backPaint = new Paint();
backPaint.setColor(this.backgroundcolor);
myPaint.setTextSize(this.textSize);
myPaint.setColor(this.fontcolor);
//To find size of screen so that line is perfectly fit
DisplayMetrics dm = this.context.getResources().getDisplayMetrics();
int widthOfScreen = dm.widthPixels;
int periodForSplittingText = widthOfScreen / Math.round(this.textSize);
// To make line split in width of the screen here;
String insert = "\n";
StringBuilder builder = new StringBuilder(
text.length() + insert.length() * (text.length()/periodForSplittingText)+1);
int index = 0;
String prefix = "";
while (index < text.length()){
builder.append(prefix);
prefix = insert;
builder.append(text.substring(index, Math.min(index + periodForSplittingText, text.length())));
index += periodForSplittingText;
}
String myString = builder.toString();
for (String line:myString.split("\n")){
myPage.getCanvas().drawPaint(backPaint);
myPage.getCanvas().drawText(line, this.x, this.y, myPaint);
y+=myPaint.descent()-myPaint.ascent();
}
myPdfDocument.finishPage(myPage);
// Started another page
myPdfDocument.startPage(myPageInfo);
myPage.getCanvas().drawText("Second Page Text", 14, 25, myPaint);
myPdfDocument.finishPage(myPage);
String myFilePath = Environment.getExternalStorageDirectory().getPath() + this.filePath + "/" + fileName;
File myFile = new File (myFilePath);
try {
myPdfDocument.writeTo(new FileOutputStream(myFile));
} catch (Exception e) {
e.printStackTrace();
}
myPdfDocument.close();
}
但是,如果我输入了长文本,则无法在两个页面上创建它。根据 Android 开发者
This class enables generating a PDF document from native Android content. You create a new document and then for every page you want to add you start a page, write content to the page, and finish the page. After you are done with all pages, you write the document to an output stream and close the document. After a document is closed you should not use it anymore. Note that pages are created one by one, i.e. you can have only a single page to which you are writing at any given time. This class is not thread-safe.
但是我不明白这是什么意思? 我该如何解决这个问题?帮助
编辑: 现在添加这个
// Started another page
myPdfDocument.startPage(myPageInfo);
myPage.getCanvas().drawText("Second Page Text", 14, 25, myPaint);
myPdfDocument.finishPage(myPage);
导致此错误:尝试在空对象引用上调用虚拟方法 'void android.graphics.Canvas.drawText(java.lang.String, float, float, android.graphics.Paint)'
当你开始一个新页面时,你并没有将它分配给一个变量
改为
// Started another page
myPage = myPdfDocument.startPage(myPageInfo);