Java Android中新的PDF页面创建产生的页面比预期的多
在我的应用程序中,用户可以通过将PDF页面作为对象添加到ArrayList来创建新页面。然后,新页面创建由for循环管理,以迭代ArrayList中的每个对象,并将其打印到新页面 但是,当我打开已经创建的PDF时,我似乎得到了一个“平方”的页面量。 例如 我创建2页,我得到4页 我创建了3页,得到了9页 等 我想这和我的for循环有关,但我看不出来。有人能看看我的代码吗Java Android中新的PDF页面创建产生的页面比预期的多,java,android,for-loop,pdf,Java,Android,For Loop,Pdf,在我的应用程序中,用户可以通过将PDF页面作为对象添加到ArrayList来创建新页面。然后,新页面创建由for循环管理,以迭代ArrayList中的每个对象,并将其打印到新页面 但是,当我打开已经创建的PDF时,我似乎得到了一个“平方”的页面量。 例如 我创建2页,我得到4页 我创建了3页,得到了9页 等 我想这和我的for循环有关,但我看不出来。有人能看看我的代码吗 public class MainActivity extends AppCompatActivity { priv
public class MainActivity extends AppCompatActivity {
private EditText firstEditText;
ArrayList<PDFPageModel> pageModelArrayList = new ArrayList<>();
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firstEditText = findViewById(R.id.firstEditText);
//request permissions (I won't need this part)
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, PackageManager.PERMISSION_GRANTED);
//clear array memory each time you onCreate
pageModelArrayList.clear();
}
public void addObjectToList(View view){
//create new object
PDFPageModel pdfPageModel = new PDFPageModel();
//add stuff to object from edit text and set type
pdfPageModel.setPageData(firstEditText.getText().toString().trim());
pdfPageModel.setType("Text");
pageModelArrayList.add(pdfPageModel);
Toast.makeText(MainActivity.this, "Text added", Toast.LENGTH_LONG).show();
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public void createMyPDF(View view){
//done in 3 parts
//1. creation of PDF document, 2. writing to the document, 3. save document to folder
//1. PDF Document Creation
PdfDocument pdfDocument = new PdfDocument();
//2.
//for loop for ArrayList new page
for (int i=0; i < pageModelArrayList.size(); i++){
for(PDFPageModel filledData : pageModelArrayList){
filledData.getPageData();
filledData.getType();
if(filledData.getType() == "Text"){
//create a page info description
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595, 842, i+1).create();
//start a page
PdfDocument.Page page = pdfDocument.startPage(pageInfo);
//writing to new page
Paint paint = new Paint();
//canvas used to write to page, getting object data from inputted text
String myString = filledData.getPageData();
//setting where to start text on the page
int x = 10, y = 25;
//multi line loop
for(String line:myString.split("\n")){
page.getCanvas().drawText(line, x, y, paint);
y+=paint.descent()-paint.ascent();
}
//finish page
pdfDocument.finishPage(page);
}else {
Toast.makeText(MainActivity.this, "Object Type not text", Toast.LENGTH_LONG).show();
}
}
}
//3. saving to folder
String myFilePath = String.valueOf(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS));
String fileName = "/myNewPDF-TEST.pdf";
//create folder to be saved in
File myFile = new File(myFilePath + "/PDFTestStorage");
if(!myFile.exists()){
myFile.mkdirs();
}
//new file
File file = new File(myFile, fileName);
//save document
try {
pdfDocument.writeTo(new FileOutputStream(file));
Toast.makeText(MainActivity.this, "File Created", Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, "Error: File not created", Toast.LENGTH_LONG).show();
}
//close pdf doc
pdfDocument.close();
}
public类MainActivity扩展了AppCompatActivity{
私人编辑文本第一编辑文本;
ArrayList pageModelArrayList=新建ArrayList();
@RequiresApi(api=Build.VERSION\u CODES.JELLY\u BEAN)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firstEditText=findViewById(R.id.firstEditText);
//请求权限(我不需要此部分)
ActivityCompat.requestPermissions(MainActivity.this,新字符串[]{Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE},PackageManager.permission_grated);
//每次创建时清除阵列内存
pageModelArrayList.clear();
}
public void addObjectToList(视图){
//创建新对象
PDFPageModel PDFPageModel=新的PDFPageModel();
//从编辑文本和设置类型向对象添加内容
pdfPageModel.setPageData(firstEditText.getText().toString().trim());
pdfPageModel.setType(“文本”);
pageModelArrayList.add(pdfPageModel);
Toast.makeText(MainActivity.this,“添加文本”,Toast.LENGTH_LONG.show();
}
@RequiresApi(api=Build.VERSION\u CODES.KITKAT)
公共void createMyPDF(视图){
//分三部分完成
//1.创建PDF文档,2.写入文档,3.将文档保存到文件夹
//1.PDF文档创建
PdfDocument PdfDocument=新PdfDocument();
//2.
//用于ArrayList新页面的for循环
对于(int i=0;i
只需移除最外层的for环,即更换:
for (int i=0; i < pageModelArrayList.size(); i++){
for(PDFPageModel filledData : pageModelArrayList){
filledData.getPageData();
filledData.getType();
if(filledData.getType() == "Text"){
//create a page info description
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595, 842, i+1).create();
//start a page
PdfDocument.Page page = pdfDocument.startPage(pageInfo);
//writing to new page
Paint paint = new Paint();
//canvas used to write to page, getting object data from inputted text
String myString = filledData.getPageData();
//setting where to start text on the page
int x = 10, y = 25;
//multi line loop
for(String line:myString.split("\n")){
page.getCanvas().drawText(line, x, y, paint);
y+=paint.descent()-paint.ascent();
}
//finish page
pdfDocument.finishPage(page);
}else {
Toast.makeText(MainActivity.this, "Object Type not text", Toast.LENGTH_LONG).show();
}
}
}
你所描述的平方行为几乎肯定来自嵌套循环
int i=0;
for(PDFPageModel filledData : pageModelArrayList){
filledData.getPageData();
filledData.getType();
if(filledData.getType() == "Text"){
//create a page info description
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(595, 842, i+1).create();
//start a page
PdfDocument.Page page = pdfDocument.startPage(pageInfo);
//writing to new page
Paint paint = new Paint();
//canvas used to write to page, getting object data from inputted text
String myString = filledData.getPageData();
//setting where to start text on the page
int x = 10, y = 25;
//multi line loop
for(String line:myString.split("\n")){
page.getCanvas().drawText(line, x, y, paint);
y+=paint.descent()-paint.ascent();
}
//finish page
pdfDocument.finishPage(page);
}else {
Toast.makeText(MainActivity.this, "Object Type not text", Toast.LENGTH_LONG).show();
i++
}