gpt4 book ai didi

java - 在android中使用iText生成带有动态内容的pdftable

转载 作者:太空狗 更新时间:2023-10-29 13:18:11 25 4
gpt4 key购买 nike

我正在使用 itext 库在 android 中生成 pdf。pdf 格式如图所示 enter image description here我用来生成此格式的方法是使用 Pdfptable

描述标签是动态的意味着它可以是多行。当描述标签为 4-5 行时,一切都是完美的,但如果它是半页,则 PDF 看起来不好看,因为所有不必要的空白;见sample.pdf .

// TODO Auto-generated method stub

Document document = new Document(PageSize.A4);
File f = null;
try {

f = createFile("sample.pdf");

FileOutputStream ficheroPdf = new FileOutputStream(
f.getAbsolutePath());

PdfWriter writer = PdfWriter.getInstance(document, ficheroPdf);


document.open();



/*LineSeparator line = new LineSeparator(1, 100, null, Element.ALIGN_CENTER, -2);
paragraph.add(line);*/


ArrayList<SampleModel> movies = new ArrayList<SampleModel>(15);
for (int i = 0; i < 13; i++) {
movies.add(new SampleModel());
}
for (int j = 0; j < movies.size(); j++) {

Bitmap bitmap = BitmapFactory.decodeResource(mActivity.getResources(),
movies.get(j).getDrawableId());

ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
Image img = Image.getInstance(stream.toByteArray());
img.setAlignment(Image.LEFT | Image.TEXTWRAP);
img.setBorder(Image.BOX);
img.setBorderWidth(20);
img.setBorderColor(Color.WHITE);
img.scaleAbsolute(200f, 200f);

//table with 2 columns
PdfPTable table = new PdfPTable(2);

table.setHorizontalAlignment(Element.ALIGN_LEFT);
table.getDefaultCell().setBorder(Rectangle.NO_BORDER);


PdfPCell cell = new PdfPCell(img);
cell.setVerticalAlignment(Element.ALIGN_TOP);
cell.setBorderColor(new Color(16777215));
cell.setRowspan(5);
table.addCell(cell);

table.addCell(new Paragraph(" Snag Name"));
table.addCell(new Paragraph(" Date : 25 Aug 2015"));
table.addCell(new Paragraph(" Sub Contractor : Test company 2"));
table.addCell(new Paragraph(" Status : Completed"));
table.addCell(new Paragraph(" Description : Description Description Description Description Description Description Description Description Description Description Description Description "
+ "Description"
+ "Description"
+ "Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description Description" ));

document.add(table);


// add line seperator
document.add(Chunk.NEWLINE);
LineSeparator line = new LineSeparator(1, 100, null, Element.ALIGN_CENTER, -2);
document.add(line);
document.add(Chunk.NEWLINE);

}


Toast.makeText(mActivity, "Pdf generated", Toast.LENGTH_SHORT).show();

} catch (DocumentException e) {

Log.e("pdf error", e.getMessage());

} catch (IOException e) {

Log.e("pdf error", e.getMessage());

} finally {


document.close();
try {
File file = f;
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);

}
catch (ActivityNotFoundException e){
Toast.makeText(mActivity, "No app found to open pdf", Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
// TODO: handle exception

Toast.makeText(mActivity, "Exception", Toast.LENGTH_SHORT).show();
}

}
`

引入setSplitLate()后,我的PDF是这样的sample_new.pdf这也不令人满意。

最佳答案

默认情况下,表格行不会拆分。 iText 将尝试向当前页面添加一个完整的行,如果该行不适合,它将在下一页重试。只有当它不适合下一页时,它才会拆分行。这是默认行为,因此您不应该对您在应用程序中看到的内容感到惊讶。

您可以更改此默认行为。有一种方法可以让您删除不匹配的内容(这不是您想要的),还有一种方法可以让您在行不适合当前页面时拆分行(这就是你想要的)。

你需要的方法是setSplitLate():

PdfPTable table = new PdfPTable(2);
table.setSplitLate(false);

默认情况下,setSplitLate() 的值为 true:iText 将尽可能晚地拆分行,这会导致您在文档中看到所有空白.通过将此默认值更改为 false,iText 将立即拆分行。

关于java - 在android中使用iText生成带有动态内容的pdftable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32390535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com