إنشاء ملفات PDF في Java

Aspose.PDF for Java يدعم كل من إنشاء المستندات البسيطة وتدفقات عمل PDF القابلة للبحث المدعومة بتقنية OCR.

إنشاء مستند PDF جديد

استخدم هذا النهج عندما تحتاج إلى إنشاء ملف PDF بسيط من الصفر.

  1. أنشئ PDF جديد Document.
  2. أضف Page إلى المستند.
  3. أنشئ كائنًا من الفئة TextFragment وأضف ذلك إلى الصفحة.
  4. احفظ ملف PDF الناتج Document.
public static void createNewDocument(Path outputFile) {
    try (Document document = new Document()) {
        Page page = document.getPages().add();
        page.getParagraphs().add(new TextFragment("Hello World!"));
        document.save(outputFile.toString());
    }
}

إنشاء PDF قابل للبحث

ال createSearchablePdf أمثلة الاستخدام Document.convert(...) مع CallBackGetHocr التنفيذ. تقوم الدالة الراجعة بكتابة صورة المصدر إلى ملف مؤقت، وتستدعي Tesseract مع hocr الخيار، يقرأ ترميز HOCR الذي تم إنشاؤه، ويعيده إلى Aspose.PDF.

  1. افتح ملف PDF المصدر Document.
  2. أنشئ CallBackGetHocr استدعاء وتحويل المستند المصدر إلى محتوى PDF قابل للبحث.
  3. احفظ ملف PDF المحدث Document.
public static void createSearchablePdf(Path inputFile, Path outputFile) {
    Path tempDir = outputFile.getParent().resolve("ocr-temp");
    CallBackGetHocr cbgh = new CallBackGetHocr() {
        @Override
        public String invoke(java.awt.image.BufferedImage img) {
            // save the image, run Tesseract with "hocr", and return the HOCR text
            return fileContents.toString();
        }
    };
    try (Document document = new Document(inputFile.toString())) {
        document.convert(cbgh);
        document.save(outputFile.toString());
    }
}

احصل على إعدادات نافذة المستند

استخدم هذا المثال لتفقد تفضيلات المشاهد الحالية المخزنة في مستند PDF موجود.

  1. افتح ملف PDF المصدر Document.
  2. اقرأ خصائص النافذة والعرض المطلوبة من المستند.
  3. اعرض الإعدادات الحالية للفحص أو التصحيح.
public static void getDocumentWindow(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        System.out.println("CenterWindow: " + document.isCenterWindow());
        System.out.println("Direction: " + document.getDirection());
        System.out.println("DisplayDocTitle: " + document.isDisplayDocTitle());
        System.out.println("FitWindow: " + document.isFitWindow());
        System.out.println("HideMenuBar: " + document.isHideMenubar());
        System.out.println("HideToolBar: " + document.isHideToolBar());
        System.out.println("HideWindowUI: " + document.isHideWindowUI());
        System.out.println("NonFullScreenPageMode: " + document.getNonFullScreenPageMode());
        System.out.println("PageLayout: " + document.getPageLayout());
        System.out.println("PageMode: " + document.getPageMode());
    }
}

تعيين تفضيلات نافذة المستند

يحدّث هذا المثال كيفية عرض ملف PDF عندما يتم فتحه في عارض متوافق.

  1. افتح ملف PDF المصدر Document.
  2. عيّن تفضيلات النافذة والتخطيط ووضع الصفحة المطلوبة.
  3. احفظ ملف PDF المحدث Document.
public static void setDocumentWindow(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        document.setCenterWindow(true);
        document.setDirection(Direction.R2L);
        document.setDisplayDocTitle(true);
        document.setFitWindow(true);
        document.setHideMenubar(true);
        document.setHideToolBar(true);
        document.setHideWindowUI(true);
        document.setNonFullScreenPageMode(PageMode.UseOC);
        document.setPageLayout(PageLayout.TwoColumnLeft);
        document.setPageMode(PageMode.UseThumbs);
        document.save(outputFile.toString());
    }
}

تضمين الخطوط في ملف PDF موجود

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

  1. افتح ملف PDF المصدر Document.
  2. فعّل تضمين الخطوط القياسية وتكرار الخطوط المستخدمة في كل منها Page.
  3. علّم أي غير مضمّن كائنات Font للتضمين.
  4. احفظ المستند المحدث.
