تحسين ملفات PDF في Java
Aspose.PDF for Java يكشف عن ميزات التحسين عبر Document.optimize, optimizeResources، و OptimizationOptions.
تحسين ملف PDF باستخدام تحسين المستند العام
استخدم هذا المثال عندما تريد أن يقوم Aspose.PDF بتطبيق روتين تحسين المستند الكامل المدمج.
- افتح ملف PDF المصدر Document.
- استدعِ
optimize()على المستند. - احفظ الملف المُحسّن وقارن بين الأحجام الأصلية والصادرة.
public static void optimizePdf(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
document.optimize();
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
تقليل حجم PDF عن طريق تحسين الموارد
يركز هذا المثال على تحسين مستوى الموارد دون تكوين الخيارات الفردية يدويًا.
- افتح ملف PDF المصدر Document.
- شغّل
optimizeResources()لتحسين الموارد الداخلية. - احفظ النتيجة واطبع أحجام ملفات الإدخال والإخراج.
public static void reduceSizePdf(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
document.optimizeResources();
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
ضغط جميع الصور في PDF
استخدم هذا النهج عندما تحتاج المستندات التي تحتوي على الكثير من الصور إلى حجم ملف أصغر ويكون تقليل بعض جودة الصورة مقبولًا.
- افتح ملف PDF المصدر Document.
- أنشئ كائنًا من الفئة OptimizationOptions وفعّل ضغط الصورة بمستوى الجودة المطلوب.
- حسّن موارد المستند باستخدام تلك الإعدادات.
- احفظ الملف المُحسّن وقارن أحجام الملفات.
public static void shrinkingOrCompressingAllImages(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
OptimizationOptions optimizeOptions = new OptimizationOptions();
optimizeOptions.getImageCompressionOptions().setCompressImages(true);
optimizeOptions.getImageCompressionOptions().setImageQuality(50);
document.optimizeResources(optimizeOptions);
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
إزالة الكائنات غير المستخدمة من ملف PDF
يعمل هذا المثال على إزالة الكائنات غير المستخدمة التي قد تبقى في بنية المستند بعد التعديلات أو عمليات الدمج.
- افتح ملف PDF المصدر Document.
- أنشئ كائنًا من الفئة OptimizationOptions وفعّل إزالة الكائنات غير المستخدمة.
- حسّن الموارد واحفظ الملف المحدث.
- اطبع أحجام الملفات الأصلية والمخفضة.
public static void removingUnusedObjects(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
OptimizationOptions optimizeOptions = new OptimizationOptions();
optimizeOptions.setRemoveUnusedObjects(true);
document.optimizeResources(optimizeOptions);
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
إزالة التدفقات غير المستخدمة من ملف PDF
استخدم هذا النهج عندما تريد التخلص من بيانات التدفق التي لم تعد مُشار إليها من قبل المستند.
- افتح ملف PDF المصدر Document.
- اضبط OptimizationOptions لإزالة التدفقات غير المستخدمة.
- حسّن الموارد، احفظ مستند الإخراج، وقارن أحجام الملفات.
public static void removingUnusedStreams(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
OptimizationOptions optimizeOptions = new OptimizationOptions();
optimizeOptions.setRemoveUnusedStreams(true);
document.optimizeResources(optimizeOptions);
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
ربط التدفقات المكررة في ملف PDF
يُزيل هذا المثال التكرار في التدفقات المتكررة بحيث يمكن تخزين المحتوى المتطابق مرة واحدة فقط.
- افتح ملف PDF المصدر Document.
- أنشئ كائنًا من الفئة OptimizationOptions وفعّل ربط تدفق مكرر.
- حسّن الموارد، احفظ مستند الإخراج، واطبع أحجام الملفات.
public static void linkingDuplicateStreams(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
OptimizationOptions optimizeOptions = new OptimizationOptions();
optimizeOptions.setLinkDuplicateStreams(true);
document.optimizeResources(optimizeOptions);
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
إلغاء تضمين الخطوط من ملف PDF
استخدم هذا الخيار عندما يكون تقليل حجم الملف أكثر أهمية من الاحتفاظ ببيانات الخط المضمنة في الإخراج.
- افتح ملف PDF المصدر Document.
- اضبط OptimizationOptions لإلغاء تضمين الخطوط.
- حسّن الموارد، احفظ المستند، وقارن أحجام الملفات.
public static void unembedFonts(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
OptimizationOptions optimizeOptions = new OptimizationOptions();
optimizeOptions.setUnembedFonts(true);
document.optimizeResources(optimizeOptions);
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
تسطيح التعليقات التوضيحية في ملف PDF
هذا المثال يحول التعليقات التوضيحية إلى محتوى ثابت للصفحة بحيث لا تظل كائنات تفاعلية.
- افتح ملف PDF المصدر Document.
- مرّ على كل Page وخاصته مجموعة Annotation.
- سطّح كل التعليقات التوضيحية واحفظ المستند المحدث.
public static void flattenAnnotations(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
for (Page page : document.getPages()) {
for (Annotation annotation : page.getAnnotations()) {
annotation.flatten();
}
}
document.save(outputFile.toString());
}
}
تسطيح حقول نموذج PDF
استخدم هذا النهج عندما يجب أن تصبح حقول النموذج القابلة للملء محتوى ثابتًا قبل التوزيع أو الأرشفة.
- افتح ملف PDF المصدر Document.
- تحقّق مما إذا كان المستند يحتوي على أدوات النماذج.
- سطّح كل Field مُمَثَّل بـ WidgetAnnotation.
- احفظ ملف الإخراج واطبع أحجام الملفات.
public static void flattenForms(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
if (document.getForm() != null && document.getForm().size() > 0) {
for (WidgetAnnotation annotation : document.getForm()) {
if (annotation instanceof Field field) {
field.flatten();
}
}
}
document.save(outputFile.toString());
}
printFileSizes(inputFile, outputFile);
}
تحويل ملف PDF إلى تدرج الرمادي
هذا المثال يغيّر كل صفحة إلى التدرج الرمادي، مما يمكن أن يساعد في تقليل تعقيد الألوان وتوحيد المخرجات لأغراض الأرشفة أو عمليات الطباعة.
- افتح ملف PDF المصدر Document.
- مرّ على كل Page في المستند.
- استدعِ
makeGrayscale()على كل صفحة واحفظ ملف الإخراج.
public static void convertPdfFromRgbColorspaceToGrayscale(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
for (Page page : document.getPages()) {
page.makeGrayscale();
}
document.save(outputFile.toString());
}
}
استخدام ضغط الصور FlateDecode
استخدم هذا النمط عندما تريد تطبيق ضغط Flate-based على الصور أثناء تحسين موارد PDF.
- افتح ملف PDF المصدر Document.
- أنشئ كائنًا من الفئة OptimizationOptions وضع ترميز الصورة إلى ImageEncoding.
Flate. - حسّن موارد المستند واحفظ ملف الإخراج.
public static void usingFlatedecodeCompression(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
OptimizationOptions optimizationOptions = new OptimizationOptions();
optimizationOptions.getImageCompressionOptions().setEncoding(ImageEncoding.Flate);
document.optimizeResources(optimizationOptions);
document.save(outputFile.toString());
}
}
اطبع أحجام الملفات الأصلية والمحسّنة
هذه الطريقة المساعدة تُبلغ عن الفرق في الحجم بين ملف المصدر وملف الإخراج المُحسّن.
- اقرأ حجم ملف الإدخال.
- اقرأ حجم ملف الإخراج.
- اطبع القيمتين في رسالة حالة واحدة.
private static void printFileSizes(Path inputFile, Path outputFile) throws Exception {
System.out.println("Original file size: " + Files.size(inputFile)
+ ". Reduced file size: " + Files.size(outputFile));
}