2016-08-28 2 views
-1

J'ai deux objets utilisateur en Java avec l'ID de données, nom, prénom, deuxième prénom, pays, zone, district etc. et je veux écrire leurs données à un fichier pdf (iText7 pdf) dans une colonne séparée. Aucun conseil!En utilisant iText 7 en java, comment puis-je écrire des données dans deux colonnes différentes

Mon code est:

Classe utilisateur:

private int id ; 
private String name ; 
private String middleName; 
private String surname ; 
private String email; 
private String country; 
private String zone; 
private String district; 
private String city; 
private String tole; 
private int zip_code; 

public int getId() { 
    return id; 
} 
public void setId(int id) { 
    this.id = id; 
} 
public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
public String getMiddleName() { 
    return middleName; 
} 
public void setMiddleName(String middleName) { 
    this.middleName = middleName; 
} 
public String getSurname() { 
    return surname; 
} 
public void setSurname(String surname) { 
    this.surname = surname; 
} 
public String getEmail() { 
    return email; 
} 
public void setEmail(String email) { 
    this.email = email; 
} 
public String getCountry() { 
    return country; 
} 
public void setCountry(String country) { 
    this.country = country; 
} 
public String getZone() { 
    return zone; 
} 
public void setZone(String zone) { 
    this.zone = zone; 
} 
public String getDistrict() { 
    return district; 
} 
public void setDistrict(String district) { 
    this.district = district; 
} 
public String getCity() { 
    return city; 
} 
public void setCity(String city) { 
    this.city = city; 
} 
public String getTole() { 
    return tole; 
} 
public void setTole(String tole) { 
    this.tole = tole; 
} 
public int getZip_code() { 
    return zip_code; 
} 
public void setZip_code(int zip_code) { 
    this.zip_code = zip_code; 
} 

JptTut Classe

public static final String DEST = "result/jpt.pdf"; 

public void createPdf(List<User> users) throws IOException{ 

     int i = 0; 

     File file = new File(DEST); 
     file.getParentFile().mkdir(); 

     PdfDocument pdf = new PdfDocument(new PdfWriter(DEST)); 

     PageSize ps = PageSize.A4; 
     float topBottom = 100; 
     float offset = 20; 
     float margin = 10; 
     int colWidth = (int) ((ps.getWidth()-2*offset-2*margin)/3); 
     int colHeight = (int) (ps.getHeight()-2*topBottom); 

     PdfPage page = pdf.addNewPage(ps); 
     PdfCanvas pdfCanvas = new PdfCanvas(page); 

     Rectangle rectangle1 = new Rectangle(20,topBottom,colWidth,colHeight); 
     Rectangle rectangle2 = new  Rectangle(208,topBottom,colWidth,colHeight); 
     Rectangle rectangle3 = new Rectangle(396,topBottom,colWidth,colHeight); 

     pdfCanvas.rectangle(rectangle1); 
     pdfCanvas.rectangle(rectangle2); 
     pdfCanvas.rectangle(rectangle3); 

     Canvas canvas1 = new Canvas(pdfCanvas, pdf, rectangle1); 
     Canvas canvas2 = new Canvas(pdfCanvas,pdf,rectangle2); 
     Canvas canvas3 = new Canvas(pdfCanvas,pdf,rectangle3); 

     Paragraph p1 = new Paragraph("Details").setFontColor(Color.BLUE).setFontSize(20); 
     Paragraph p2 = new Paragraph("User ID :"); 
     Paragraph p3 = new Paragraph("User Name :"); 
     Paragraph p4 = new Paragraph("Surname :"); 
     Paragraph p5 = new Paragraph("Middle Name :"); 
     Paragraph p6 = new Paragraph("Email :"); 
     Paragraph p7 = new Paragraph("Country :"); 
     Paragraph p8 = new Paragraph("Zone :"); 
     Paragraph p9 = new Paragraph("District :"); 
     Paragraph p10 = new Paragraph("City :"); 
     Paragraph p11 = new Paragraph("Tole :"); 
     Paragraph p12 = new Paragraph("Zip Code :"); 

    canvas1.add(p1).add(p2).add(p3).add(p4).add(p5).add(p6).add(p7).add(p8).add(p9).add(p10).add(p11).add(p12); 

for(User user:users){ 

     if(i==0){ 
       Paragraph para0 = new Paragraph("To ").setFontColor(Color.GREEN).setFontSize(20); 
       Paragraph para1 = new Paragraph(Integer.toString(user.getId())); 
       Paragraph para2 = new Paragraph(user.getName()); 
       Paragraph para3 = new Paragraph(user.getSurname()); 
       Paragraph para4 = new Paragraph(user.getMiddleName()); 
       Paragraph para5 = new Paragraph(user.getEmail()); 
       Paragraph para6 = new Paragraph(user.getCountry()); 
       Paragraph para7 = new Paragraph(user.getZone()); 
       Paragraph para8 = new Paragraph(user.getDistrict()); 
       Paragraph para9 = new Paragraph(user.getCity()); 
       Paragraph para10 = new Paragraph(user.getTole()); 
       Paragraph para11 = new Paragraph(Integer.toString(user.getZip_code())); 

     canvas2.add(para0).add(para1).add(para2).add(para3).add(para4).add(para5).add(para6).add(para7).add(para8).add(para9).add(para10).add(para11); 
       i++; 
     } 
     else{ 

      Paragraph para0 = new Paragraph("From ").setFontColor(Color.MAGENTA).setFontSize(20); 
       Paragraph para1 = new Paragraph(Integer.toString(user.getId())); 
       Paragraph para2 = new Paragraph(user.getName()); 
       Paragraph para3 = new Paragraph(user.getSurname()); 
       Paragraph para4 = new Paragraph(user.getMiddleName()); 
       Paragraph para5 = new Paragraph(user.getEmail()); 
       Paragraph para6 = new Paragraph(user.getCountry()); 
       Paragraph para7 = new Paragraph(user.getZone()); 
       Paragraph para8 = new Paragraph(user.getDistrict()); 
       Paragraph para9 = new Paragraph(user.getCity()); 
       Paragraph para10 = new Paragraph(user.getTole()); 
       Paragraph para11 = new Paragraph(Integer.toString(user.getZip_code())); 

     canvas3.add(para0).add(para1).add(para2).add(para3).add(para4).add(para5).add(para6).add(para7).add(para8).add(para9).add(para10).add(para11); 

     } 
     } 


     pdf.close();  

} 

}

