Optimalkan File PDF di Python
Dokumen PDF terkadang dapat berisi data tambahan. Mengurangi ukuran file PDF akan membantu Anda mengoptimalkan transfer jaringan dan penyimpanan. Ini sangat berguna untuk penerbitan di halaman web, berbagi di jejaring sosial, mengirim lewat e‑mail, atau mengarsipkan dalam penyimpanan. Kita dapat menggunakan beberapa teknik untuk mengoptimalkan PDF:
Gunakan halaman ini ketika Anda perlu mengurangi ukuran PDF untuk pengiriman web, berbagi email, penghematan penyimpanan, atau output yang ramah cetak tanpa harus membangun ulang dokumen dari awal.
- Optimalkan konten halaman untuk penelusuran daring
- Perkecil atau kompres semua gambar
- Aktifkan penggunaan kembali konten halaman
- Gabungkan aliran duplikat
- Lepaskan penyematan font
- Hapus objek yang tidak digunakan
- Hapus pemipihan bidang formulir
- Hapus atau ratakan anotasi
Optimalkan Dokumen PDF untuk Web
Optimisasi, atau linearisasi untuk Web, mengacu pada proses menjadikan file PDF cocok untuk penelusuran online menggunakan peramban web. Untuk mengoptimalkan file untuk tampilan web:
- Buka dokumen input dalam sebuah Document objek.
- Gunakan optimize metode.
- Simpan dokumen yang dioptimalkan menggunakan save() metode.
Cuplikan kode berikut menunjukkan cara mengoptimalkan dokumen PDF untuk web.
import aspose.pdf as ap
from os import path, stat
import sys
def optimize_pdf(infile, outfile):
document = ap.Document(infile)
document.optimize()
document.save(outfile)
file_stats_1 = stat(infile)
file_stats_2 = stat(outfile)
print(
"Original file size: {}. Reduced file size: {}".format(
file_stats_1.st_size, file_stats_2.st_size
)
)
Kurangi Ukuran PDF
The OptimizeResources() metode memungkinkan Anda mengurangi ukuran dokumen dengan menghilangkan informasi yang tidak perlu. Secara default, metode ini bekerja sebagai berikut:
- Sumber daya yang tidak digunakan pada halaman dokumen dihapus
- Sumber daya yang sama digabung menjadi satu objek
- Objek yang tidak terpakai dihapus
Potongan kode di bawah ini adalah contoh. Catatan, meskipun, metode ini tidak dapat menjamin pengecilan dokumen.
import aspose.pdf as ap
from os import path, stat
import sys
def reduce_size_pdf(infile, outfile):
# Open document
document = ap.Document(infile)
# Optimize PDF document. Note, though, that this method cannot guarantee document shrinking
document.optimize_resources()
# Save updated document
document.save(outfile)
file_stats_1 = stat(infile)
file_stats_2 = stat(outfile)
print(
"Original file size: {}. Reduced file size: {}".format(
file_stats_1.st_size, file_stats_2.st_size
)
)
Manajemen Strategi Optimasi
Kami juga dapat menyesuaikan strategi optimisasi. Saat ini, OptimizeResources() metode menggunakan 5 teknik. Teknik-teknik ini dapat diterapkan menggunakan metode OptimizeResources() dengan OpsiOptimisasi parameter.
Memperkecil atau Mengompresi Semua Gambar
Kami memiliki dua cara untuk bekerja dengan gambar: mengurangi kualitas gambar dan/atau mengubah resolusinya. Dalam hal apapun, OpsiKompresiGambar harus diterapkan. Pada contoh berikut, kami memperkecil gambar dengan mengurangi ImageQuality menjadi 50.
import aspose.pdf as ap
from os import path, stat
import sys
def shrinking_or_compressing_all_images(infile, outfile):
# Open document
document = ap.Document(infile)
# Initialize OptimizationOptions
optimizeOptions = ap.optimization.OptimizationOptions()
# Set CompressImages option
optimizeOptions.image_compression_options.compress_images = True
# Set ImageQuality option
optimizeOptions.image_compression_options.image_quality = 50
# Optimize PDF document using OptimizationOptions
document.optimize_resources(optimizeOptions)
# Save updated document
document.save(outfile)
file_stats_1 = stat(infile)
file_stats_2 = stat(outfile)
print(
"Original file size: {}. Reduced file size: {}".format(
file_stats_1.st_size, file_stats_2.st_size
)
)
Menghapus Objek yang Tidak Digunakan
Dokumen PDF kadang‑kadang berisi objek PDF yang tidak dirujuk oleh objek lain manapun dalam dokumen. Ini dapat terjadi, misalnya, ketika sebuah halaman dihapus dari pohon halaman dokumen tetapi objek halaman itu sendiri tidak dihapus. Menghapus objek‑objek ini tidak membuat dokumen menjadi tidak valid, melainkan mengurangi ukurannya.
import aspose.pdf as ap
from os import path, stat
import sys
def removing_unused_objects(infile, outfile):
# Open document
document = ap.Document(infile)
# Set RemoveUnusedObjects option
optimizeOptions = ap.optimization.OptimizationOptions()
optimizeOptions.remove_unused_objects = True
# Optimize PDF document using OptimizationOptions
document.optimize_resources(optimizeOptions)
# Save updated document
document.save(outfile)
file_stats_1 = stat(infile)
file_stats_2 = stat(outfile)
print(
"Original file size: {}. Reduced file size: {}".format(
file_stats_1.st_size, file_stats_2.st_size
)
)
Menghapus Stream yang Tidak Digunakan
Kadang-kadang dokumen mengandung aliran sumber daya yang tidak terpakai. Aliran tersebut bukan “unused objects” karena direferensikan dari kamus sumber daya halaman. Oleh karena itu, mereka tidak dihapus dengan metode “remove unused objects”. Namun aliran ini tidak pernah digunakan dalam konten halaman. Ini dapat terjadi ketika sebuah gambar telah dihapus dari halaman tetapi tidak dari sumber daya halaman. Selain itu, situasi ini sering terjadi ketika halaman diekstrak dari dokumen dan halaman dokumen memiliki sumber daya “common”, yaitu, objek Resources yang sama. Konten halaman dianalisis untuk menentukan apakah aliran sumber daya digunakan atau tidak. Aliran yang tidak terpakai dihapus. Hal ini kadang-kadang mengurangi ukuran dokumen. Penggunaan teknik ini mirip dengan langkah sebelumnya:
import aspose.pdf as ap
from os import path, stat
import sys
def removing_unused_streams(infile, outfile):
# Open document
document = ap.Document(infile)
# Set RemoveUnusedStreams option
optimizeOptions = ap.optimization.OptimizationOptions()
optimizeOptions.remove_unused_streams = True
# Optimize PDF document using OptimizationOptions
document.optimize_resources(optimizeOptions)
# Save updated document
document.save(outfile)
file_stats_1 = stat(infile)
file_stats_2 = stat(outfile)
print(
"Original file size: {}. Reduced file size: {}".format(
file_stats_1.st_size, file_stats_2.st_size
)
)
Menautkan Aliran Duplikat
Beberapa dokumen dapat berisi beberapa aliran sumber daya yang identik (seperti gambar, misalnya). Ini dapat terjadi, misalnya ketika sebuah dokumen digabungkan dengan dirinya sendiri. Dokumen output berisi dua salinan independen dari aliran sumber daya yang sama. Kami menganalisis semua aliran sumber daya dan membandingkannya. Jika aliran tersebut diduplikasi, mereka digabungkan, yaitu hanya satu salinan yang tersisa. Referensi diubah secara tepat, dan salinan objek dihapus. Dalam beberapa kasus, ini membantu mengurangi ukuran dokumen.
import aspose.pdf as ap
from os import path, stat
import sys
def linking_duplicate_streams(infile, outfile):
# Open document
document = ap.Document(infile)
# Set link_duplicate_streams option
optimizeOptions = ap.optimization.OptimizationOptions()
optimizeOptions.link_duplicate_streams = True
# Optimize PDF document using OptimizationOptions
document.optimize_resources(optimizeOptions)
# Save updated document
document.save(outfile)
file_stats_1 = stat(infile)
file_stats_2 = stat(outfile)
print(
"Original file size: {}. Reduced file size: {}".format(
file_stats_1.st_size, file_stats_2.st_size
)
)
Melepaskan Penyematan Font
Jika dokumen menggunakan font yang disematkan, itu berarti semua data font disimpan dalam dokumen. Keuntungannya adalah dokumen dapat dilihat terlepas dari apakah font tersebut terpasang di mesin pengguna atau tidak. Namun menyematkan font membuat dokumen menjadi lebih besar. Metode unembed fonts menghapus semua font yang disematkan. Dengan demikian, ukuran dokumen berkurang tetapi dokumen itu sendiri mungkin menjadi tidak dapat dibaca jika font yang tepat tidak terpasang.
import aspose.pdf as ap
from os import path, stat
import sys
def unembed_fonts(infile, outfile):
# Open document
document = ap.Document(infile)
# Set unembed_fonts option
optimize_options = ap.optimization.OptimizationOptions()
optimize_options.unembed_fonts = True
# Optimize PDF document using OptimizationOptions
document.optimize_resources(optimize_options)
# Save updated document
document.save(outfile)
file_stats_1 = stat(infile)
file_stats_2 = stat(outfile)
print(
"Original file size: {}. Reduced file size: {}".format(
file_stats_1.st_size, file_stats_2.st_size
)
)
Sumber daya optimasi menerapkan metode‑metode ini pada dokumen. Jika salah satu dari metode ini diterapkan, ukuran dokumen kemungkinan besar akan berkurang. Jika tidak ada metode ini yang diterapkan, ukuran dokumen tidak akan berubah, yang jelas.
Cara Tambahan untuk Mengurangi Ukuran Dokumen PDF
Menghapus atau Meratakan Anotasi
Annotasi dapat dihapus ketika tidak diperlukan. Ketika diperlukan tetapi tidak memerlukan penyuntingan tambahan, mereka dapat diflatkan. Kedua teknik ini akan mengurangi ukuran file.
import aspose.pdf as ap
from os import path, stat
import sys
def flatten_annotations(infile, outfile):
# Open document
document = ap.Document(infile)
# Flatten annotations
for page in document.pages:
for annotation in page.annotations:
annotation.flatten()
# Save updated document
document.save(outfile)
Menghapus Bidang Form
Jika dokumen PDF berisi AcroForms, kita dapat mencoba mengurangi ukuran file dengan meratakan bidang formulir.
import aspose.pdf as ap
from os import path, stat
import sys
def flatten_forms(infile, outfile):
# Load source PDF form
doc = ap.Document(infile)
# Flatten Forms
if len(doc.form.fields) > 0:
for item in doc.form.fields:
item.flatten()
# Save the updated document
doc.save(outfile)
file_stats_1 = stat(infile)
file_stats_2 = stat(outfile)
print(
"Original file size: {}. Reduced file size: {}".format(
file_stats_1.st_size, file_stats_2.st_size
)
)
Konversi PDF dari ruang warna RGB ke skala abu-abu
File PDF terdiri dari Text, Image, Attachment, Annotations, Graphs, dan objek lainnya. Anda mungkin menemukan kebutuhan untuk mengubah PDF dari ruang warna RGB ke grayscale sehingga pencetakan file PDF tersebut lebih cepat. Selain itu, ketika file diubah menjadi grayscale, ukuran dokumen juga berkurang, tetapi hal itu juga dapat menyebabkan penurunan kualitas dokumen. Fitur ini saat ini didukung oleh fitur Pre-Flight di Adobe Acrobat, tetapi ketika membahas otomasi Office, Aspose.PDF adalah solusi utama untuk menyediakan manfaat tersebut dalam manipulasi dokumen. Untuk memenuhi kebutuhan ini, cuplikan kode berikut dapat digunakan.
import aspose.pdf as ap
from os import path, stat
import sys
def сonvert_PDF_from_RGB_colorspace_to_grayscale(infile, outfile):
document = ap.Document(infile)
strategy = ap.RgbToDeviceGrayConversionStrategy()
for page in document.pages:
# Convert the RGB colorspace image to GrayScale colorspace
strategy.convert(page)
# Save resultant file
document.save(outfile)
Kompresi FlateDecode
Aspose.PDF for Python via .NET menyediakan dukungan kompresi FlateDecode untuk fungsi Optimalisasi PDF. Potongan kode di bawah ini menunjukkan cara menggunakan opsi dalam Optimalisasi untuk menyimpan gambar dengan kompresi FlateDecode:
import aspose.pdf as ap
from os import path, stat
import sys
def using_flatedecode_compression(infile, outfile):
# Open Document
doc = ap.Document(infile)
# Initialize OptimizationOptions
optimizationOptions = ap.optimization.OptimizationOptions()
# To optimise image using FlateDecode Compression set optimization options to Flate
optimizationOptions.image_compression_options.encoding = (
ap.optimization.ImageEncoding.FLATE
)
# Set Optimization Options
doc.optimize_resources(optimizationOptions)
# Save Document
doc.save(outfile)