Tambahkan Teks ke PDF menggunakan C++
Menambahkan Teks
Untuk menambahkan teks ke file PDF yang sudah ada:
- Buka PDF input menggunakan objek Document.
- Dapatkan halaman tertentu di mana Anda ingin menambahkan teks.
- Buat objek TextFragment dengan teks input bersama dengan properti teks lainnya. Objek TextBuilder yang dibuat dari halaman tertentu – di mana Anda ingin menambahkan teks – memungkinkan Anda untuk menambahkan objek TextFragment ke halaman menggunakan metode AppendText.
- Panggil metode Save dari objek Document dan simpan file PDF keluaran.
Cuplikan kode berikut menunjukkan cara menambahkan teks dalam file PDF yang sudah ada.
using namespace System;
using namespace Aspose::Pdf;
using namespace Aspose::Pdf::Text;
void AddingText() {
String _dataDir("C:\\Samples\\");
// String untuk nama file input
String inputFileName("sample.pdf");
// String untuk nama file output
String outputFileName("AddingText_out.pdf");
// Muat file PDF
auto document = MakeObject<Document>(_dataDir + inputFileName);
// dapatkan halaman tertentu
auto pdfPage = document->get_Pages()->idx_get(1);
// buat text fragment
auto textFragment = MakeObject<TextFragment>("Aspose.PDF");
textFragment->set_Position(MakeObject<Position>(80, 700));
// atur properti teks
textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"Verdana"));
textFragment->get_TextState()->set_FontSize(14);
textFragment->get_TextState()->set_ForegroundColor(Color::get_Blue());
textFragment->get_TextState()->set_BackgroundColor(Color::get_LightGray());
// buat objek TextBuilder
auto textBuilder = MakeObject<TextBuilder>(pdfPage);
// tambahkan text fragment ke halaman PDF
textBuilder->AppendText(textFragment);
// Simpan dokumen PDF yang dihasilkan.
document->Save(_dataDir + outputFileName);
}
Memuat Font dari Stream
Cuplikan kode berikut menunjukkan cara memuat Font dari objek Stream ketika menambahkan teks ke dokumen PDF.
void LoadingFontFromStream() {
String _dataDir("C:\\Samples\\");
String inputFileName("sample.pdf");
String outputFileName("LoadingFontFromStream_out.pdf");
String fontFile("C:\\Windows\\Fonts\\Arial.ttf");
// Muat file PDF input
auto document = MakeObject<Document>(_dataDir + inputFileName);
// Buat objek pembangun teks untuk halaman pertama dokumen
auto textBuilder = MakeObject<TextBuilder>(document->get_Pages()->idx_get(1));
// Buat fragmen teks dengan string contoh
auto textFragment = MakeObject<TextFragment>("Hello world");
if (!fontFile.IsNullOrEmpty()) {
// Muat font TrueType ke dalam objek stream
auto fontStream = System::IO::File::OpenRead(fontFile);
// Tetapkan nama font untuk string teks
textFragment->get_TextState()->set_Font(FontRepository::OpenFont(fontStream, FontTypes::TTF));
// Tentukan posisi untuk Fragmen Teks
textFragment->set_Position(MakeObject<Position>(10, 10));
// Tambahkan teks ke TextBuilder sehingga dapat ditempatkan di atas file PDF
textBuilder->AppendText(textFragment);
// Simpan dokumen PDF hasil.
document->Save(_dataDir + outputFileName);
}
}
Tambahkan Teks menggunakan TextParagraph
Cuplikan kode berikut menunjukkan cara menambahkan teks dalam dokumen PDF menggunakan kelas TextParagraph.
void AddTextUsingTextParagraph() {
String _dataDir("C:\\Samples\\");
// Buka dokumen
auto document = MakeObject<Document>();
String outputFileName("AddTextUsingTextParagraph_out.pdf");
// Tambahkan halaman ke koleksi halaman dari objek Dokumen
auto page = document->get_Pages()->Add();
auto builder = MakeObject<TextBuilder>(page);
// Buat paragraf teks
auto paragraph = MakeObject<TextParagraph>();
// Atur indentasi baris berikutnya
paragraph->set_SubsequentLinesIndent(20);
// Tentukan lokasi untuk menambahkan TextParagraph
paragraph->set_Rectangle(MakeObject<Rectangle>(100, 300, 200, 700));
// Tentukan mode pembungkusan kata
paragraph->get_FormattingOptions()->set_WrapMode(TextFormattingOptions::WordWrapMode::ByWords);
// Buat fragmen teks
auto fragment1 = MakeObject<TextFragment>("the quick brown fox jumps over the lazy dog");
fragment1->get_TextState()->set_Font(FontRepository::FindFont(u"Times New Roman"));
fragment1->get_TextState()->set_FontSize(12);
// Tambahkan fragmen ke paragraf
paragraph->AppendLine(fragment1);
// Tambahkan paragraf
builder->AppendParagraph(paragraph);
// Simpan dokumen PDF yang dihasilkan.
document->Save(_dataDir + outputFileName);
}
Tambahkan Hyperlink ke TextSegment
Halaman PDF dapat terdiri dari satu atau lebih objek TextFragment, di mana setiap objek TextFragment dapat memiliki satu atau lebih instance TextSegment. Untuk menetapkan hyperlink pada TextSegment, properti Hyperlink dari kelas TextSegment dapat digunakan dengan menyediakan objek dari instance Aspose.Pdf.WebHyperlink. Silakan coba gunakan potongan kode berikut untuk memenuhi persyaratan ini.
void AddHyperlinkToTextSegment() {
String _dataDir("C:\\Samples\\");
String outputFileName("AddHyperlinkToTextSegment_out.pdf");
// Buat instance dokumen
auto document = MakeObject<Document>();
// Tambahkan halaman ke koleksi halaman file PDF
auto page1 = document->get_Pages()->Add();
// Buat instance TextFragment
auto tf = MakeObject<TextFragment>("Sample Text Fragment");
// Atur perataan horizontal untuk TextFragment
tf->set_HorizontalAlignment(HorizontalAlignment::Right);
// Buat textsegment dengan teks contoh
auto segment = MakeObject<TextSegment>(" ... Text Segment 1...");
// Tambahkan segment ke koleksi segment dari TextFragment
tf->get_Segments()->Add(segment);
// Buat TextSegment baru
segment = MakeObject<TextSegment>("Link to Google");
// Tambahkan segment ke koleksi segment dari TextFragment
tf->get_Segments()->Add(segment);
// Atur hyperlink untuk TextSegment
segment->set_Hyperlink(MakeObject<Aspose::Pdf::WebHyperlink>("www.aspose.com"));
// Atur warna depan untuk text segment
segment->get_TextState()->set_ForegroundColor(Color::get_Blue());
// Atur pemformatan teks sebagai miring
segment->get_TextState()->set_FontStyle(FontStyles::Italic);
// Buat objek TextSegment lainnya
segment = MakeObject<TextSegment>(u"TextSegment tanpa hyperlink");
// Tambahkan segment ke koleksi segment dari TextFragment
tf->get_Segments()->Add(segment);
// Tambahkan TextFragment ke koleksi paragraf dari objek halaman
page1->get_Paragraphs()->Add(tf);
// Simpan dokumen PDF yang dihasilkan.
document->Save(_dataDir + outputFileName);
}
Gunakan Font OTF
Aspose.PDF untuk C++ menawarkan fitur untuk menggunakan font Kustom/TrueType saat membuat/memanipulasi konten file PDF sehingga konten file ditampilkan menggunakan konten selain font sistem default.
void UseOTFFont() {
String _dataDir("C:\\Samples\\");
String outputFileName("OTFFont_out.pdf");
// Buat instance dokumen baru
auto document = MakeObject<Document>();
// Tambahkan halaman ke koleksi halaman file PDF
auto page = document->get_Pages()->Add();
// Buat instansi TextFragment dengan teks sampel
auto fragment = MakeObject<TextFragment>("Teks Sampel dalam font OTF");
// Atau Anda bahkan dapat menentukan jalur font OTF di direktori sistem
fragment->get_TextState()->set_Font(FontRepository::OpenFont(u"C:\\Samples\\Fonts\\Montserrat-Black.otf"));
// Tentukan untuk menyematkan font di dalam file PDF, sehingga ditampilkan dengan benar,
// Meskipun font tertentu tidak terinstal/ada di mesin target
fragment->get_TextState()->get_Font()->set_IsEmbedded(true);
// Tambahkan TextFragment ke koleksi paragraf dari instansi Page
page->get_Paragraphs()->Add(fragment);
// Simpan dokumen PDF yang dihasilkan.
document->Save(_dataDir + outputFileName);
}
Menambahkan String HTML menggunakan DOM
Kelas Aspose.Pdf.Generator.Text mengandung properti bernama IsHtmlTagSupported yang memungkinkan untuk menambahkan tag/konten HTML ke dalam file PDF. Konten yang ditambahkan dirender dalam tag HTML asli alih-alih muncul sebagai string teks sederhana. Untuk mendukung fitur serupa dalam Model Objek Dokumen (DOM) baru dari namespace Aspose.Pdf, kelas HtmlFragment telah diperkenalkan.
Instans HtmlFragment dapat digunakan untuk menentukan konten HTML yang harus ditempatkan di dalam file PDF. Mirip dengan TextFragment, HtmlFragment adalah objek tingkat paragraf dan dapat ditambahkan ke koleksi paragraf objek Page. Cuplikan kode berikut menunjukkan langkah-langkah untuk menempatkan konten HTML di dalam file PDF menggunakan pendekatan DOM.
void AddingHtmlString() {
String _dataDir("C:\\Samples\\");
// String untuk nama file input
String inputFileName("sample.pdf");
// String untuk nama file output
String outputFileName("sample_html_out.pdf");
// membuat instans Document
auto document = MakeObject<Document>(_dataDir + inputFileName);
// Tambahkan halaman ke koleksi halaman file PDF
auto page = document->get_Pages()->Add();
// Instansiasi HtmlFragment dengan konten HTML
auto title = MakeObject<HtmlFragment>("<h1 style=\"color:blue\"><strong>HTML String Demo</strong></h1>");
// set MarginInfo untuk detail margin
auto margin = MakeObject<MarginInfo>();
margin->set_Bottom(10);
margin->set_Top(200);
// Tetapkan informasi margin
title->set_Margin(margin);
// Tambahkan HTML Fragment ke koleksi paragraf halaman
page->get_Paragraphs()->Add(title);
// Simpan file PDF
document->Save(_dataDir + outputFileName);
}
Berikut adalah cuplikan kode yang mendemonstrasikan langkah-langkah bagaimana menambahkan daftar berurutan HTML ke dalam dokumen:
void AddHTMLOrderedListIntoDocuments() {
String _dataDir("C:\\Samples\\");
// String untuk nama file output
String outputFileName("AddHTMLOrderedListIntoDocuments_out.pdf");
// Membuat objek Document
auto document = MakeObject<Document>();
// Membuat objek HtmlFragment dengan fragmen HTML yang sesuai
auto htmlFragment = MakeObject<HtmlFragment>(
"<div style=\"font-family: sans-serif\"><ul><li>Pertama</li><li>Kedua</li><li>Ketiga</li><li>Keempat</li><li>Kelima</li></ul><p>Teks setelah daftar.</p><p>Baris berikutnya<br/>Baris terakhir</p></div>");
// Tambahkan Halaman dalam Koleksi Halaman
auto page = document->get_Pages()->Add();
// Tambahkan HtmlFragment di dalam halaman
page->get_Paragraphs()->Add(htmlFragment);
// Simpan file PDF hasil
document->Save(_dataDir + outputFileName);
}
Anda juga dapat mengatur pemformatan string HTML menggunakan objek TextState sebagai berikut:
void AddHTMLStringFormatting() {
String _dataDir("C:\\Samples\\");
// String untuk nama file output
String outputFileName("sample_html_out.pdf");
// Membuat objek Document
auto document = MakeObject<Document>();
// Tambahkan Halaman dalam Koleksi Halaman
auto page = document->get_Pages()->Add();
// Membuat HtmlFragment dengan konten HTML
auto title = MakeObject<HtmlFragment>("<h1><strong>Demo String HTML</strong></h1>");
auto textState = MakeObject<TextState>(12);
textState->set_Font(FontRepository::FindFont(u"Calibri"));
textState->set_ForegroundColor(Color::get_Green());
textState->set_BackgroundColor(Color::get_Coral());
title->set_TextState(textState);
// Tambahkan Fragmen HTML ke koleksi paragraf halaman
page->get_Paragraphs()->Add(title);
// Simpan file PDF
document->Save(_dataDir + outputFileName);
}
Jika Anda menetapkan beberapa nilai atribut teks melalui markup HTML dan kemudian memberikan nilai yang sama dalam properti TextState, mereka akan menimpa parameter HTML dengan bentuk properti dari instance TextState. Cuplikan kode berikut menunjukkan perilaku yang dijelaskan.
void AddHTMLUsingDOMAndOverwrite() {
String _dataDir("C:\\Samples\\");
// String untuk nama file keluaran
String outputFileName("AddHTMLUsingDOMAndOverwrite_out.pdf");
// Instansiasi objek Document
auto document = MakeObject<Document>();
// Tambahkan Halaman dalam Koleksi Halaman
auto page = document->get_Pages()->Add();
// Instansiasi HtmlFragment dengan konten HTML
auto title = MakeObject<HtmlFragment>("<p style='font-family: Verdana'><b><i>Table contains text</i></b></p>");
// Font-family dari 'Verdana' akan direset menjadi 'Arial'
title->set_TextState(new TextState(u"Arial Black"));
title->set_TextState(new TextState(20));
// Atur informasi margin bawah
title->get_Margin()->set_Bottom(10);
// Atur informasi margin atas
title->get_Margin()->set_Top(400);
// Tambahkan Fragmen HTML ke koleksi paragraf halaman
page->get_Paragraphs()->Add(title);
// Simpan file PDF
document->Save(_dataDir + outputFileName);
}
Catatan Kaki dan Catatan Akhir (DOM)
Catatan Kaki menunjukkan catatan dalam teks makalah Anda dengan menggunakan angka superskrip berurutan. Catatan sebenarnya diindentasi dan dapat terjadi sebagai catatan kaki di bagian bawah halaman.
Menambahkan Catatan Kaki
Dalam sistem referensi catatan kaki, tunjukkan referensi dengan:
- meletakkan angka kecil di atas garis jenis tepat setelah bahan sumber. Angka ini disebut sebagai pengenal catatan. Angka ini berada sedikit di atas garis teks.
- meletakkan angka yang sama, diikuti oleh kutipan dari sumber Anda, di bagian bawah halaman. Pencatatan kaki harus bersifat numerik dan kronologis: referensi pertama adalah 1, referensi kedua adalah 2, dan seterusnya.
Keuntungan dari pencatatan kaki adalah pembaca dapat dengan mudah melihat ke bagian bawah halaman untuk mengetahui sumber referensi yang menarik minat mereka.
Ikuti langkah-langkah berikut:
-
Buat instance Document
-
Buat objek Page
-
Buat objek TextFragment
-
Buat instance Catatan dan berikan nilainya ke properti TextFragment FootNote
-
Tambahkan TextFragment ke koleksi paragraf dari sebuah instance halaman
void AddFootNote() {
String _dataDir("C:\\Samples\\");
// String untuk nama file keluaran
String inputFileName("sample.pdf");
String outputFileName("sample_footnote_out.pdf");
// Membuat objek Dokumen
auto document = MakeObject<Document>(_dataDir + inputFileName);
// Tambahkan Halaman ke Koleksi Halaman
auto page = document->get_Pages()->idx_get(1);
auto tfa = MakeObject<TextFragmentAbsorber>("Portable Document Format");
tfa->Visit(page);
auto t = tfa->get_TextFragments()->idx_get(1);
auto note = MakeObject<Note>();
note->set_Text(u"Demo");
t->set_FootNote(note);
// buat instance TextFragment
auto text = MakeObject<TextFragment>("Hello World");
// atur nilai FootNote untuk TextFragment
text->set_FootNote(MakeObject<Note>("catatan kaki untuk teks uji 1"));
// tambahkan TextFragment ke koleksi paragraf dari halaman pertama dokumen
page->get_Paragraphs()->Add(text);
// buat TextFragment kedua
text = MakeObject<TextFragment>("Aspose.Pdf for Java");
// atur FootNote untuk fragmen teks kedua
text->set_FootNote(MakeObject<Note>("catatan kaki untuk teks uji 2"));
// tambahkan fragmen teks kedua ke koleksi paragraf dari file PDF
page->get_Paragraphs()->Add(text);
document->Save(_dataDir + outputFileName);
}
Gaya garis khusus untuk Catatan Kaki
Contoh berikut menunjukkan bagaimana menambahkan Catatan Kaki ke bagian bawah halaman Pdf dan mendefinisikan gaya garis khusus.
void CustomFootNote_Line() {
String _dataDir("C:\\Samples\\");
// String untuk nama file keluaran
String outputFileName("customFootNote_Line.pdf");
// Buat instance Dokumen
auto document = MakeObject<Document>();
// tambahkan halaman ke koleksi halaman PDF
auto page = document->get_Pages()->Add();
// buat objek GraphInfo
auto graph = MakeObject<GraphInfo>();
// atur lebar garis sebagai 2
graph->set_LineWidth(2);
// atur warna untuk objek graph
graph->set_Color(Color::get_Red());
// atur nilai array dash sebagai 3
graph->set_DashArray(MakeArray<int>(3));
// atur nilai fase dash sebagai 1
graph->set_DashPhase(1);
// atur gaya garis catatan kaki untuk halaman sebagai graph
page->set_NoteLineStyle(graph);
// buat instance TextFragment
auto text = MakeObject<TextFragment>("Hello World");
// atur nilai Catatan Kaki untuk TextFragment
text->set_FootNote(MakeObject<Note>("catatan kaki untuk teks uji 1"));
// tambahkan TextFragment ke koleksi paragraf halaman pertama dokumen
page->get_Paragraphs()->Add(text);
// buat TextFragment kedua
text = MakeObject<TextFragment>("Aspose.Pdf untuk Java");
// atur Catatan Kaki untuk fragmen teks kedua
text->set_FootNote(MakeObject<Note>("catatan kaki untuk teks uji 2"));
// tambahkan fragmen teks kedua ke koleksi paragraf file PDF
page->get_Paragraphs()->Add(text);
// simpan file PDF
document->Save(_dataDir + outputFileName);
}
Kami dapat mengatur pemformatan Label Catatan Kaki (pengidentifikasi catatan) menggunakan objek TextState sebagai berikut:
void AddCustomFootNoteLabel() {
String _dataDir("C:\\Samples\\");
// String untuk nama file input
String inputFileName("sample.pdf");
// String untuk nama file output
String outputFileName("sample_footnote.pdf");
// Buat instance Dokumen
auto document = MakeObject<Document>(_dataDir + inputFileName);
auto page = document->get_Pages()->idx_get(1);
auto tfa = MakeObject<TextFragmentAbsorber>("Portable Document Format");
tfa->Visit(page);
auto t = tfa->get_TextFragments()->idx_get(1);
auto note = MakeObject<Note>("Demo");
t->set_FootNote(note);
// buat instance TextFragment
auto text = MakeObject<TextFragment>("Hello World");
// set nilai FootNote untuk TextFragment
text->set_FootNote(MakeObject<Note>("catatan kaki untuk teks uji 1"));
text->get_FootNote()->set_Text(u"21");
auto ts = MakeObject<TextState>();
ts->set_ForegroundColor(Color::get_Blue());
ts->set_FontStyle(FontStyles::Italic);
text->get_FootNote()->set_TextState(ts);
// tambahkan TextFragment ke koleksi paragraf halaman pertama dokumen
page->get_Paragraphs()->Add(text);
// buat TextFragment kedua
text = MakeObject<TextFragment>(u"Aspose.Pdf for C++");
// set FootNote untuk fragmen teks kedua
text->set_FootNote(MakeObject<Note>("catatan kaki untuk teks uji 2"));
// tambahkan fragmen teks kedua ke koleksi paragraf file PDF
page->get_Paragraphs()->Add(text);
document->Save(_dataDir + outputFileName);
}
Sesuaikan Label Catatan Kaki
Secara default, nomor Catatan Kaki meningkat mulai dari 1. Namun, kita mungkin memiliki persyaratan untuk menetapkan label Catatan Kaki khusus. Untuk memenuhi persyaratan ini, silakan coba gunakan potongan kode berikut
void CustomFootNote_Label() {
String _dataDir("C:\\Samples\\");
// String untuk nama file keluaran
String outputFileName("CustomizeFootNoteLabel_out.pdf");
// Buat instance Dokumen
auto document = MakeObject<Document>();
// Tambahkan halaman ke koleksi halaman PDF
auto page = document->get_Pages()->Add();
// Buat objek GraphInfo
auto graph = MakeObject<GraphInfo>();
// Atur lebar garis sebagai 2
graph->set_LineWidth(2);
// Atur warna untuk objek grafis
graph->set_Color(Color::get_Red());
// Atur nilai array garis putus-putus sebagai 3
graph->set_DashArray(MakeArray<int>(3));
// Atur nilai fase garis putus-putus sebagai 1
graph->set_DashPhase(1);
// Atur gaya garis catatan kaki untuk halaman sebagai grafik
page->set_NoteLineStyle(graph);
// Buat instance TextFragment
auto text = MakeObject<TextFragment>("Hello World");
// Atur nilai Catatan Kaki untuk TextFragment
text->set_FootNote(MakeObject<Note>("catatan kaki untuk teks uji 1"));
// Tentukan label khusus untuk Catatan Kaki
text->get_FootNote()->set_Text(u" Aspose(2021)");
// Tambahkan TextFragment ke koleksi paragraf halaman pertama dokumen
page->get_Paragraphs()->Add(text);
document->Save(_dataDir + outputFileName);
}
Menambahkan Gambar dan Tabel ke Catatan Kaki
Cuplikan kode berikut menunjukkan langkah-langkah untuk menambahkan Catatan Kaki ke objek TextFragment dan kemudian menambahkan objek Gambar dan Tabel ke koleksi paragraf dari bagian Catatan Kaki.
void AddingImageAndTableToFootnote() {
String _dataDir("C:\\Samples\\");
// String untuk nama file keluaran
String outputFileName("AddImageAndTableToFootNote_out.pdf");
// Membuat instance Document
auto document = new Document();
// Menambahkan halaman ke koleksi halaman PDF
auto page = document->get_Pages()->Add();
// Membuat instance TextFragment
auto text = MakeObject<TextFragment>("Hello World");
page->get_Paragraphs()->Add(text);
text->set_FootNote(MakeObject<Note>());
auto image = MakeObject<Image>();
image->set_File(_dataDir + u"aspose-logo.jpg");
image->set_FixHeight(20);
text->get_FootNote()->get_Paragraphs()->Add(image);
auto footNote = MakeObject<TextFragment>("teks catatan kaki");
footNote->get_TextState()->set_FontSize(20);
footNote->set_IsInLineParagraph(true);
text->get_FootNote()->get_Paragraphs()->Add(footNote);
auto table = MakeObject<Table>();
table->get_Rows()->Add()->get_Cells()->Add()->get_Paragraphs()->Add(MakeObject<TextFragment>("Baris 1 Sel 1"));
text->get_FootNote()->get_Paragraphs()->Add(table);
page->get_Paragraphs()->Add(text);
document->Save(_dataDir + outputFileName);
}
Cara Membuat EndNote
EndNote adalah sitasi sumber yang mengarahkan pembaca ke tempat tertentu di akhir makalah di mana mereka dapat menemukan sumber informasi atau kata-kata yang dikutip atau disebutkan dalam makalah. Ketika menggunakan endnotes, kalimat yang Anda kutip atau parafrase atau materi yang diringkas diikuti oleh nomor superskrip.
Contoh berikut menunjukkan cara menambahkan Endnote pada halaman Pdf.
void HowToCreateEndNotes() {
String _dataDir("C:\\Samples\\");
// String untuk nama file output
String outputFileName("endNote_out.pdf");
// Buat instance Dokumen
auto document = new Document();
// Tambahkan halaman ke koleksi halaman PDF
auto page = document->get_Pages()->Add();
// buat instance TextFragment
auto text = MakeObject<TextFragment>("Hello World");
// setel nilai FootNote untuk TextFragment
text->set_EndNote(MakeObject<Note>("contoh End note"));
// tentukan label kustom untuk FootNote
text->get_EndNote()->set_Text(u" Aspose(2021)");
// tambahkan TextFragment ke koleksi paragraf halaman pertama dokumen
page->get_Paragraphs()->Add(text);
// simpan file PDF
document->Save(_dataDir + outputFileName);
}
Teks dan Gambar sebagai Paragraf Sejajar
Tata letak default dari file PDF adalah tata letak aliran (Kiri-Atas ke Kanan-Bawah). Oleh karena itu, setiap elemen baru yang ditambahkan ke file PDF ditambahkan dalam aliran kanan bawah. Namun, kita mungkin memiliki kebutuhan untuk menampilkan berbagai elemen halaman yaitu Gambar dan Teks pada tingkat yang sama (satu setelah yang lain). Salah satu pendekatan dapat membuat instance Tabel dan menambahkan kedua elemen ke objek sel individual. Namun, pendekatan lain dapat berupa paragraf sejajar. Dengan mengatur properti IsInLineParagraph dari Gambar dan Teks sebagai benar, paragraf ini akan muncul sebagai sejajar dengan elemen halaman lainnya.
Cuplikan kode berikut menunjukkan bagaimana menambahkan teks dan Gambar sebagai paragraf sejajar dalam file PDF.
void TextAndImageAsInLineParagraph() {
String _dataDir("C:\\Samples\\");
String outputFileName("TextAndImageAsParagraph_out.pdf");
// Membuat instance Dokumen
auto document = MakeObject<Document>();
// Tambahkan halaman ke koleksi halaman dari instance Dokumen
auto page = document->get_Pages()->Add();
// Buat TextFragment
auto text = MakeObject<TextFragment>("Hello World.. ");
// Tambahkan fragmen teks ke koleksi paragraf dari objek Halaman
page->get_Paragraphs()->Add(text);
// Buat instance gambar
auto image = MakeObject<Image>();
// Atur gambar sebagai paragraf sejajar sehingga muncul tepat setelah
// Objek paragraf sebelumnya (TextFragment)
image->set_IsInLineParagraph(true);
// Tentukan jalur file gambar
image->set_File(_dataDir + u"aspose-logo.jpg");
// Atur tinggi gambar (opsional)
image->set_FixHeight(30);
// Atur lebar gambar (opsional)
image->set_FixWidth(100);
// Tambahkan gambar ke koleksi paragraf dari objek halaman
page->get_Paragraphs()->Add(image);
// Inisialisasi ulang objek TextFragment dengan konten yang berbeda
text = MakeObject<TextFragment>(" Hello Again..");
// Atur TextFragment sebagai paragraf sejajar
text->set_IsInLineParagraph(true);
// Tambahkan TextFragment yang baru dibuat ke koleksi paragraf dari halaman
page->get_Paragraphs()->Add(text);
document->Save(_dataDir + outputFileName);
}
Tentukan Spasi Karakter saat Menambahkan Teks
Teks dapat ditambahkan ke koleksi paragraf PDF menggunakan instance TextFragment atau objek TextParagraph, dan Anda bahkan dapat menstempel teks di dalam PDF menggunakan kelas TextStamp. Saat menambahkan teks, kita mungkin diharuskan menentukan spasi antara karakter untuk objek teks. Untuk memenuhi persyaratan ini, properti baru telah diperkenalkan bernama Property CharacterSpacing.
Harap pertimbangkan pendekatan berikut untuk memenuhi persyaratan ini.
Pendekatan berikut menunjukkan langkah-langkah untuk menentukan spasi karakter saat menambahkan teks di dalam dokumen PDF.
Menggunakan TextBuilder dan TextFragment
// Tentukan Spasi Karakter saat menambahkan Teks menggunakan TextBuilder dan TextFragment
void CharacterSpacing_TextFragment() {
String _dataDir("C:\\Samples\\");
// String untuk nama file keluaran
String outputFileName("CharacterSpacingUsingTextBuilderAndFragment_out.pdf");
// Buat instance Dokumen
auto document = MakeObject<Document>();
// Tambahkan halaman ke koleksi halaman Dokumen
auto page = document->get_Pages()->Add();
// Buat instance TextBuilder
auto builder = MakeObject<TextBuilder>(page);
// Buat instance fragmen teks dengan konten sampel
auto wideFragment = MakeObject<TextFragment>("Teks dengan spasi karakter yang lebih besar");
wideFragment->get_TextState()->ApplyChangesFrom(MakeObject<TextState>("Arial", 12));
// Tentukan spasi karakter untuk TextFragment
wideFragment->get_TextState()->set_CharacterSpacing(2.0f);
// Tentukan posisi TextFragment
wideFragment->set_Position(MakeObject<Position>(100, 650));
// Tambahkan TextFragment ke instance TextBuilder
builder->AppendText(wideFragment);
// Simpan dokumen PDF yang dihasilkan.
document->Save(_dataDir + outputFileName);
}
Menggunakan TextParagraph
void CharacterSpacing_TextParagraph() {
String _dataDir("C:\\Samples\\");
// String untuk nama file keluaran
String outputFileName("CharacterSpacingUsingTextBuilderAndFragment_out.pdf");
// Buat instance Dokumen
auto document = MakeObject<Document>();
// Tambahkan halaman ke koleksi halaman Dokumen
auto page = document->get_Pages()->Add();
// Buat instance TextBuilder
auto builder = MakeObject<TextBuilder>(page);
// Instansiasi instance TextParagraph
auto paragraph = MakeObject<TextParagraph>();
// Buat instance TextState untuk menentukan nama dan ukuran font
auto state = MakeObject<TextState>("Arial", 12);
// Tentukan spasi karakter
state->set_CharacterSpacing(1.5f);
// Tambahkan teks ke objek TextParagraph
paragraph->AppendLine(u"Ini adalah paragraf dengan spasi karakter", state);
// Tentukan posisi untuk TextParagraph
paragraph->set_Position(MakeObject<Position>(100, 550));
// Tambahkan TextParagraph ke instance TextBuilder
builder->AppendParagraph(paragraph);
// Simpan dokumen PDF hasil.
document->Save(_dataDir + outputFileName);
}
Menggunakan TextStamp
void CharacterSpacing_TextStamp() {
String _dataDir("C:\\Samples\\");
String outputFileName("CharacterSpacingUsingTextStamp_out.pdf");
// Buat instance Dokumen
auto document = MakeObject<Document>();
// Tambahkan halaman ke koleksi halaman Dokumen
auto page = document->get_Pages()->Add();
// Instansiasi instance TextStamp dengan teks contoh
auto stamp = MakeObject<TextStamp>("Ini adalah cap teks dengan spasi karakter");
// Tentukan nama font untuk objek Stamp
stamp->get_TextState()->set_Font(FontRepository::FindFont(u"Arial"));
// Tentukan ukuran Font untuk TextStamp
stamp->get_TextState()->set_FontSize(12);
// Tentukan spasi karakter sebagai 1f
stamp->get_TextState()->set_CharacterSpacing(1.0f);
// Atur XIndent untuk Stamp
stamp->set_XIndent(100);
// Atur YIndent untuk Stamp
stamp->set_YIndent(500);
// Tambahkan cap tekstual ke instance halaman
stamp->Put(page);
// Simpan dokumen PDF yang dihasilkan.
document->Save(_dataDir + outputFileName);
}
Membuat Dokumen PDF Multi-Kolom
Topik ini menunjukkan bagaimana Anda dapat membuat PDF multi-kolom menggunakan Aspose.Pdf untuk C++.
Saat ini, kita lebih sering melihat berita ditampilkan dalam beberapa kolom pada halaman terpisah, daripada di buku, di mana paragraf teks sebagian besar dicetak di semua halaman dari kiri ke kanan. Banyak aplikasi pemrosesan dokumen, seperti Microsoft Word dan Adobe Acrobat Writer, memungkinkan pengguna untuk membuat beberapa kolom pada satu halaman dan kemudian menambahkan data ke dalamnya.
Aspose.Pdf untuk C++ juga menawarkan kemampuan untuk membuat beberapa kolom di halaman dokumen PDF. Untuk membuat PDF dengan beberapa kolom, kita dapat menggunakan kelas Aspose.Pdf.FloatingBox karena menyediakan properti ColumnInfo.ColumnCount untuk menentukan jumlah kolom di dalam FloatingBox, dan kita juga dapat menentukan jarak antar kolom dan lebar kolom menggunakan ColumnInfo .ColumnSpacing dan ColumnInfo .ColumnWidths masing-masing.
Contoh di bawah ini menunjukkan pembuatan dua kolom dengan objek Grafik (Garis) dan mereka ditambahkan ke koleksi paragraf dari FloatingBox, yang kemudian ditambahkan ke koleksi paragraf dari instance Page.
void CreateMultiColumn() {
String _dataDir("C:\\Samples\\");
String outputFileName("CreateMultiColumnPdf_out.pdf");
// Buat instance dokumen baru
auto document = MakeObject<Document>();
// Tentukan info margin kiri untuk file PDF
document->get_PageInfo()->get_Margin()->set_Left(40);
// Tentukan info margin kanan untuk file PDF
document->get_PageInfo()->get_Margin()->set_Right(40);
// Tambahkan halaman ke koleksi halaman file PDF
auto page = document->get_Pages()->Add();
auto graph1 = MakeObject<Aspose::Pdf::Drawing::Graph>(500, 2);
// Tambahkan garis ke koleksi paragraf objek bagian
page->get_Paragraphs()->Add(graph1);
// Tentukan koordinat untuk garis
auto posArr = MakeArray<float>({ 1, 2, 500, 2 });
auto l1 = MakeObject<Aspose::Pdf::Drawing::Line>(posArr);
graph1->get_Shapes()->Add(l1);
// Buat variabel string dengan teks yang mengandung tag html
String s ("<span style=\"font-family: \"Times New Roman\", Times, serif;\" font-size=\"14pt\" \">\
<strong> Cara Menghindari Penipuan Uang</<strong> </span>");
// Buat paragraf teks yang mengandung teks HTML
auto heading_text = MakeObject<HtmlFragment>(s);
page->get_Paragraphs()->Add(heading_text);
auto box = MakeObject<FloatingBox>();
// Tambahkan empat kolom di dalam bagian
box->get_ColumnInfo()->set_ColumnCount(2);
// Atur jarak antara kolom
box->get_ColumnInfo()->set_ColumnSpacing(u"5");
box->get_ColumnInfo()->set_ColumnWidths(u"105 105");
auto text1 = MakeObject<TextFragment>("Oleh Seorang Googler (Blog Resmi Google)");
text1->get_TextState()->set_FontSize(8);
text1->get_TextState()->set_LineSpacing(2);
text1->get_TextState()->set_FontSize(10);
text1->get_TextState()->set_FontStyle(FontStyles::Italic);
box->get_Paragraphs()->Add(text1);
// Buat objek grafik untuk menggambar garis
auto graph2 = MakeObject<Aspose::Pdf::Drawing::Graph>(50, 10);
// Tentukan koordinat untuk garis
auto posArr2 = MakeArray<float>({ 1, 10, 100, 10 });
auto l2 = MakeObject<Aspose::Pdf::Drawing::Line>(posArr2);
graph2->get_Shapes()->Add(l2);
// Tambahkan garis ke koleksi paragraf objek bagian
box->get_Paragraphs()->Add(graph2);
auto text2 = MakeObject<TextFragment>(
"Sed augue tortor, sodales id, luctus et, pulvinar ut, eros. Suspendisse vel dolor. \
Sed quam. Curabitur ut massa vitae eros euismod aliquam. Pellentesque sit amet elit. Vestibulum interdum pellentesque augue.\
Cras mollis arcu sit amet purus. Donec augue. Nam mollis tortor a elit. Nulla viverra nisl vel mauris. Vivamus sapien. nascetur \
ridiculus mus. Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et,nAenean \
posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, pharetra non, mollis ac, mauris. \
Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut, iaculis cursus, tincidunt vitae, \
risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nam justo lorem, aliquam \
luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, sodales et, semper sed, enim Nam justo lorem, aliquam luctus, \
sodales et, semper sed, enim nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam, iaculis sed, \
pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique ut,\
iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus \
mus. Sed urna. . Duis convallis ultrices nisi. Maecenas non ligula. Nunc nibh est, tincidunt in, placerat sit amet, vestibulum a, nulla.\
Praesent porttitor turpis eleifend ante. Morbi sodales.nAenean posuere ante ut neque. Morbi sollicitudin congue felis. Praesent turpis diam,\
iaculis sed, pharetra non, mollis ac, mauris. Phasellus nisi ipsum, pretium vitae, tempor sed, molestie eu, dui. Duis lacus purus, tristique\
ut, iaculis cursus, tincidunt vitae, risus. Sed commodo. *** sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.\
Sed urna. . Duis convallis ultrices nisi. Maecenas non ligula. Nunc nibh est, tincidunt in, placerat sit amet, vestibulum a, nulla. \
Praesent porttitor turpis eleifend ante. Morbi sodales.");
box->get_Paragraphs()->Add(text2);
page->get_Paragraphs()->Add(box);
// Simpan file PDF
document->Save(_dataDir + outputFileName);
}
Bekerja dengan Tab Stops Kustom
Tab Stop adalah titik berhenti untuk tabulasi. Dalam pengolahan kata, setiap baris berisi sejumlah tab stop yang ditempatkan pada interval reguler (misalnya, setiap setengah inci). Namun, mereka dapat diubah, karena sebagian besar pengolah kata memungkinkan Anda untuk mengatur tab stop di mana pun Anda mau. Ketika Anda menekan tombol Tab, kursor atau titik penyisipan melompat ke tab stop berikutnya, yang pada dirinya sendiri tidak terlihat. Meskipun tab stop tidak ada dalam file teks, pengolah kata melacaknya sehingga dapat bereaksi dengan benar terhadap tombol Tab.
Berikut adalah contoh cara mengatur TAB stop kustom.
void CustomTabStops() {
String _dataDir("C:\\Samples\\");
String outputFileName("CustomTabStops_out.pdf");
auto document = MakeObject<Document>();
auto page = document->get_Pages()->Add();
auto ts = MakeObject<TabStops>();
auto ts1 = ts->Add(100);
ts1->set_AlignmentType(TabAlignmentType::Right);
ts1->set_LeaderType(TabLeaderType::Solid);
auto ts2 = ts->Add(200);
ts2->set_AlignmentType(TabAlignmentType::Center);
ts2->set_LeaderType(TabLeaderType::Dash);
auto ts3 = ts->Add(300);
ts3->set_AlignmentType(TabAlignmentType::Left);
ts3->set_LeaderType(TabLeaderType::Dot);
auto header = MakeObject<TextFragment>("Ini adalah contoh pembentukan tabel dengan TAB stops", ts);
auto text0 = MakeObject<TextFragment>("#$TABHead1 #$TABHead2 #$TABHead3", ts);
auto text1 = MakeObject<TextFragment>("#$TABdata11 #$TABdata12 #$TABdata13", ts);
auto text2 = MakeObject<TextFragment>("#$TABdata21 ", ts);
text2->get_Segments()->Add(MakeObject<TextSegment>("#$TAB"));
text2->get_Segments()->Add(MakeObject<TextSegment>("data22 "));
text2->get_Segments()->Add(MakeObject<TextSegment>("#$TAB"));
text2->get_Segments()->Add(MakeObject<TextSegment>("data23"));
page->get_Paragraphs()->Add(header);
page->get_Paragraphs()->Add(text0);
page->get_Paragraphs()->Add(text1);
page->get_Paragraphs()->Add(text2);
document->Save(_dataDir + outputFileName);
}
Cara Menambahkan Teks Transparan dalam PDF
PDF 1.4 (format file yang didukung oleh Acrobat 5) adalah versi pertama dari PDF yang mendukung transparansi. PDF ini masuk ke pasar hampir bersamaan dengan Adobe Illustrator 9.
File PDF berisi objek Gambar, Teks, Grafik, lampiran, Anotasi dan saat membuat TextFragment, Anda dapat mengatur informasi warna latar depan, latar belakang serta pemformatan teks. Aspose.PDF untuk C++ mendukung fitur untuk menambahkan teks dengan saluran warna Alpha. Cuplikan kode berikut menunjukkan cara menambahkan teks dengan warna transparan.
void AddTransparentText() {
String _dataDir("C:\\Samples\\");
String outputFileName("AddTransparentText_out.pdf");
// Membuat instance Dokumen
auto document = MakeObject<Document>();
// Membuat halaman untuk koleksi halaman dari file PDF
auto page = document->get_Pages()->Add();
// Membuat objek Grafik
auto canvas = MakeObject<Aspose::Pdf::Drawing::Graph>(100, 400);
// Membuat instance persegi panjang dengan dimensi tertentu
auto rect = MakeObject<Aspose::Pdf::Drawing::Rectangle>(100, 100, 400, 400);
// Membuat objek warna dari saluran warna Alpha
int alpha = 10;
int green = 0;
int red = 100;
int blue = 0;
auto alphaColor = Color::FromArgb(alpha, red, green, blue);
rect->get_GraphInfo()->set_FillColor(alphaColor);
// Menambahkan persegi panjang ke koleksi bentuk dari objek Grafik
canvas->get_Shapes()->Add(rect);
// Menambahkan objek grafik ke koleksi paragraf dari objek halaman
page->get_Paragraphs()->Add(canvas);
// Mengatur nilai untuk tidak mengubah posisi untuk objek grafik
canvas->set_IsChangePosition(false);
// Membuat instance TextFragment dengan nilai sampel
auto text = MakeObject<TextFragment>(
"teks transparan teks transparan teks transparan teks transparan teks transparan teks transparan teks transparan teks transparan teks transparan teks transparan teks transparan teks transparan teks transparan teks transparan teks transparan teks transparan ");
// Membuat objek warna dari saluran Alpha
alpha = 30;
alphaColor = Color::FromArgb(alpha, red, green, blue);
// Mengatur informasi warna untuk instance teks
text->get_TextState()->set_ForegroundColor(alphaColor);
// Menambahkan teks ke koleksi paragraf dari instance halaman
page->get_Paragraphs()->Add(text);
document->Save(_dataDir + outputFileName);
}
Tentukan Jarak Baris untuk Font
Kelas Aspose.Pdf.Text.TextFormattingOptions memiliki enumerasi LineSpacingMode yang dirancang untuk font tertentu, misalnya input font “HPSimplified.ttf”. Juga, kelas Aspose.Pdf.Text.TextFormattingOptions memiliki properti LineSpacing dari tipe LineSpacingMode. Anda hanya perlu mengatur LineSpacing ke LineSpacingMode.FullSize. Cuplikan kode untuk menampilkan font dengan benar adalah sebagai berikut:
void SpecifyLineSpacingForFonts() {
String _dataDir("C:\\Samples\\");
String outputFileName("SpecifyLineSpacing_out.pdf");
String fontFile ("hp-simplified-265.ttf");
// Load input PDF file
auto document = MakeObject<Document>();
// Create TextFormattingOptions with LineSpacingMode.FullSize
auto formattingOptions = MakeObject<TextFormattingOptions>();
formattingOptions->set_LineSpacing(TextFormattingOptions::LineSpacingMode::FullSize);
// Create text fragment with sample string
auto textFragment = MakeObject<TextFragment>("Hello world");
// Load the TrueType font into stream object
auto fontStream = System::IO::File::OpenRead(_dataDir + fontFile);
// Set the font name for text string
textFragment->get_TextState()->set_Font(FontRepository::OpenFont(fontStream, FontTypes::TTF));
// Specify the position for Text Fragment
textFragment->set_Position(MakeObject<Position>(100, 600));
// Set TextFormattingOptions of current fragment to predefined(which points to
// LineSpacingMode.FullSize)
textFragment->get_TextState()->set_FormattingOptions(formattingOptions);
// Add the text to TextBuilder so that it can be placed over the PDF file
auto page = document->get_Pages()->Add();
page->get_Paragraphs()->Add(textFragment);
// Save resulting PDF document
document->Save(_dataDir + outputFileName);
}
Mendapatkan Lebar Teks Secara Dinamis
Kelas Aspose.Pdf.Text.TextState menunjukkan cara mendapatkan lebar teks secara dinamis dalam dokumen PDF.
Terkadang, diperlukan untuk mendapatkan lebar teks secara dinamis. Aspose.PDF untuk C++ menyertakan dua metode untuk pengukuran lebar string. Anda dapat memanggil metode MeasureString dari kelas Aspose.Pdf.Text.Font atau Aspose.Pdf.Text.TextState (atau keduanya). Cuplikan kode di bawah ini menunjukkan cara menggunakan fungsi ini.
void GetTextWidthDynamicaly() {
auto font = FontRepository::FindFont(u"Arial");
auto ts = MakeObject<TextState>();
ts->set_Font(font);
ts->set_FontSize(14);
if (Math::Abs(font->MeasureString(u"A", 14) - 9.337) > 0.001)
Console::WriteLine(u"Pengukuran string font tidak terduga!");
if (Math::Abs(ts->MeasureString(u"z") - 7.0) > 0.001)
Console::WriteLine(u"Pengukuran string font tidak terduga!");
for (char c = 'A'; c <= 'z'; c++) {
String v(c);
double fnMeasure = font->MeasureString(v, 14);
double tsMeasure = ts->MeasureString(v);
if (Math::Abs(fnMeasure - tsMeasure) > 0.001)
Console::WriteLine(u"Pengukuran string font dan state tidak cocok!");
}
}