如何在Java中导出PDF的n个列?

时间:2014-03-24 14:25:04

标签: java pdf itext

我需要生成120列的PDF文件(所有列都应该在一个页面上)。我正在使用iText。当我生成pdf列时会重叠。

我的问题是:

1)有没有办法让水平滚动条在列之间导航?

2)我们如何防止列重叠?

我在这个网站上看到了类似的问题 (How to export n number columns as headings for PDF in Java?

但答案中提到的链接http://itext-general.2136553.n4.nabble.com/What-is-the-maximum-page-size-for-PDF-in-iText-td2150839.html%22无效

请在此建议我。

2 个答案:

答案 0 :(得分:1)

以下代码将设置页面大小。所以,如果我们有大量的列(例如:120,就像我的情况一样),它会自动显示pdf中的水平条以进行导航。

Rectangle pageSize=new Rectangle(9400f,9400f);
Document doc=new Document(pageSize);

PdfWriter writer=PdfWriter.getInstance(document,baos);
writer.setUserunit(9900f);

// To prevent overlapping of columns, set the column widths as follows

PdfPTable table=new PdfPTable(120); // 120 is number of columns in table
table.setWidths(600f);

答案 1 :(得分:0)

我遇到了类似的问题但是由于这个问题答案系列我得到了Mr.Harjinder先生所说的解决方案,但是这里有一个提示,面对同样的问题创建文档后创建文档并保持跟踪你想要的宽度和最后的水平滚动轨迹创建你的文档是示例

包含列表和水平滚动条的PDF

public class Sample {
public static void main(String[] args) {
    try {
        float indentationLeft = 20f;
        float indentationLeftTemp = 20f;
        List prtLst = new List(List.UNORDERED);
        prtLst.setListSymbol("\u2022");
        prtLst.add("P1");
        prtLst.setListSymbol("+");
        prtLst.add("P2");
        prtLst.setListSymbol("\u2022");
        List prevList= prtLst;
        for(int i=0;i<500;i++){
            List chldLst2 = new List(List.UNORDERED);
            chldLst2.setIndentationLeft(indentationLeft);
            indentationLeftTemp+=20f;
            chldLst2.setListSymbol("\u2022");
            chldLst2.add("YY"+i);
            prevList.add(chldLst2);
            prevList=chldLst2;
        }
        prtLst.add("P3");


        Document d = null;
        if(indentationLeftTemp>400f){
            Rectangle pageSize=new Rectangle(indentationLeftTemp+200f,indentationLeftTemp+200f); 
            d = new Document(pageSize);
        }else{
            d = new Document();
        }
        PdfWriter.getInstance(d, new FileOutputStream("D:/test.pdf"));
        d.open();            
        d.add(prtLst);d.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}