Mencari dan mengekstrak teks PDF dalam Java
Aspose.PDF for Java mendukung ekstraksi teks mentah dan pencarian tingkat fragmen dengan koordinat, gaya, dan pencocokan regex.
Mengekstrak teks dari semua halaman dengan TextAbsorber
Gunakan contoh ini ketika Anda memerlukan teks yang diekstrak secara polos dari wilayah dokumen yang dipilih di semua halaman.
- Buka dokumen PDF sumber.
- Buat
TextExtractionOptionsdan berbasis wilayahTextSearchOptions. - Jalankan
TextAbsorberpada semua halaman dan keluarkan teks yang diekstrak.
public static void textAbsorberSearch(Path inputFile) {
try (Document document = new Document(inputFile.toString())) {
TextExtractionOptions textExtractionOptions = new TextExtractionOptions(TextExtractionOptions.TextFormattingMode.Pure);
TextSearchOptions textSearchOptions = new TextSearchOptions(new Rectangle(0, 0, 842, 250, true));
TextAbsorber absorber = new TextAbsorber(textExtractionOptions, textSearchOptions);
document.getPages().accept(absorber);
System.out.println("Text fragments found: " + absorber.getText());
}
}
Mengekstrak teks dari satu halaman dengan TextAbsorber
Gunakan contoh ini ketika ekstraksi teks biasa harus dibatasi hanya satu halaman.
- Buka dokumen PDF sumber.
- Konfigurasikan ekstraksi teks dan opsi pencarian dengan wilayah target.
- Jalankan
TextAbsorberpada halaman yang dipilih dan keluarkan hasilnya.
public static void textAbsorberSearchPage(Path inputFile) {
try (Document document = new Document(inputFile.toString())) {
TextExtractionOptions textExtractionOptions = new TextExtractionOptions(TextExtractionOptions.TextFormattingMode.Pure);
TextSearchOptions textSearchOptions = new TextSearchOptions(new Rectangle(0, 0, 842, 250, true));
TextAbsorber absorber = new TextAbsorber(textExtractionOptions, textSearchOptions);
document.getPages().get_Item(2).accept(absorber);
System.out.println("Text fragments found: " + absorber.getText());
}
}
Memeriksa semua fragmen teks dalam dokumen
Gunakan contoh ini ketika Anda membutuhkan konten teks bersamaan dengan metadata font, posisi, dan warna.
- Buka dokumen PDF sumber.
- Jalankan
TextFragmentAbsorberdi semua halaman. - Iterasikan melalui fragmen dan keluarkan metadata mereka.
public static void textFragmentAbsorberSearch(Path inputFile) {
try (Document document = new Document(inputFile.toString())) {
TextFragmentAbsorber absorber = new TextFragmentAbsorber();
document.getPages().accept(absorber);
for (TextFragment fragment : absorber.getTextFragments()) {
System.out.println("Text: " + fragment.getText());
System.out.println("Position: " + fragment.getPosition());
System.out.println("XIndent: " + fragment.getPosition().getXIndent());
System.out.println("YIndent: " + fragment.getPosition().getYIndent());
System.out.println("Font - Name: " + fragment.getTextState().getFont().getFontName());
System.out.println("Font - IsAccessible: " + fragment.getTextState().getFont().isAccessible());
System.out.println("Font - IsEmbedded: " + fragment.getTextState().getFont().isEmbedded());
System.out.println("Font - IsSubset: " + fragment.getTextState().getFont().isSubset());
System.out.println("Font Size: " + fragment.getTextState().getFontSize());
System.out.println("Foreground Color: " + fragment.getTextState().getForegroundColor());
}
}
}
Mencari satu frasa pada halaman tertentu
Gunakan contoh ini ketika kata target harus ditemukan hanya pada halaman yang dipilih.
- Buka dokumen PDF sumber.
- Buat
TextFragmentAbsorberdengan frasa target. - Kunjungi halaman yang dipilih dan keluarkan posisi fragmen yang cocok.
public static void textFragmentAbsorberSearchPage(Path inputFile) {
try (Document document = new Document(inputFile.toString())) {
TextFragmentAbsorber absorber = new TextFragmentAbsorber("whale");
document.getPages().get_Item(2).accept(absorber);
for (TextFragment fragment : absorber.getTextFragments()) {
System.out.println("Text: " + fragment.getText());
System.out.println("Position: " + fragment.getPosition());
}
}
}
Melanjutkan pencarian berurutan di seluruh halaman
Gunakan contoh ini ketika Anda ingin menggunakan kembali satu absorber saat berpindah dari pencarian satu halaman ke halaman berikutnya.
- Buka dokumen PDF sumber dan buat absorber yang dapat digunakan kembali.
- Cari halaman pertama dan periksa hasilnya.
- Lanjutkan pencarian halaman tambahan dan tinjau kecocokan yang diperbarui.
public static void textFragmentAbsorberSequentialSearch(Path inputFile) {
Document document = new Document(inputFile.toString());
TextFragmentAbsorber absorber = new TextFragmentAbsorber();
absorber.setPhrase("whale");
document.getPages().get_Item(1).accept(absorber);
for (TextFragment fragment : absorber.getTextFragments()) {
System.out.println("Text: " + fragment.getText());
System.out.println("Page: " + fragment.getPage().getNumber());
System.out.println("Position: " + fragment.getPosition());
}
System.out.println("--");
document.getPages().get_Item(2).accept(absorber);
absorber.visit(document);
for (TextFragment fragment : absorber.getTextFragments()) {
System.out.println("Text: " + fragment.getText());
System.out.println("Page: " + fragment.getPage().getNumber());
System.out.println("Position: " + fragment.getPosition());
}
}
Mencari frasa di dalam persegi panjang terpilih
Gunakan contoh ini ketika pencocokan frasa harus dibatasi pada suatu wilayah di satu halaman.
- Buka dokumen PDF sumber.
- Buat
TextFragmentAbsorberdengan frasa target dan berbasis persegi panjangTextSearchOptions. - Kunjungi halaman dan keluarkan posisi fragmen yang cocok.
public static void textFragmentAbsorberSearchPhrase(Path inputFile) {
try (Document document = new Document(inputFile.toString())) {
TextFragmentAbsorber absorber = new TextFragmentAbsorber(
"elephant", new TextSearchOptions(new Rectangle(0, 0, 842, 250, true)));
document.getPages().get_Item(2).accept(absorber);
for (TextFragment fragment : absorber.getTextFragments()) {
System.out.println("Text: " + fragment.getText());
System.out.println("Position: " + fragment.getPosition());
}
}
}
Mencari teks dengan ekspresi reguler
Gunakan contoh ini ketika pencocokan harus ditemukan dengan pola regex, bukan frasa tetap.
- Buka dokumen PDF sumber.
- Buat yang mendukung regex
TextFragmentAbsorber. - Kunjungi halaman target dan keluarkan fragmen yang cocok.
public static void textFragmentAbsorberSearchRegex(Path inputFile) {
try (Document document = new Document(inputFile.toString())) {
TextFragmentAbsorber absorber = new TextFragmentAbsorber(
Pattern.compile("\\d+\\.\\d+"), new TextSearchOptions(true));
document.getPages().get_Item(2).accept(absorber);
for (TextFragment fragment : absorber.getTextFragments()) {
System.out.println("Text: " + fragment.getText());
System.out.println("Position: " + fragment.getPosition());
}
}
}
Mencari daftar frasa berdasarkan pola regex
Gunakan contoh ini ketika beberapa frasa target harus ditemukan dalam satu kali proses.
- Buka dokumen PDF sumber.
- Buat sebuah array pola regex dan berikan ke
TextFragmentAbsorber. - Kunjungi dokumen dan periksa hasil regex yang dikelompokkan.
public static void textFragmentAbsorberSearchListOfPhrases(Path inputFile) {
try (Document document = new Document(inputFile.toString())) {
Pattern[] patterns = new Pattern[] {
Pattern.compile("whale"),
Pattern.compile("elephant")
};
TextFragmentAbsorber absorber = new TextFragmentAbsorber(patterns, new TextSearchOptions(true));
document.getPages().accept(absorber);
for (TextFragmentCollection fragments : absorber.getRegexResults().values()) {
for (TextFragment fragment : fragments) {
System.out.println("Text: " + fragment.getText());
System.out.println("Position: " + fragment.getPosition());
}
}
}
}
Menemukan teks dan mengubah menjadi tautan
Gunakan contoh ini ketika kata yang cocok harus disorot dan diubah menjadi tautan yang dapat diklik.
- Buka dokumen PDF sumber.
- Cari kata target dengan pencarian regex diaktifkan.
- Perbarui gaya teks, lampirkan tautan hiper, dan simpan PDF yang dimodifikasi.
public static void textFragmentAbsorberSearchAndAddHyperlink(Path inputFile) {
try (Document document = new Document(inputFile.toString())) {
TextFragmentAbsorber absorber = new TextFragmentAbsorber("whale|elephant");
absorber.setTextSearchOptions(new TextSearchOptions(true));
absorber.visit(document.getPages().get_Item(1));
for (TextFragment fragment : absorber.getTextFragments()) {
fragment.getTextState().setForegroundColor(Color.getBlue());
fragment.getTextState().setUnderline(true);
fragment.setHyperlink(new WebHyperlink("https://en.wikipedia.org/wiki/" + fragment.getText()));
}
document.save(inputFile.toString().replace("in.pdf", "out.pdf"));
}
}
Mencari teks berdasarkan karakteristik gaya
Gunakan contoh ini ketika Anda perlu memeriksa fragmen berdasarkan pemformatan seperti tebal atau teks tak terlihat.
- Buka dokumen PDF sumber.
- Jalankan
TextFragmentAbsorberpada halaman target. - Periksa setiap gaya fragmen dan keluarkan entri yang cocok.
public static void textFragmentAbsorberSearchStyledText(Path inputFile) {
try (Document document = new Document(inputFile.toString())) {
TextFragmentAbsorber absorber = new TextFragmentAbsorber();
absorber.setTextSearchOptions(new TextSearchOptions(true));
absorber.visit(document.getPages().get_Item(1));
for (TextFragment fragment : absorber.getTextFragments()) {
if (fragment.getTextState().getFontStyle() == FontStyles.Bold) {
System.out.println("Bold: " + fragment.getText());
}
if (fragment.getTextState().isInvisible()) {
System.out.println("Invisible: " + fragment.getText());
}
}
}
}
Menyorot hasil pencarian di pratinjau halaman yang dirender
Gunakan contoh ini ketika kecocokan teks harus dikorelasikan dengan gambar halaman yang dirender untuk pemeriksaan visual.
- Buat perangkat PNG dengan resolusi yang diperlukan.
- Cari setiap halaman dengan
TextFragmentAbsorberdan render halaman ke aliran gambar. - Tuliskan gambar pratinjau halaman dan keluarkan koordinat fragmen untuk inspeksi.
public static void textFragmentAbsorberSearchAndHighlight(Path inputFile) throws Exception {
int resolution = 150;
PngDevice pngDevice = new PngDevice(new Resolution(resolution, resolution));
try (Document document = new Document(inputFile.toString())) {
TextFragmentAbsorber absorber = new TextFragmentAbsorber(Pattern.compile("[\\S]+"));
absorber.setTextSearchOptions(new TextSearchOptions(true));
for (int pageNumber = 1; pageNumber <= document.getPages().size(); pageNumber++) {
Page page = document.getPages().get_Item(pageNumber);
page.accept(absorber);
try (ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
pngDevice.process(page, stream);
Path output = Path.of(inputFile.toString().replace("_in.pdf", page.getNumber() + "_out.png"));
Files.write(output, stream.toByteArray());
}
for (TextFragment textFragment : absorber.getTextFragments()) {
Rectangle pageRect = page.getPageRect(true);
System.out.println("TextFragment = " + textFragment.getText()
+ " Page URY = " + pageRect.getURY()
+ " TextFragment URY = " + textFragment.getRectangle().getURY());
}
}
}
}