TestClass

public static void main(String[] args) throws IOException { 

    User user1 = new User(); 
    user1.setId(1); 
    user1.setName("Kamal"); 
    user1.setSurname("Rana"); 
    user1.setMiddleName("Magar"); 
    user1.setEmail("[email protected]"); 
    user1.setCountry("Nepal"); 
    user1.setZone("Bagmati"); 
    user1.setDistrict("Kathmandu"); 
    user1.setCity("Patan"); 
    user1.setTole("kumaripati"); 
    user1.setZip_code(234); 

    User user2 = new User(); 
    user2.setId(2); 
    user2.setName("Santosh"); 
    user2.setSurname("Shrestha"); 
    user2.setMiddleName("Kumar"); 
    user2.setEmail("[email protected]"); 
    user2.setCountry("Nepal"); 
    user2.setZone("Lumbini"); 
    user2.setDistrict("Nawalparasi"); 
    user2.setCity("Pragatinagar"); 
    user2.setTole("Bagwati Tole"); 
    user2.setZip_code(432); 

    List<User> users = new ArrayList<User>(); 
    users.add(user1); 
    users.add(user2); 

    new JptTut().createPdf(users); 

} 

}

+0

Montrez ce que vous avez essayé. Posez des questions spécifiques, pas seulement "Tout conseil". –

+1

Je ne rejette pas les gens avec une réputation de 1, mais cette question mérite vraiment les votes négatifs qu'elle a reçus. Rohit devrait lire le tutoriel [iText: Building Blocks] (http://developers.itextpdf.com/content/itext-7-building-blocks/) et essayer les exemples, par exemple les exemples du chapitre 7 traitant des tables. –

+0

Votre code a l'air de fonctionner, mais pourquoi le feriez-vous de cette façon? Dès qu'une propriété d'un utilisateur ne tient pas sur une ligne, votre mise en page sera erronée. Aussi: maintenant vous avez partagé beaucoup de code, mais quel est le problème? Pouvez-vous expliquer ce qui ne va pas? –

Répondre

2

Votre question est pas assez précis, mais permettez-moi de faire quelques suppositions.

J'ai créé un exemple nommé KeyValueTable qui écrit les données d'un objet utilisateur au format PDF dans deux colonnes. Le résultat ressemble à ceci:

enter image description here

Vous dites J'ai deux objets utilisateur en java avec l'identifiant de données, nom, ...

Je suppose que la classe pour un tel objet utilisateur est un POJO comme ceci:

class UserObject { 

    protected String name; 
    protected String id; 
    protected int reputation; 
    protected String jobtitle; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public int getReputation() { 
     return reputation; 
    } 

    public void setReputation(int reputation) { 
     this.reputation = reputation; 
    } 

    public String getJobtitle() { 
     return jobtitle; 
    } 

    public void setJobtitle(String jobtitle) { 
     this.jobtitle = jobtitle; 
    } 
} 

vous dites que vous avez deux de ces objets, par exemple:

UserObject rohit = new UserObject(); 
rohit.setName("Rohit"); 
rohit.setId("6633429"); 
rohit.setReputation(1); 
rohit.setJobtitle("Copy/paste artist"); 

UserObject bruno = new UserObject(); 
bruno.setName("Bruno Lowagie"); 
bruno.setId("1622493"); 
bruno.setReputation(42690); 
bruno.setJobtitle("Java Rockstar"); 

