我正在使用 iText 库创建数据并将其添加到 PDF。
在关闭文件之前,我想多次向 PDF 添加一些 textLines 和图像。
numOfSamples = timeIHitTheButton();
.
.
.
*a loop tha call it the number of times choosen by numOfSamples*
DSM.saveData();
DataStore(DSM 是一个 DataStore 实例)类正确地创建了 Document doc.pdf,并且 DSM.addText() 和 DSM.addPicture() 在文件上正确打印了三个文本行和一个图像,但前提是我只按一次按钮! !
每次按下按钮时,我都想写相同的字符串和图像(如果我按下它一次我有一个样本,如果我按下它两次我有两个样本等)。如果我只按一次并终止,我会得到带有字符串和图片的 PDF,但如果我按多次,我会得到一个无法读取和损坏的 PDF 文件。我不知道为什么。我怎样才能继续写图片和字符串,直到样本数量完成?
如果有用的话,我在这里发布一些代码(“newPic1.jpg”“newPic2.jpg”等是存储的图片与文本一起添加到 PDF。):
public class DataStore{ ....
.
.
.
public DataStore(String Str1, String Str2, String Str3, int numOfSemples)
throws Exception{
document = new Document();
String1 = str1;
String2 = str2;
String3 = str3;
Samples = numOfSemples;
document.open();
}
privatevoid saveData(){
if(!created){
this.createFile();
created=true;
}
this.addText();
this.addPicture();
}
private void createFile(){
try {
OutputStream file = new FileOutputStream(
new File("Doc.pdf"));
PdfWriter.getInstance(document, file);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
private void addText(){
try {
if(Samples > 0)
document.open();
document.add(new Paragraph(Double.toString(String1)));
document.add(new Paragraph(Double.toString(String2)));
document.add(new Paragraph(Double.toString(String3)));
} catch (DocumentException e) {
e.printStackTrace();
}
}
private void addPicture(){
try {
Image img = Image.getInstance("NewPic" + Samples + ".jpg");
document.add(img);
} catch (BadElementException bee) {
bee.printStackTrace();
} catch (MalformedURLException mue) {
mue.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (DocumentException dee) {
dee.printStackTrace();
}
if(Samples == 0)
document.close();
else Samples--;
}
}