Faire Pivoter les Pages PDF en Utilisant C++
Ce sujet décrit comment mettre à jour ou changer l’orientation des pages dans un fichier PDF existant de manière programmatique avec C++.
Changer l’Orientation de la Page
Aspose.PDF pour C++ vous permet de changer l’orientation des pages de paysage à portrait et vice versa. Pour changer l’orientation de la page, définissez le MediaBox de la page en utilisant l’extrait de code suivant. Vous pouvez également changer l’orientation de la page en définissant l’angle de rotation en utilisant la méthode Rotate().
void ChangePageOrientation() {
String _dataDir("C:\\Samples\\");
String inputFileName("ChangeOrientation.pdf");
String outputFileName("ChangeOrientation_out.pdf");
// Ouvrir le document
auto document = MakeObject<Document>(_dataDir + inputFileName);
for (auto page : document->get_Pages())
{
auto r = page->get_MediaBox();
double newHeight = r->get_Width();
double newWidth = r->get_Height();
double newLLX = r->get_LLX();
// Nous devons déplacer la page vers le haut pour compenser le changement de taille de la page
// (le bord inférieur de la page est 0,0 et l'information est généralement placée depuis le
// haut de la page. C'est pourquoi nous déplaçons le bord inférieur vers le haut de la différence entre
// l'ancienne et la nouvelle hauteur.
double newLLY = r->get_LLY() + (r->get_Height() - newHeight);
page->set_MediaBox(MakeObject<Rectangle>(newLLX, newLLY, newLLX + newWidth, newLLY + newHeight));
// Parfois, nous devons également définir CropBox (s'il a été défini dans le fichier original)
page->set_CropBox(MakeObject<Rectangle>(newLLX, newLLY, newLLX + newWidth, newLLY + newHeight));
// Définition de l'angle de rotation de la page
page->set_Rotate(Rotation::on90);
}
// Enregistrer le fichier de sortie
document->Save(_dataDir + outputFileName);
}
Adapter le Contenu de la Page à la Nouvelle Orientation de Page
Veuillez noter que lorsque vous utilisez l’extrait de code ci-dessus, une partie du contenu du document pourrait être coupée en raison de la diminution de la hauteur de la page. Pour éviter cela, augmentez la largeur proportionnellement et laissez la hauteur inchangée. Exemple de calculs :
void FittingPageContentToNewPageOrientation()
{
String _dataDir("C:\\Samples\\");
String inputFileName("ChangeOrientation.pdf");
String outputFileName("ChangeOrientation_out.pdf");
// Ouvrir le document
auto document = MakeObject<Document>(_dataDir + inputFileName);
for (auto page : document->get_Pages())
{
auto r = page->get_MediaBox();
// Nouvelle hauteur identique
double newHeight = r->get_Height();
// Nouvelle largeur étendue proportionnellement pour rendre l'orientation paysage
// (nous supposons que l'orientation précédente est portrait)
double newWidth = r->get_Height() * r->get_Height() / r->get_Width();
// ...
}
}
Outre l’approche ci-dessus, envisagez d’utiliser la façade PdfPageEditor qui peut appliquer un zoom au contenu des pages.
void ZoomPageContent()
{
String _dataDir("C:\\Samples\\");
String inputFileName("ZoomToPageContents.pdf");
String outputFileName("ZoomToPageContents_out.pdf");
// Ouvrir le document
auto document = MakeObject<Document>(_dataDir + inputFileName);
// Obtenir la région rectangulaire de la première page du PDF
auto rect = document->get_Pages()->idx_get(1)->get_Rect();
// Instancier l'instance PdfPageEditor
auto ppe = MakeObject<Aspose::Pdf::Facades::PdfPageEditor>();
// Lier le PDF source
ppe->BindPdf(_dataDir + inputFileName);
// Définir le coefficient de zoom
ppe->set_Zoom ((float)(rect->get_Width() / rect->get_Height()));
// Mettre à jour la taille de la page
ppe->set_PageSize(MakeObject<PageSize>((float)rect->get_Height(), (float)rect->get_Width()));
// Enregistrer le fichier de sortie
document->Save(_dataDir + outputFileName);
}