Ensuite, vous dites Je veux écrire leurs données dans un PDF dans deux colonnes distinctes. Je suppose que vous voulez créer une table, avec la clé dans une colonne et la valeur correspondante dans une autre colonne. C'est facile, vous devez créer un Table comme décrit dans chapter 5 du tutoriel iText 7: Building Blocks:

public Table createTable(UserObject user) { 
    Table table = new Table(2); 
    table.setWidthPercent(30).setMarginBottom(10); 
    table.addHeaderCell(new Cell().setFont(bold).add("Key")); 
    table.addHeaderCell(new Cell().setFont(bold).add("Value")); 
    table.addCell(new Cell().setFont(bold).add("Name")); 
    table.addCell(new Cell().setFont(regular).add(user.getName())); 
    table.addCell(new Cell().setFont(bold).add("Id")); 
    table.addCell(new Cell().setFont(regular).add(user.getId())); 
    table.addCell(new Cell().setFont(bold).add("Reputation")); 
    table.addCell(new Cell().setFont(regular).add(String.valueOf(user.getReputation()))); 
    table.addCell(new Cell().setFont(bold).add("Job title")); 
    table.addCell(new Cell().setFont(regular).add(user.getJobtitle())); 
    return table; 
} 

Maintenant que nous avons une méthode qui convertit un UserObject à un Table, nous pouvons utiliser cette méthode pour rendre ces objets utilisateur à PDF:

PdfDocument pdf = new PdfDocument(new PdfWriter(dest)); 
Document document = new Document(pdf); 
document.add(createTable(rohit)); 
document.add(createTable(bruno)); 
document.close(); 

C'est aussi simple que cela. Pourquoi as-tu demandé? Y avait-il quelque chose qui n'était pas clair dans la documentation? Quel était votre problème?

Bien sûr: peut-être vous voulez les données utilisateur de rohit et bruno l'un à côté de l'autre. C'est expliqué dans le deuxième chapitre du tutoriel. Dans tous les cas: réparez votre question; lisez la documentation.

Mise à jour:

Il semble que vous créez trois colonnes.Dans la première colonne, vous ajoutez des mots-clés, dans les deuxième et troisième colonnes, vous ajoutez les valeurs correspondant à ces mots-clés. Vous comptez sur le fait qu'aucune donnée ne prendra plus d'une ligne dans sa colonne. Ce n'est pas un pari sûr. Peut-être que c'est OK pour l'instant, mais vous ne pouvez pas prédire ce qui sera nécessaire dans le futur.

J'ai adapté mon exemple; voir KeyValueTable2. Les données sont maintenant rendu comme ceci:

enter image description here

La méthode createTable() ressemble maintenant à ceci:

public Table createTable(UserObject user1, UserObject user2) { 
    if (user1 == null) user1 = new UserObject(); 
    if (user2 == null) user2 = new UserObject(); 
    Table table = new Table(3); 
    table.addCell(new Cell().setBorder(Border.NO_BORDER).setFont(bold).add("Name:")); 
    table.addCell(new Cell().setBorder(Border.NO_BORDER).setFont(regular).add(user1.getName())); 
    table.addCell(new Cell().setBorder(Border.NO_BORDER).setFont(regular).add(user2.getName())); 
    table.addCell(new Cell().setBorder(Border.NO_BORDER).setFont(bold).add("Id:")); 
    table.addCell(new Cell().setBorder(Border.NO_BORDER).setFont(regular).add(user1.getId())); 
    table.addCell(new Cell().setBorder(Border.NO_BORDER).setFont(regular).add(user2.getId())); 
    table.addCell(new Cell().setBorder(Border.NO_BORDER).setFont(bold).add("Reputation:")); 
    table.addCell(new Cell().setBorder(Border.NO_BORDER).setFont(regular).add(String.valueOf(user1.getReputation()))); 
    table.addCell(new Cell().setBorder(Border.NO_BORDER).setFont(regular).add(String.valueOf(user2.getReputation()))); 
    table.addCell(new Cell().setBorder(Border.NO_BORDER).setFont(bold).add("Job title:")); 
    table.addCell(new Cell().setBorder(Border.NO_BORDER).setFont(regular).add(user1.getJobtitle())); 
    table.addCell(new Cell().setBorder(Border.NO_BORDER).setFont(regular).add(user2.getJobtitle())); 
    return table; 
} 

Je l'appelle comme ceci:

document.add(createTable(rohit, bruno)); 

Je pense que c'est ce que vous Je veux être en mesure de réussir, et je suis à peu près certain que la classe Table est bien mieux adaptée à vos besoins que ce que vous avez essayé jusqu'ici.

+0

En fait, j'ai une classe User comme – Rohit

+0

@Rohit J'ai mis à jour ma réponse. J'ai vu votre code et même si cela peut fonctionner (vous n'avez pas dit ce qui ne va pas), je n'ai pas aimé votre approche. Utiliser une 'Table' pour ce genre de travail est bien meilleur. –