我正在用java开发一个itext项目。基本上,在我的项目中,我在每个页面上动态放置了两个徽标(每个页面顶部放置一个徽标,页面底部放置一个地址图像)。但是,当我想在页面上添加一个表时,如果该表有这么多行,在某一点上,该表的行会出现在addres图像上,但我希望这些行换行到另一个页面,这样表的行和地址图像就不会混在一起。
下面是我想解释的图片:
http://img801.imageshack.us/img801/8074/tablejj.jpg
谢谢你的帮助。
这是我的主要观点:
公共静态void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
final denem2321 frame = new denem2321();
frame.setVisible(true);
// ///////////////
frame.getMntmNewMenuItem_1().addActionListener(
new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
final Teklif frame1 = new Teklif(list
.getSelectedItem(), contactName
.get(list.getSelectedItem()),
hashMapReferansNameAndUrl);
frame1.setVisible(true);
JOptionPane.showMessageDialog(
frame,
list.getSelectedItem()
+ " firması için bir teklif hazırlayınız");
String imageUrl = "/Users/nofear/workspace/deneme23/pics/a4-ust.png";
String imageUrlAlt = "pics/a4-alt.png";
try {
imageust = Image
.getInstance(imageUrl);
} catch (BadElementException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
} catch (MalformedURLException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
} catch (IOException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
}
try {
imageAlt = Image
.getInstance(imageUrlAlt);
} catch (BadElementException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
} catch (MalformedURLException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
} catch (IOException e3) {
// TODO Auto-generated catch block
e3.printStackTrace();
}
imageust.setAbsolutePosition(
0f,
document.getPageSize()
.getHeight()
- imageust
.getHeight()-15
);
imageAlt.setAbsolutePosition(
0f, 0);
System.out
.println("HEIGTG"
+ (document
.getPageSize()
.getHeight() - imageust
.getHeight()));
frame1.getButtonAl().addActionListener(
new ActionListener() {
@Override
public void actionPerformed(
ActionEvent arg0) {
try {
final PdfWriter writer = PdfWriter
.getInstance(
document,
new FileOutputStream(
"output.pdf"));
document.open();
final PdfContentByte cb = writer
.getDirectContent();
writer.setPageEvent(new PdfPageEvent() {
@Override
public void onStartPage(PdfWriter arg0, Document arg1) {
}
@Override
public void onSectionEnd(PdfWriter arg0, Document arg1, float arg2) {
// TODO Auto-generated method stub
}
@Override
public void onSection(PdfWriter arg0, Document arg1, float arg2, int arg3,
Paragraph arg4) {
// TODO Auto-generated method stub
}
@Override
public void onParagraphEnd(PdfWriter arg0, Document arg1, float arg2) {
// TODO Auto-generated method stub
}
@Override
public void onParagraph(PdfWriter arg0, Document arg1, float arg2) {
// TODO Auto-generated method stub
}
@Override
public void onOpenDocument(PdfWriter arg0, Document arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGenericTag(PdfWriter arg0, Document arg1, Rectangle arg2,
String arg3) {
// TODO Auto-generated method stub
}
@Override
public void onEndPage(PdfWriter arg0, Document arg1) {
try {
cb.addImage(imageust);
cb.addImage(imageAlt);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void onCloseDocument(PdfWriter arg0, Document arg1) {
// TODO Auto-generated method stub
}
@Override
public void onChapterEnd(PdfWriter arg0, Document arg1, float arg2) {
// TODO Auto-generated method stub
}
@Override
public void onChapter(PdfWriter arg0, Document arg1, float arg2,
Paragraph arg3) {
// TODO Auto-generated method stub
}
});
// now draw a line below
// the headline
cb.setLineWidth(1f);
cb.stroke();
// ////////////////////////////////////
try {
bfArial = BaseFont
.createFont(
"C:/Windows/Fonts/arial.ttf",
"Cp1254",
BaseFont.NOT_EMBEDDED);
} catch (DocumentException e1) {
// TODO
// Auto-generated
// catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO
// Auto-generated
// catch block
e1.printStackTrace();
}
Font baslikFont = new Font(
bfArial, 24,
Font.BOLD);
Font pdfBaslikFont = new Font(
bfArial, 16,
Font.NORMAL);
Font pdfTarihFont = new Font(
bfArial, 12,
Font.NORMAL);
Font altBaslik = new Font(
bfArial, 12,
Font.BOLD);
Font normalWritingFont = new Font(
bfArial, 12,
Font.NORMAL);
final ColumnText ct = new ColumnText(
cb);
Calendar currentDate = Calendar
.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat(
"yyyy/MMM/dd");
String dateNow = formatter
.format(currentDate
.getTime());
Phrase firmaBaslik = new Phrase(frame1.getTextField_teklifHazirlananFirmaAdi().getText(),
baslikFont);
Phrase pdfAltBaslik = new Phrase("WEB SİTESİ TASARIM ve PROGRAMLAMA ANLAŞMASI",pdfBaslikFont);
Phrase tarih = new Phrase(dateNow, pdfTarihFont);
Phrase alanAdlari = new Phrase("Sitenin Yayınlanacağı Alan Adları: ",altBaslik);
Phrase alanAdlarIcerik = new Phrase(frame1.getTextArea_alanAdlari().getText(),normalWritingFont);
Phrase webHosting = new Phrase("\n\nWebhosting & Yayınlama: ",altBaslik);
Phrase weHostingIcerik = new Phrase(frame1.getTextArea_webHosting().getText(),normalWritingFont);
Phrase siteDil = new Phrase("\n\nSitenin Dili: ",altBaslik);
Phrase siteDilIcerik = new Phrase(frame1.getTextArea_dil().getText(),normalWritingFont);
Phrase amac = new Phrase("\n\nAmaç: ",altBaslik);
Phrase amacIcerik = new Phrase(frame1.getTextArea_amac().getText(),normalWritingFont);
Phrase kullilanProgs = new Phrase("\n\nKullanılacak Programlar: ",altBaslik);
Phrase kullanilanProgsIcerik = new Phrase(frame1.getTextArea_kullanilacakProgramlar().getText(),normalWritingFont);
ct.setSimpleColumn(
firmaBaslik,
60,
750, /* width */
document.getPageSize()
.getWidth() - 40,
30,
25,
Element.ALIGN_CENTER);
ct.go();
ct.setSimpleColumn(
pdfAltBaslik,
60,
650, /* width */
document.getPageSize()
.getWidth() - 40,
30,
25,
Element.ALIGN_CENTER);
ct.go();
ct.setSimpleColumn(
tarih,
60,
625, /* width */
document.getPageSize()
.getWidth() - 40,
30,
25,
Element.ALIGN_CENTER);
ct.go();
ct.setSimpleColumn(
alanAdlari ,
60,
550, /* width */
document.getPageSize()
.getWidth() - 40,
30,
25,
Element.ALIGN_LEFT);
ct.setSimpleColumn(
alanAdlarIcerik ,
60,
550, /* width */
document.getPageSize()
.getWidth() - 40,
30,
13,
Element.ALIGN_LEFT);
ct.setSimpleColumn(
webHosting ,
60,
525, /* width */
document.getPageSize()
.getWidth() - 40,
30,
25,
Element.ALIGN_LEFT);
ct.setSimpleColumn(
weHostingIcerik ,
60,
525, /* width */
document.getPageSize()
.getWidth() - 40,
30,
13,
Element.ALIGN_LEFT);
ct.setSimpleColumn(
siteDil ,
60,
525, /* width */
document.getPageSize()
.getWidth() - 40,
30,
13,
Element.ALIGN_LEFT);
ct.setSimpleColumn(
siteDilIcerik ,
60,
525, /* width */
document.getPageSize()
.getWidth() - 40,
30,
13,
Element.ALIGN_LEFT);
ct.setSimpleColumn(
amac ,
60,
525, /* width */
document.getPageSize()
.getWidth() - 40,
30,
13,
Element.ALIGN_LEFT);
ct.setSimpleColumn(
amacIcerik ,
60,
525, /* width */
document.getPageSize()
.getWidth() - 40,
30,
13,
Element.ALIGN_LEFT);
ct.setSimpleColumn(
kullilanProgs ,
60,
525, /* width */
document.getPageSize()
.getWidth() - 40,
30,
13,
Element.ALIGN_LEFT);
ct.setSimpleColumn(
kullanilanProgsIcerik ,
60,
525, /* width */
document.getPageSize()
.getWidth() - 40,
30,
13,
Element.ALIGN_LEFT);
ct.go();
PdfPTable table = new PdfPTable(
2) ;
table.setTotalWidth(document
.getPageSize()
.getWidth() - 5);
table.getDefaultCell()
.setPadding(2);
table.getDefaultCell()
.setBorderWidth(1);
table.getDefaultCell()
.setHorizontalAlignment(
Element.ALIGN_CENTER);
float[] columnWidths = {
10f, 2f, };
try {
table.setWidths(columnWidths);
} catch (DocumentException e) {
// TODO Auto-generated
// catch block
e.printStackTrace();
}
// table.setSpacingBefore(5f);
// Code 2
table.getDefaultCell()
.setGrayFill(0.9f);
table.addCell("WEB TASARIM VE PROGRAMLAMA");
table.addCell("TUTAR");
table.getDefaultCell()
.setBackgroundColor(
new BaseColor(
255,
255,
255));
document.add(table);
document.newPage();
document.add(new Paragraph("Yeni Sayfa"));
} catch (Exception e) {
} finally {
document.close();
}
}
});
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
这是毫无疑问的。当表格不适合当前页面时,iText会自动断开表格,并将剩余部分转发到下一页。
您正在使用页面事件添加页眉和页脚,这是可以的,但是:
无论如何:你的代码写得不好。你应该把它打扫干净。例如:您定义页面事件的方式是疯狂的。您应该使用PdfPageEventHelper
。我敢肯定,除了我之外,没有其他人会更仔细地查看当前状态下的代码。把它打扫干净!
我想生成一个包含客户订单的表。(简化的)表格如下所示。如果客户有多个订单,我只需将客户信息添加到客户的第一行。因此,订单1至3属于客户1,订单4属于客户 这工作正常,除非我得到一个分页符/新页面。在这种情况下,表格如下所示: 但是我希望客户1在新页面的第一个客户单元格中重复,所以它看起来像这样: 我认为填充单元格可以通过组合页面/单元格事件来完成,但这需要将所有客户单元格的最小高度设置为填充的客户
在使用Itext的Java项目中,我创建了一个pdf文件,在这个文件中,我在另一个表的单元格中插入了一个较大的表。 我面临的问题是,当表格的内容超过一页时,表格将被带入下一页。相反,我想要上一页中的部分数据,只有超出该页的数据才需要转到下一页。 如何实现这一点,下面是我使用的代码。
问题内容: 在itext中,我有一个块/短语/段落(我不介意哪个),我想将页面上的其他位置放置在例如300 x 200的位置。我该怎么做? 问题答案: 最后,我编写了自己的方法。
我确实在google和docs中搜索了很多,但找不到解决这个问题的方法,也许你们能帮我解决这个问题吗? 我有一个来自html导出的pdf,我的表格数据在页面之间分割,请看下图: 这是一个html到pdf的转换导出,我没有在pdf中构建此表,请看: 我怎样才能解决这个问题?
问题内容: 我有一个用于收件箱的简单表,如下所示: 如何设置宽度,以便“起始日期”和“日期”分别为页面宽度的15%和“主题”为70%。我还希望表格占据整个页面的宽度。 问题答案:
问题内容: 许多人仍然使用表格来布局控件,数据等。-流行的jqGrid就是一个例子。但是,发生了一些我似乎无法理解的魔术(它的桌子大声喊叫,可能有多少魔术?) 如何设置表的列宽并使它像jqGrid那样遵守!?如果我尝试复制此内容,即使我设置了every ,只要这些单元格之一的内容大于20px,该单元格就会展开! 有什么想法或见解吗? 问题答案: 您可以尝试对所有行使用标签管理表样式,但是您需要在或