تحسين ملفات PDF في Java

Aspose.PDF for Java يكشف عن ميزات التحسين عبر Document.optimize, optimizeResources، و OptimizationOptions.

تحسين ملف PDF باستخدام تحسين المستند العام

استخدم هذا المثال عندما تريد أن يقوم Aspose.PDF بتطبيق روتين تحسين المستند الكامل المدمج.

  1. افتح ملف PDF المصدر Document.
  2. استدعِ optimize() على المستند.
  3. احفظ الملف المُحسّن وقارن بين الأحجام الأصلية والصادرة.
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 عن طريق تحسين الموارد

يركز هذا المثال على تحسين مستوى الموارد دون تكوين الخيارات الفردية يدويًا.

  1. افتح ملف PDF المصدر Document.
  2. شغّل optimizeResources() لتحسين الموارد الداخلية.
  3. احفظ النتيجة واطبع أحجام ملفات الإدخال والإخراج.
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

استخدم هذا النهج عندما تحتاج المستندات التي تحتوي على الكثير من الصور إلى حجم ملف أصغر ويكون تقليل بعض جودة الصورة مقبولًا.

  1. افتح ملف PDF المصدر Document.
  2. أنشئ كائنًا من الفئة OptimizationOptions وفعّل ضغط الصورة بمستوى الجودة المطلوب.
  3. حسّن موارد المستند باستخدام تلك الإعدادات.
  4. احفظ الملف المُحسّن وقارن أحجام الملفات.
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

يعمل هذا المثال على إزالة الكائنات غير المستخدمة التي قد تبقى في بنية المستند بعد التعديلات أو عمليات الدمج.

  1. افتح ملف PDF المصدر Document.
  2. أنشئ كائنًا من الفئة OptimizationOptions وفعّل إزالة الكائنات غير المستخدمة.
  3. حسّن الموارد واحفظ الملف المحدث.
  4. اطبع أحجام الملفات الأصلية والمخفضة.
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

استخدم هذا النهج عندما تريد التخلص من بيانات التدفق التي لم تعد مُشار إليها من قبل المستند.

  1. افتح ملف PDF المصدر Document.
  2. اضبط OptimizationOptions لإزالة التدفقات غير المستخدمة.
  3. حسّن الموارد، احفظ مستند الإخراج، وقارن أحجام الملفات.
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

يُزيل هذا المثال التكرار في التدفقات المتكررة بحيث يمكن تخزين المحتوى المتطابق مرة واحدة فقط.

  1. افتح ملف PDF المصدر Document.
  2. أنشئ كائنًا من الفئة OptimizationOptions وفعّل ربط تدفق مكرر.
  3. حسّن الموارد، احفظ مستند الإخراج، واطبع أحجام الملفات.
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

استخدم هذا الخيار عندما يكون تقليل حجم الملف أكثر أهمية من الاحتفاظ ببيانات الخط المضمنة في الإخراج.

  1. افتح ملف PDF المصدر Document.
  2. اضبط OptimizationOptions لإلغاء تضمين الخطوط.
  3. حسّن الموارد، احفظ المستند، وقارن أحجام الملفات.
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

هذا المثال يحول التعليقات التوضيحية إلى محتوى ثابت للصفحة بحيث لا تظل كائنات تفاعلية.

  1. افتح ملف PDF المصدر Document.
  2. مرّ على كل Page وخاصته مجموعة Annotation.
  3. سطّح كل التعليقات التوضيحية واحفظ المستند المحدث.
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

استخدم هذا النهج عندما يجب أن تصبح حقول النموذج القابلة للملء محتوى ثابتًا قبل التوزيع أو الأرشفة.

  1. افتح ملف PDF المصدر Document.
  2. تحقّق مما إذا كان المستند يحتوي على أدوات النماذج.
  3. سطّح كل Field مُمَثَّل بـ WidgetAnnotation.
  4. احفظ ملف الإخراج واطبع أحجام الملفات.
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 إلى تدرج الرمادي

هذا المثال يغيّر كل صفحة إلى التدرج الرمادي، مما يمكن أن يساعد في تقليل تعقيد الألوان وتوحيد المخرجات لأغراض الأرشفة أو عمليات الطباعة.

  1. افتح ملف PDF المصدر Document.
  2. مرّ على كل Page في المستند.
  3. استدعِ 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.

  1. افتح ملف PDF المصدر Document.
  2. أنشئ كائنًا من الفئة OptimizationOptions وضع ترميز الصورة إلى ImageEncoding.Flate.
  3. حسّن موارد المستند واحفظ ملف الإخراج.
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());
    }
}

اطبع أحجام الملفات الأصلية والمحسّنة

هذه الطريقة المساعدة تُبلغ عن الفرق في الحجم بين ملف المصدر وملف الإخراج المُحسّن.

  1. اقرأ حجم ملف الإدخال.
  2. اقرأ حجم ملف الإخراج.
  3. اطبع القيمتين في رسالة حالة واحدة.
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));
}