J'utilise itextpdf pour fusionner certains fichiers PDF en un seul. Que signifient les paramètres d'itextpdf pdfcontentbyte addtemplate, il n'y a pas de document pour les décrire.Quelles sont les significations de itextpdf pdfcontentbyte les paramètres d'addtemplate
Répondre
public void addTemplate(PdfTemplate template,
double a, double b, double c, double d, double e, double f)
Les six valeurs a
, b
, c
, d
, e
et f
sont des éléments d'une matrice qui comporte trois lignes et trois colonnes.
Vous pouvez utiliser cette matrice pour exprimer une transformation dans un système à deux dimentionnelle.
La réalisation de ce résultat de multiplication dans ce:
x' = a * x + c * y + e
y' = b * x + d * y + f
La troisième colonne dans la matrice est fixée: vous travaillez en deux dimensions, de sorte que vous n'avez pas besoin de calculer une nouvelle coordonnée z. Lorsque vous étudiez la géométrie analytique à l'école secondaire, vous avez probablement appris à appliquer des transformations aux objets. En PDF, nous utilisons une approche légèrement différente: au lieu de transformer des objets, nous transformons le système de coordonnées. La valeur e
et la valeur f
peuvent être utilisées pour une traduction. Les valeurs a
, b
, c
et d
peuvent être utilisées pour une opération de rotation et/ou de mise à l'échelle.
Par défaut est la matrice de transformation actuelle (CTM):
Avec la méthode addTemplate()
, vous pouvez ajouter un formulaire XObject à une toile et définir une position à l'aide e
, f
, par exemple:
canvas.addTemplate(template, 36, 36);
Ce w ajouter template
à la coordonnée x = 36; y = 36.
En introduisant a
, b
, c
et d
, vous pouvez également faire pivoter et/ou l'échelle de la template
.
Mise à jour: comme mentionné dans les commentaires, vous pouvez utiliser les méthodes surchargées qui acceptent un paramètre AffineTransform
si vous ne l'aimez pas l'algèbre de la matrice de transformation.
le code ci-dessous a fait l'affaire, merci pour les gars qui m'ont aidé.
FileInputStream pdfInput = new FileInputStream(pdf);
PdfReader pdfReader = new PdfReader(pdfInput);
for (int index = 1; index <= pdfReader.getNumberOfPages(); index++) {
main.newPage();
PdfImportedPage page = pdfWriter.getImportedPage(pdfReader,
index);
Rectangle pagesize = pdfReader.getPageSizeWithRotation(index);
float oWidth = pagesize.getWidth();
float oHeight = pagesize.getHeight();
float scale = getScale(oWidth, oHeight);
float scaledWidth = oWidth * scale;
float scaledHeight = oHeight * scale;
int rotation = pagesize.getRotation();
AffineTransform transform = new AffineTransform(scale, 0, 0, scale, 0, 0);
switch (rotation) {
case 0:
cb.addTemplate(page, transform);
break;
case 90:
AffineTransform rotate90 = new AffineTransform(0, -1f, 1f, 0, 0, scaledHeight);
rotate90.concatenate(transform);
cb.addTemplate(page, rotate90);
break;
case 180:
AffineTransform rotate180 = new AffineTransform(-1f, 0, 0, -1f, scaledWidth,
scaledHeight);
rotate180.concatenate(transform);
cb.addTemplate(page, rotate180);
break;
case 270:
AffineTransform rotate270 = new AffineTransform(0, 1f, -1f, 0, scaledWidth, 0);
rotate270.concatenate(transform);
cb.addTemplate(page, rotate270);
break;
default:
cb.addTemplate(page, scale, 0, 0, scale, 0, 0);
}
}
private static float getScale(float width, float height) {
float scaleX = PageSize.A4.getWidth()/width;
float scaleY = PageSize.A4.getHeight()/height;
return Math.min(scaleX, scaleY);
}
Qu'y a-t-il dans les Javadocs? –
Il est également expliqué en détail dans le livre iText 5: http://what-when-how.com/itext-5/overview-of-the-graphics-state-methods-part-2-itext-5/ –