Membuat atau Menambahkan Tabel Dalam PDF
Membuat Tabel menggunakan C++
Tabel penting saat bekerja dengan dokumen PDF. Mereka menyediakan fitur hebat untuk menampilkan informasi secara sistematis.
Tabel dalam dokumen PDF mengatur data dalam baris dan kolom secara sistematis. API Aspose.PDF untuk C++ memungkinkan Anda menambahkan tabel ke dokumen PDF, dan menambahkan baris dan kolom ke dalamnya di aplikasi C++ Anda. Kelas Table digunakan untuk menambahkan tabel ke dokumen. Langkah-langkah berikut dapat diikuti untuk menambahkan tabel ke dokumen PDF menggunakan C++.
Menambahkan Tabel dalam Dokumen PDF yang Ada
Untuk menambahkan tabel ke file PDF yang sudah ada dengan Aspose.PDF untuk C++, lakukan langkah-langkah berikut:
- Muat file sumber.
- Inisialisasi tabel dan atur kolom serta barisnya.
- Atur pengaturan tabel (kami telah mengatur batasan).
- Isi tabel.
- Tambahkan tabel ke halaman.
- Simpan file.
Cuplikan kode berikut menunjukkan cara menambahkan teks dalam file PDF yang ada.
Headers
#include <system/date_time.h>
#include <system/io/file.h>
#include <system/console.h>
#include <data/data_table.h>
#include <data/data_column_collection.h>
#include <system/type_info.h>
#include <Aspose.PDF.Cpp/Document.h>
#include <Aspose.PDF.Cpp/Page.h>
#include <Aspose.PDF.Cpp/PageCollection.h>
#include <Aspose.PDF.Cpp/Generator/Paragraphs.h>
#include <Aspose.PDF.Cpp/Generator/BorderSide.h>
#include <Aspose.PDF.Cpp/Generator/BorderInfo.h>
#include <Aspose.PDF.Cpp/Generator/PageInfo.h>
#include <Aspose.PDF.Cpp/Generator/MarginInfo.h>
#include <Aspose.PDF.Cpp/Generator/GraphInfo.h>
#include <Aspose.PDF.Cpp/Generator/BorderCornerStyle.h>
#include <Aspose.PDF.Cpp/Generator/ColumnAdjustment.h>
#include <Aspose.PDF.Cpp/Generator/ImageFileType.h>
#include <Aspose.PDF.Cpp/Generator/Image.h>
#include <Aspose.PDF.Cpp/Generator/HtmlFragment.h>
#include <Aspose.PDF.Cpp/Text/TextFragment.h>
#include <Aspose.PDF.Cpp/Color.h>
#include <Aspose.PDF.Cpp/Table/Table.h>
#include <Aspose.PDF.Cpp/Table/Row.h>
#include <Aspose.PDF.Cpp/Table/Rows.h>
#include <Aspose.PDF.Cpp/Table/Cell.h>
#include <Aspose.PDF.Cpp/Table/Cells.h>
Sample
using namespace System;
using namespace Aspose::Pdf;
void AddingTableInExistingPDFDocument() {
String _dataDir("C:\\Samples\\");
// Memuat dokumen PDF sumber
auto document = MakeObject<Document>(_dataDir + u"AddTable.pdf");
// Menginisialisasi instance baru dari Tabel
auto table = MakeObject<Table>();
// Mengatur warna batas tabel sebagai LightGray
table->set_Border(MakeObject<Aspose::Pdf::BorderInfo>(
Aspose::Pdf::BorderSide::All, .5f,
Aspose::Pdf::Color::get_LightGray()));
// Mengatur batas untuk sel tabel
table->set_DefaultCellBorder (MakeObject<Aspose::Pdf::BorderInfo>(
Aspose::Pdf::BorderSide::All, .5f,
Aspose::Pdf::Color::get_LightGray()));
// Membuat loop untuk menambahkan 10 baris
for (int row_count = 1; row_count < 10; row_count++)
{
// Menambahkan baris ke tabel
auto row = table->get_Rows()->Add();
// Menambahkan sel tabel
row->get_Cells()->Add(String::Format(u"Kolom ({0}, 1)", row_count));
row->get_Cells()->Add(String::Format(u"Kolom ({0}, 2)", row_count));
row->get_Cells()->Add(String::Format(u"Kolom ({0}, 3)", row_count));
}
// Menambahkan objek tabel ke halaman pertama dokumen input
document->get_Pages()->idx_get(1)->get_Paragraphs()->Add(table);
// Menyimpan dokumen yang diperbarui yang mengandung objek tabel
document->Save(_dataDir + u"document_with_table_out.pdf");
}
ColSpan dan RowSpan dalam Tabel
Aspose.PDF untuk C++ menyajikan properti ColSpan untuk menggabungkan kolom dalam tabel dan properti RowSpan untuk menggabungkan baris.
Kami menggunakan properti ColSpan atau RowSpan pada objek Cell yang membuat sel tabel. Setelah menerapkan properti yang diperlukan, sel yang dibuat dapat ditambahkan ke tabel.
void AddTable_RowColSpan()
{
String _dataDir("C:\\Samples\\");
// Muat dokumen PDF sumber
auto document = MakeObject<Document>();
document->get_Pages()->Add();
// Inisialisasi instance baru dari Tabel
auto table = MakeObject<Table>();
// Atur warna batas tabel sebagai LightGray
table->set_Border(MakeObject<Aspose::Pdf::BorderInfo>(
Aspose::Pdf::BorderSide::All, .5f,
Color::get_Black()));
// Atur batas untuk sel tabel
table->set_DefaultCellBorder(
MakeObject<Aspose::Pdf::BorderInfo>(
Aspose::Pdf::BorderSide::All, .5f,
Color::get_Black()));
// Tambahkan baris 1 ke tabel
auto row1 = table->get_Rows()->Add();
for (int cellCount = 1; cellCount < 5; cellCount++)
{
// Tambahkan sel tabel
row1->get_Cells()->Add(String::Format(u"Test 1 {0}", cellCount));
}
// Tambahkan baris 2 ke tabel
auto row2 = table->get_Rows()->Add();
row2->get_Cells()->Add(u"Test 2 1");
auto cell = row2->get_Cells()->Add(u"Test 2 2");
cell->set_ColSpan(2);
row2->get_Cells()->Add(u"Test 2 4");
// Tambahkan baris 3 ke tabel
auto row3 = table->get_Rows()->Add();
row3->get_Cells()->Add(u"Test 3 1");
row3->get_Cells()->Add(u"Test 3 2");
row3->get_Cells()->Add(u"Test 3 3");
row3->get_Cells()->Add(u"Test 3 4");
// Tambahkan baris 4 ke tabel
auto row4 = table->get_Rows()->Add();
row4->get_Cells()->Add(u"Test 4 1");
cell = row4->get_Cells()->Add(u"Test 4 2");
cell->set_RowSpan (2);
row4->get_Cells()->Add(u"Test 4 3");
row4->get_Cells()->Add(u"Test 4 4");
// Tambahkan baris 5 ke tabel
auto row5 = table->get_Rows()->Add();
row5->get_Cells()->Add(u"Test 5 1");
row5->get_Cells()->Add(u"Test 5 3");
row5->get_Cells()->Add(u"Test 5 4");
// Tambahkan objek tabel ke halaman pertama dokumen input
document->get_Pages()->idx_get(1)->get_Paragraphs()->Add(table);
// Simpan dokumen yang diperbarui yang berisi objek tabel
document->Save(_dataDir + u"document_with_table_out.pdf");
}
Hasil eksekusi kode di bawah ini adalah tabel yang digambarkan pada gambar berikut:
Bekerja dengan Borders, Margins dan Padding
Perhatikan bahwa ini juga mendukung fungsi pengaturan border, margins, dan padding sel untuk tabel, mari kita pahami terlebih dahulu konsep dari borders, margins, dan padding, yang disajikan dalam diagram di bawah ini:
Periksa gambar secara detail. Ini menunjukkan bahwa borders dari tabel, baris, dan sel saling tumpang tindih. Menggunakan Aspose.PDF untuk C++ tabel dapat memiliki margins dan sel dapat memiliki indentasi. Untuk mengatur margins sel, kita harus mengatur padding sel.
Borders
Untuk mengatur borders dari objek Table, Row dan Cell, gunakan properti Table.Border, Row.Border dan Cell.Border. Perbatasan sel juga dapat diatur menggunakan properti DefaultCellBorder kelas Table atau Row. Semua properti terkait perbatasan yang dibahas di atas diberikan pada instance kelas Row, yang dibuat dengan memanggil konstruktornya. Kelas Row memiliki banyak overload yang mengambil hampir semua parameter yang diperlukan untuk menyesuaikan perbatasan.
Margin atau Padding
Padding sel dapat diatur menggunakan properti DefaultCellPadding kelas Table. Semua properti terkait padding diberikan pada instance kelas MarginInfo yang mengambil informasi tentang parameter Left
, Right
, Top
, dan Bottom
untuk membuat margin kustom.
void AddTable_MergingPadding() {
String _dataDir("C:\\Samples\\");
// Instansiasi objek Document dengan memanggil konstruktor kosongnya
auto document = MakeObject<Document>();
auto page = document->get_Pages()->Add();
// Instansiasi objek tabel
auto tab1 = MakeObject<Table>();
// Tambahkan tabel dalam koleksi paragraf dari bagian yang diinginkan
page->get_Paragraphs()->Add(tab1);
// Atur lebar kolom tabel
tab1->set_ColumnWidths (u"50 50 50");
// Atur perbatasan sel default menggunakan objek BorderInfo
tab1->set_DefaultCellBorder (
MakeObject<Aspose::Pdf::BorderInfo>(
Aspose::Pdf::BorderSide::All, 0.1F));
// Atur perbatasan tabel menggunakan objek BorderInfo yang disesuaikan lainnya
tab1->set_Border (
MakeObject<Aspose::Pdf::BorderInfo>(
Aspose::Pdf::BorderSide::All, 1.0F));
// Buat objek MarginInfo dan atur margin kiri, bawah, kanan, dan atasnya
auto margin = MakeObject<MarginInfo>();
margin->set_Top (5.0f);
margin->set_Left (5.0f);
margin->set_Right (5.0f);
margin->set_Bottom (5.0f);
// Atur padding sel default ke objek MarginInfo
tab1->set_DefaultCellPadding (margin);
// Buat baris dalam tabel dan kemudian sel dalam baris
auto row1 = tab1->get_Rows()->Add();
row1->get_Cells()->Add(u"col1");
row1->get_Cells()->Add(u"col2");
row1->get_Cells()->Add();
auto mytext = MakeObject<Aspose::Pdf::Text::TextFragment>(u"col3 dengan string teks besar");
row1->get_Cells()->idx_get(2)->get_Paragraphs()->Add(mytext);
row1->get_Cells()->idx_get(2)->set_IsWordWrapped(false);
auto row2 = tab1->get_Rows()->Add();
row2->get_Cells()->Add(u"item1");
row2->get_Cells()->Add(u"item2");
row2->get_Cells()->Add(u"item3");
// Simpan Pdf
document->Save(_dataDir + u"MarginsOrPadding_out.pdf");
}
Untuk membuat tabel dengan sudut melengkung, gunakan kelas BorderInfo nilai RoundedBorderRadius dan atur gaya sudut tabel ke bulat.
void AddTable_RoundedBorderRadius()
{
// Jalur ke direktori dokumen.
String _dataDir("C:\\Samples\\");
auto tab1 = MakeObject<Aspose::Pdf::Table>();
auto graph = MakeObject<GraphInfo>();
graph->set_Color(Color::get_Red());
// Buat objek BorderInfo kosong
auto bInfo = MakeObject<BorderInfo>(BorderSide::All, graph);
// Atur batas menjadi batas melengkung di mana radius lengkung adalah 15
bInfo->set_RoundedBorderRadius(15);
// Atur gaya Sudut tabel sebagai Bulat.
tab1->set_CornerStyle (Aspose::Pdf::BorderCornerStyle::Round);
// Atur informasi batas tabel
tab1->set_Border(bInfo);
}
Properti AutoFitToWindow dalam enumerasi ColumnAdjustmentType
void AddTable_AutoFitToWindow() {
// Jalur ke direktori dokumen.
String _dataDir("C:\\Samples\\");
// Instansiasi objek Pdf dengan memanggil konstruktor kosongnya
auto document = MakeObject<Document>();
// Buat bagian dalam objek Pdf
auto sec1 = document->get_Pages()->Add();
// Instansiasi objek tabel
auto tab1 = MakeObject<Aspose::Pdf::Table>();
// Tambahkan tabel dalam koleksi paragraf dari bagian yang diinginkan
sec1->get_Paragraphs()->Add(tab1);
// Atur dengan lebar kolom tabel
tab1->set_ColumnWidths (u"50 50 50");
tab1->set_ColumnAdjustment (ColumnAdjustment::AutoFitToWindow);
// Atur batas sel default menggunakan objek BorderInfo
tab1->set_DefaultCellBorder(MakeObject<BorderInfo>(Aspose::Pdf::BorderSide::All, 0.1F));
// Atur batas tabel menggunakan objek BorderInfo yang dikustomisasi lainnya
tab1->set_Border (MakeObject<BorderInfo>(Aspose::Pdf::BorderSide::All, 1.0F));
// Buat objek MarginInfo dan atur margin kiri, bawah, kanan, dan atasnya
auto margin = MakeObject<MarginInfo>();
margin->set_Top(5.0f);
margin->set_Left(5.0f);
margin->set_Right(5.0f);
margin->set_Bottom(5.0f);
// Atur padding sel default ke objek MarginInfo
tab1->set_DefaultCellPadding(margin);
// Buat baris dalam tabel dan kemudian sel dalam baris
auto row1 = tab1->get_Rows()->Add();
row1->get_Cells()->Add(u"col1");
row1->get_Cells()->Add(u"col2");
row1->get_Cells()->Add(u"col3");
auto row2 = tab1->get_Rows()->Add();
row2->get_Cells()->Add(u"item1");
row2->get_Cells()->Add(u"item2");
row2->get_Cells()->Add(u"item3");
// Simpan dokumen yang diperbarui yang berisi objek tabel
document->Save(_dataDir + u"AutoFitToWindow_out.pdf");
}
Dapatkan Lebar Tabel
Ada tugas di mana Anda perlu mendapatkan lebar tabel secara dinamis. Kelas Aspose.PDF.Table memiliki metode GetWidth untuk tujuan ini. Sebagai contoh, Anda belum secara eksplisit menetapkan lebar kolom tabel, dan Anda belum menetapkan ColumnAdjustment ke AutoFitToContent. Dalam hal ini, Anda dapat mendapatkan lebar tabel berikutnya.
void GetTableWidth() {
// Buat dokumen baru
auto document = MakeObject<Document>();
// Tambahkan halaman dalam dokumen
auto page = document->get_Pages()->Add();
// Inisialisasi tabel baru
auto table = MakeObject<Table>();
table->set_ColumnAdjustment(ColumnAdjustment::AutoFitToContent);
// Tambahkan baris dalam tabel
auto row = table->get_Rows()->Add();
// Tambahkan sel dalam tabel
auto cell = row->get_Cells()->Add(u"Teks Sel 1");
cell = row->get_Cells()->Add(u"Teks Sel 2");
// Dapatkan lebar tabel
Console::WriteLine(table->GetWidth());
}
Tambahkan Gambar SVG ke Sel Tabel
Aspose.PDF untuk C++ memungkinkan Anda menambahkan sel tabel ke file PDF. Ketika Anda membuat tabel, Anda dapat menambahkan teks atau gambar ke sel. Selain itu, API juga menawarkan fitur untuk mengonversi file SVG ke PDF. Dengan menggunakan kombinasi fungsi-fungsi ini, dimungkinkan untuk memuat gambar SVG dan menambahkannya ke sel tabel.
Cuplikan kode berikut menunjukkan langkah-langkah untuk membuat tabel dan menambahkan gambar SVG ke sel tabel.
void InsertSVGObject()
{
String _dataDir("C:\\Samples\\");
// Membuat objek Dokumen
auto document = MakeObject<Document>();
// Membuat instance gambar
auto img = MakeObject<Aspose::Pdf::Image>();
// Menetapkan tipe gambar sebagai SVG
img->set_FileType(Aspose::Pdf::ImageFileType::Svg);
// Jalur untuk file sumber
img->set_File (_dataDir + u"SVGToPDF.svg");
// Menetapkan lebar untuk instance gambar
img->set_FixWidth (50);
// Menetapkan tinggi untuk instance gambar
img->set_FixHeight(50);
// Membuat instance tabel
auto table = MakeObject<Aspose::Pdf::Table>();
// Menetapkan lebar untuk sel tabel
table->set_ColumnWidths (u"100 100");
// Membuat objek baris dan menambahkannya ke instance tabel
auto row = table->get_Rows()->Add();
// Membuat objek sel dan menambahkannya ke instance baris
auto cell = row->get_Cells()->Add();
// Menambahkan fragmen teks ke koleksi paragraf dari objek sel
cell->get_Paragraphs()->Add(MakeObject<Aspose::Pdf::Text::TextFragment>(u"First cell"));
// Menambahkan sel lain ke objek baris
cell = row->get_Cells()->Add();
// Menambahkan gambar SVG ke koleksi paragraf dari instance sel yang baru ditambahkan
cell->get_Paragraphs()->Add(img);
// Membuat objek halaman dan menambahkannya ke koleksi halaman dari instance dokumen
auto page = document->get_Pages()->Add();
// Menambahkan tabel ke koleksi paragraf dari objek halaman
page->get_Paragraphs()->Add(table);
// Menyimpan file PDF
document->Save(_dataDir + u"AddSVGObject_out.pdf");
}
Menggunakan Tag HTML di dalam Tabel
Untuk beberapa tugas, Anda perlu mengimpor konten basis data dengan beberapa tag HTML dan kemudian mengimpor konten tersebut ke dalam objek Tabel. Saat mengimpor konten, tag HTML harus ditampilkan di dalam dokumen PDF.
Dalam potongan kode berikut, Anda dapat mengatur warna batas tabel, menetapkan batas untuk sel tabel. Setelah itu, Anda akan membuat loop untuk menambahkan 10 baris. Tambahkan objek tabel ke halaman pertama dokumen input dan simpan dokumen yang diperbarui.
void AddHTMLFragmentToTableCell() {
String _dataDir("C:\\Samples\\");
auto document = MakeObject<Document>(_dataDir + u"input.pdf");
// Menginisialisasi instance baru dari Tabel
auto table = MakeObject<Table>();
// Mengatur warna batas tabel sebagai LightGray
table->set_Border(new BorderInfo(BorderSide::All, .5f, Color::get_LightGray()));
// menetapkan batas untuk sel tabel
table->set_DefaultCellBorder(new BorderInfo(BorderSide::All, .5f, Color::get_LightGray()));
// membuat loop untuk menambahkan 10 baris
for (int row_count = 1; row_count < 10; row_count++) {
SmartPtr<Cell> cell;
// menambahkan baris ke tabel
auto row = table->get_Rows()->Add();
// menambahkan sel tabel
cell = row->get_Cells()->Add();
cell->get_Paragraphs()->Add(new HtmlFragment(String::Format(u"Kolom <strong>({0}, 1)</strong>", row_count)));
cell = row->get_Cells()->Add();
cell->get_Paragraphs()->Add(new HtmlFragment(String::Format(u"Kolom <span style='color:red'>({0}, 2)</span>",row_count)));
cell = row->get_Cells()->Add();
cell->get_Paragraphs()->Add(new HtmlFragment(String::Format(u"Kolom <span style='text-decoration: underline'>([0}, 3)</span>", row_count)));
}
// Menambahkan objek tabel ke halaman pertama dokumen input
document->get_Pages()->idx_get(1)->get_Paragraphs()->Add(table);
// Menyimpan dokumen yang diperbarui yang berisi objek tabel
document->Save(_dataDir + u"AddHTMLObject_out.pdf");
}
Sisipkan Pemisah Halaman antara baris tabel
Biasanya, ketika membuat tabel dalam PDF, tabel mengalir ke halaman berikutnya ketika mencapai batas bawah tabel. Tetapi kita mungkin memiliki kebutuhan untuk memaksa pemisah halaman dimasukkan ketika sejumlah baris tertentu ditambahkan ke tabel. Cuplikan kode berikut menunjukkan langkah-langkah untuk menyisipkan pemisah halaman saat menambahkan 10 baris ke tabel.
Cuplikan kode berikut menunjukkan langkah-langkah untuk menyisipkan pemisah halaman ketika 10 baris ditambahkan untuk tabel.
void InsertPageBreak() {
String _dataDir("C:\\Samples\\");
// Membuat instance Dokumen
auto document = MakeObject<Document>();
// Tambahkan halaman ke koleksi halaman file PDF
auto page = document->get_Pages()->Add();
// Buat instance tabel
auto tab = MakeObject<Table>();
// Atur gaya border untuk tabel
tab->set_Border(MakeObject<BorderInfo>(BorderSide::All, Color::get_Red()));
// Atur gaya border default untuk tabel dengan warna border Merah
tab->set_DefaultCellBorder(MakeObject<BorderInfo>(BorderSide::All, Color::get_Red()));
// Tentukan lebar kolom tabel
tab->set_ColumnWidths(u"100 100");
// Buat loop untuk menambahkan 200 baris untuk tabel
for (int counter = 0; counter <= 200; counter++) {
auto row = MakeObject<Row>();
tab->get_Rows()->Add(row);
auto cell1 = MakeObject<Cell>();
cell1->get_Paragraphs()->Add(MakeObject<Aspose::Pdf::Text::TextFragment>(String::Format(u"Cell {0}, 0", counter)));
row->get_Cells()->Add(cell1);
auto cell2 = new Cell();
cell2->get_Paragraphs()->Add(MakeObject<Aspose::Pdf::Text::TextFragment>(String::Format(u"Cell {0}, 1", counter)));
row->get_Cells()->Add(cell2);
// Ketika 10 baris ditambahkan, render baris baru di halaman baru
if (counter % 10 == 0 && counter != 0)
row->set_IsInNewPage(true);
}
// Tambahkan tabel ke koleksi paragraf file PDF
page->get_Paragraphs()->Add(tab);
// Simpan dokumen PDF
document->Save(_dataDir + u"InsertPageBreak_out.pdf");
}
Render a Table on New Page
Secara default, paragraf ditambahkan ke koleksi Paragraphs dari objek Page. Namun, adalah mungkin untuk merender tabel di halaman baru, bukan langsung setelah objek level paragraf yang sebelumnya ditambahkan pada halaman.
Contoh: Cara Merender Tabel di Halaman Baru menggunakan C++
Untuk merender tabel di halaman baru, gunakan properti IsInNewPage dalam kelas BaseParagraph. Cuplikan kode berikut menunjukkan caranya.
void RenderTableOnNewPage()
{
auto document = MakeObject<Document>();
auto pageInfo = document->get_PageInfo();
auto marginInfo = pageInfo->get_Margin();
marginInfo->set_Left (37);
marginInfo->set_Right (37);
marginInfo->set_Top (37);
marginInfo->set_Bottom (37);
pageInfo->set_IsLandscape(true);
auto table = MakeObject<Aspose::Pdf::Table>();
table->set_ColumnWidths(u"50 100");
// Ditambahkan halaman.
auto curPage = document->get_Pages()->Add();
for (int i = 1; i <= 120; i++)
{
auto row = table->get_Rows()->Add();
row->set_FixedRowHeight(15);
auto cell1 = row->get_Cells()->Add();
cell1->get_Paragraphs()->Add(MakeObject<Aspose::Pdf::Text::TextFragment>(u"Content 1"));
auto cell2 = row->get_Cells()->Add();
cell2->get_Paragraphs()->Add(MakeObject<Aspose::Pdf::Text::TextFragment>(u"HHHHH"));
}
auto paragraphs = curPage->get_Paragraphs();
paragraphs->Add(table);
//-------------------------------------
auto document = MakeObject<Document>();
auto table1 = MakeObject<Aspose::Pdf::Table>();
table1->set_ColumnWidths(u"100 100");
String _dataDir("C:\\Samples\\");
for (int i = 1; i <= 10; i++)
{
auto row = table1->get_Rows()->Add();
auto cell1 = row->get_Cells()->Add();
cell1->get_Paragraphs()->Add(MakeObject<Aspose::Pdf::Text::TextFragment>(u"LAAAAAAA"));
auto cell2 = row->get_Cells()->Add();
cell2->get_Paragraphs()->Add(MakeObject<Aspose::Pdf::Text::TextFragment>(u"LAAGGGGGG"));
}
table1->set_IsInNewPage (true);
// Saya ingin menjaga table 1 ke halaman berikutnya tolong...
paragraphs->Add(table1);
document->Save(_dataDir + u"IsNewPageProperty_Test_out.pdf");
}