Memutar Halaman PDF Menggunakan C++
Topik ini menjelaskan cara memperbarui atau mengubah orientasi halaman dari halaman dalam file PDF yang sudah ada secara terprogram dengan C++.
Mengubah Orientasi Halaman
Aspose.PDF untuk C++ memungkinkan Anda untuk mengubah orientasi halaman dari landscape ke portrait dan sebaliknya. Untuk mengubah orientasi halaman, atur MediaBox halaman menggunakan potongan kode berikut. Anda juga dapat mengubah orientasi halaman dengan mengatur sudut rotasi menggunakan metode Rotate().
void ChangePageOrientation() {
String _dataDir("C:\\Samples\\");
String inputFileName("ChangeOrientation.pdf");
String outputFileName("ChangeOrientation_out.pdf");
// Membuka dokumen
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();
// Kita harus memindahkan halaman ke atas untuk mengkompensasi perubahan ukuran halaman
// (tepi bawah halaman adalah 0,0 dan informasi biasanya ditempatkan dari
// Bagian atas halaman. Itulah mengapa kita memindahkan tepi bawah ke atas pada perbedaan antara
// Tinggi lama dan baru.
double newLLY = r->get_LLY() + (r->get_Height() - newHeight);
page->set_MediaBox(MakeObject<Rectangle>(newLLX, newLLY, newLLX + newWidth, newLLY + newHeight));
// Terkadang kita juga perlu mengatur CropBox (jika diatur dalam file asli)
page->set_CropBox(MakeObject<Rectangle>(newLLX, newLLY, newLLX + newWidth, newLLY + newHeight));
// Mengatur sudut rotasi halaman
page->set_Rotate(Rotation::on90);
}
// Menyimpan file output
document->Save(_dataDir + outputFileName);
}
Menyesuaikan Konten Halaman dengan Orientasi Halaman Baru
Harap dicatat bahwa saat menggunakan potongan kode di atas, beberapa konten dokumen mungkin terpotong karena tinggi halaman berkurang. Untuk menghindari ini, tingkatkan lebar secara proporsional dan biarkan tinggi tetap. Contoh perhitungan:
void FittingPageContentToNewPageOrientation()
{
String _dataDir("C:\\Samples\\");
String inputFileName("ChangeOrientation.pdf");
String outputFileName("ChangeOrientation_out.pdf");
// Buka dokumen
auto document = MakeObject<Document>(_dataDir + inputFileName);
for (auto page : document->get_Pages())
{
auto r = page->get_MediaBox();
// Tinggi baru sama
double newHeight = r->get_Height();
// Lebar baru diperluas secara proporsional untuk membuat orientasi lanskap
// (kami berasumsi bahwa orientasi sebelumnya adalah potret)
double newWidth = r->get_Height() * r->get_Height() / r->get_Width();
// ...
}
}
Selain pendekatan di atas, pertimbangkan untuk menggunakan facade PdfPageEditor yang dapat menerapkan zoom pada konten halaman.
void ZoomPageContent()
{
String _dataDir("C:\\Samples\\");
String inputFileName("ZoomToPageContents.pdf");
String outputFileName("ZoomToPageContents_out.pdf");
// Buka dokumen
auto document = MakeObject<Document>(_dataDir + inputFileName);
// Dapatkan wilayah persegi panjang dari halaman pertama PDF
auto rect = document->get_Pages()->idx_get(1)->get_Rect();
// Instansiasi objek PdfPageEditor
auto ppe = MakeObject<Aspose::Pdf::Facades::PdfPageEditor>();
// Ikat PDF sumber
ppe->BindPdf(_dataDir + inputFileName);
// Atur koefisien zoom
ppe->set_Zoom ((float)(rect->get_Width() / rect->get_Height()));
// Perbarui ukuran halaman
ppe->set_PageSize(MakeObject<PageSize>((float)rect->get_Height(), (float)rect->get_Width()));
// Simpan file keluaran
document->Save(_dataDir + outputFileName);
}