public static void embeddedFonts(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        document.setEmbedStandardFonts(true);
        for (Page page : document.getPages()) {
            for (Font pageFont : page.getResources().getFonts()) {
                if (!pageFont.isEmbedded()) {
                    pageFont.setEmbedded(true);
                }
            }
        }
        document.save(outputFile.toString());
    }
}

تضمين الخطوط عند إنشاء ملف PDF جديد

هذا المثال ينشئ ملف PDF جديد ويُعيّن خطًا مضمّنًا إلى محتوى النص منذ البداية.

  1. أنشئ PDF جديد Document وأضف Page.
  2. أنشئ المطلوب TextFragment, TextSegment، و TextState.
  3. استرجع الخط المستهدف Font من المستودع وضع علامة عليه لتضمينه.
  4. أضف محتوى النص إلى الصفحة واحفظ مستند الإخراج.
public static void embeddedFontsInNewDocument(Path outputFile) {
    try (Document document = new Document()) {
        try (Page page = document.getPages().add()) {
            TextFragment fragment = new TextFragment("");
            TextSegment segment = new TextSegment(" This is a sample text using Custom font.");
            TextState textState = new TextState();
            Font font = FontRepository.findFont("Arial");
            font.setEmbedded(true);
            textState.setFont(font);
            segment.setTextState(textState);
            fragment.getSegments().add(segment);
            page.getParagraphs().add(fragment);
        }
        document.save(outputFile.toString());
    }
}

ضبط خط افتراضي لإخراج PDF

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

  1. افتح ملف PDF المصدر Document.
  2. أنشئ كائنًا من الفئة PdfSaveOptions وحدد اسم الخط الافتراضي.
  3. احفظ المستند باستخدام خيارات الحفظ المُكوَّنة.
public static void setDefaultFont(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        PdfSaveOptions saveOptions = new PdfSaveOptions();
        saveOptions.setDefaultFontName("Arial");
        document.save(outputFile.toString(), saveOptions);
    }
}

احصل على جميع الخطوط المستخدمة في ملف PDF

يسرد هذا المثال كل الخطوط المكتشفة في المستند حتى تتمكن من تدقيق استخدام الخطوط قبل التصدير أو تحديث الملف.

  1. افتح ملف PDF المصدر Document.
  2. عد Fonts التي تُرجعها أدوات Font للمستند.
  3. اعرض اسم كل ما تم اكتشافه Font.
public static void getAllFonts(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        for (Font font : document.getFontUtilities().getAllFonts()) {
            System.out.println(font.getFontName());
        }
    }
}

تحسين تضمين الخطوط عن طريق تقسيم الخطوط إلى مجموعات فرعية

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

  1. افتح ملف PDF المصدر Document.
  2. شغّل تقليل الخط من خلال أدوات خطوط المستند المطلوبة FontSubsetStrategy قيم.
  3. احفظ المستند المحسّن.
public static void improveFontsEmbedding(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        document.getFontUtilities().subsetFonts(FontSubsetStrategy.SubsetAllFonts);
        document.getFontUtilities().subsetFonts(FontSubsetStrategy.SubsetEmbeddedFontsOnly);
        document.save(outputFile.toString());
    }
}

ضبط معامل تكبير فتح المستند

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

  1. افتح ملف PDF المصدر Document.
  2. أنشئ كائنًا من الفئة GoToAction مع XYZExplicitDestination.
  3. عيّن الإجراء كإجراء فتح المستند واحفظ النتيجة.
public static void setZoomFactor(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        GoToAction action = new GoToAction(new XYZExplicitDestination(1, 0.0, 0.0, 0.5));
        document.setOpenAction(action);
        document.save(outputFile.toString());
    }
}

احصل على معامل تقريب فتح المستند

استخدم هذا المثال لفحص ما إذا كان ملف PDF يحدد مسبقًا مستوى تقريب صريح لإجراء الفتح.

  1. افتح ملف PDF المصدر Document.
  2. تحقّق مما إذا كان إجراء الفتح هو GoToAction مع XYZExplicitDestination.
  3. أخرج قيمة التكبير المُكوَّنة أو أبلغ بأنه لا يوجد تكبير مُحدد.
public static void getZoomFactor(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        if (document.getOpenAction() instanceof GoToAction action
                && action.getDestination() instanceof XYZExplicitDestination destination) {
            System.out.println("Zoom: " + destination.getZoom());
        } else {
            System.out.println("Zoom: not set");
        }
    }
}