2017-04-24 5 views
0

J'ai été capable de créer la page x de y en utilisant l'exemple de blocs de construction Chapter 7: Handling events; setting viewer preferences and writer propertiesRésolution du problème "Page X of Y". Dans l'exemple, les textes de "page x de y" sont alignés via un Canvas avec la bordure de la page. Mais très souvent est que le "x de y" doit être mis dans une table comme ceci: enter image description here"page x de y" dans une table, comment alligner le texte dans une table au lieu de la bordure de la page?

Dans de tels cas, le texte doit être alligned dans le tableau, comment faire cela? Dans ma demande, la table qui comprend la page x de y doit être affichée sur chaque page et toujours à une position fixe, c'est-à-dire à la position supérieure droite d'une page. Et le format et la taille de la table ne changeront pas pour l'ensemble du document.

+0

est-ce une table de pied de page qui est le même pour toutes les pages (sauf le numéro de page partie variable), ou est-ce un regul ar table avec des insertions de numéros de page? Veuillez fournir un aperçu un peu plus complet de ce que vous essayez d'accomplir, car la mise en œuvre dépend de l'objectif final. –

+0

Pour approfondir les remarques d'Alexey: Les exemples X de Y écrit le contenu textuel à des positions absolues dans la page en utilisant des appels api de niveau inférieur. Si votre table change de taille ou de position sur des pages différentes, cela peut ne pas être une bonne approche. C'est pourquoi nous devons en savoir un peu plus sur les grandes lignes et les objectifs de votre projet. –

+0

J'ai mis à jour la description de mon problème. La table ne changera pas de taille ou de position pour toutes les pages. Ce sera très gentil de votre part, si vous pouvez également me dire si la table va changer de position, quelle sera la solution? Remplacer les textes? – cao

Répondre

1

tout d'abord, afin d'adapter toute la table, vous voulez augmenter la marge inférieure du Document:

Document document = new Document(pdf); 
document.setBottomMargin(100); 

Après cela, vous pouvez toujours utiliser Canvas pour ajouter une table au lieu d'une paragraphe. Je vais baser la réponse sur l'exemple PageXofY auquel vous faites référence.

tout d'abord, créez une habitude Table:

Table table = new Table(UnitValue.createPercentArray(new float[] {50, 50})); 
table.addCell(new Cell(4, 1)); 
table.addCell(new Cell().add("Filename: ")); 
table.addCell(new Cell().add("Issue date: ")); 
Paragraph pageXofY = new Paragraph(). 
     add("Page " + String.valueOf(pageNumber) + " of "). 
     add(new Image(placeholder)); 
table.addCell(new Cell().add(pageXofY)); 
table.addCell(new Cell().add("Location: ")); 

Notez que nous utilisons encore un espace réservé FormXObject pour stocker le nombre total de pages.

Remplacez la side par la taille de la police, elle est 12 dans notre cas. Créer espace réservé comme ceci:

placeholder = new PdfFormXObject(new Rectangle(0, 0, 2 * side, side)); 

Faire un léger changement à la méthode writeTotal(). La position y du texte a été modifié pour -descent:

public void writeTotal(PdfDocument pdf) { 
    Canvas canvas = new Canvas(placeholder, pdf); 
    canvas.showTextAligned(String.valueOf(pdf.getNumberOfPages()), 
     0, -descent, TextAlignment.LEFT); 
} 

Maintenant, tout ce que vous devez à est d'ajouter cette table à la place sur la page:

float marginX = 36; 
Canvas canvas = new Canvas(pdfCanvas, pdf, new Rectangle(marginX, 10, pageSize.getWidth() - marginX * 2, 100)); 
canvas.add(table); 
pdfCanvas.release(); 

Le résultat ressemble à ceci:

enter image description here

+0

Magic, ça marche, merci beaucoup. Le seul très petit problème dans mon application est d'alligner le texte "Y" avec "Page X de", je dois ajuster la variable "descente" un peu dans le 'writeTotal()'. Un ** nouveau ** problème est le TOC (table des matières), lorsque les pages TOC sont retirées de la fin du document au début du document, semble que cela provoque un problème pour générer la page X de Y. Dois-je commencer un nouveau poste ou juste continuer à demander ici? – cao

+0

Je pense qu'il est préférable de commencer le nouveau poste que le problème avec TOC n'est pas lié au problème de la table de pied de page. –