معالجة ملفات PDF في Java
يتضمن Aspose.PDF for Java عمليات هيكل الوثيقة التي تتجاوز تحرير الصفحات البسيط.
تحقق من امتثال PDF/A-1a
استخدم هذا المثال عندما تحتاج إلى التحقق مما إذا كان المستند يلتزم بمعيار الأرشفة PDF/A-1a.
- افتح ملف PDF المصدر Document.
- شغّل التحقق من الصحة مقابل المطلوب PdfFormat الهدف.
- احفظ تقرير التحقق إلى مسار الإخراج المحدد.
public static void validatePdfaStandardA1a(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
document.validate(outputFile.toString(), PdfFormat.PDF_A_1A);
}
}
تحقق من امتثال PDF/A-1b
يقوم هذا الاختلاف بالتحقق من صحة نفس مستند المصدر مقابل مستوى التوافق PDF/A-1b.
- افتح ملف PDF المصدر Document.
- استدعِ طريقة التحقق مع PdfFormat قيمة لـ PDF/A-1b.
- اكتب نتيجة التحقق إلى ملف تقرير الإخراج.
public static void validatePdfaStandardA1b(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
document.validate(outputFile.toString(), PdfFormat.PDF_A_1B);
}
}
إضافة جدول محتويات
استخدم هذا النهج عندما يجب أن يتضمن المستند صفحة TOC مُولَّدة مع روابط إلى صفحات المحتوى.
- افتح ملف PDF المصدر Document.
- أدرج صفحة TOC جديدة باستخدام Page وتهيئتها TocInfo.
- أنشئ كائنًا من الفئة Heading الإدخالات التي تشير إلى صفحات الوجهة.
- احفظ المستند المحدث.
public static void addTableOfContents(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
Page tocPage = document.getPages().insert(1);
TocInfo tocInfo = new TocInfo();
TextFragment title = new TextFragment("Table Of Contents");
title.getTextState().setFontSize(20);
title.getTextState().setFontStyle(FontStyles.Bold);
tocInfo.setTitle(title);
tocPage.setTocInfo(tocInfo);
String[] titles = {"First page", "Second page"};
for (int index = 0; index < titles.length && index + 2 <= document.getPages().size(); index++) {
Heading heading = new Heading(1);
TextSegment segment = new TextSegment(titles[index]);
heading.setTocPage(tocPage);
heading.getSegments().add(segment);
Page destinationPage = document.getPages().get_Item(index + 2);
heading.setDestinationPage(destinationPage);
heading.setTop(destinationPage.getRect().getHeight());
tocPage.getParagraphs().add(heading);
}
document.save(outputFile.toString());
}
}
تخصيص مستويات TOC والتنسيق
يوضح هذا المثال كيفية تعيين إعدادات بصرية مختلفة لمستويات جدول المحتويات المتعددة.
- افتح ملف PDF المصدر Document.
- أضف TOC إلى Page واضبط TocInfo تنسيق المصفوفة.
- أنشئ نموذج Heading إدخالات بمستويات مختلفة.
- احفظ المستند مع TOC المنسق.
public static void setTocLevels(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
Page tocPage = document.getPages().add();
TocInfo tocInfo = new TocInfo();
tocInfo.setLineDash(TabLeaderType.Solid);
TextFragment title = new TextFragment("Table Of Contents");
title.getTextState().setFontSize(30);
tocInfo.setTitle(title);
tocPage.setTocInfo(tocInfo);
tocInfo.setFormatArrayLength(4);
tocInfo.getFormatArray()[0].getMargin().setLeft(0);
tocInfo.getFormatArray()[0].getMargin().setRight(30);
tocInfo.getFormatArray()[0].setLineDash(TabLeaderType.Dot);
tocInfo.getFormatArray()[0].getTextState().setFontStyle(FontStyles.Bold | FontStyles.Italic);
tocInfo.getFormatArray()[1].getMargin().setLeft(10);
tocInfo.getFormatArray()[1].getMargin().setRight(30);
tocInfo.getFormatArray()[1].setLineDash(3);
tocInfo.getFormatArray()[1].getTextState().setFontSize(10);
tocInfo.getFormatArray()[2].getMargin().setLeft(20);
tocInfo.getFormatArray()[2].getMargin().setRight(30);
tocInfo.getFormatArray()[2].getTextState().setFontStyle(FontStyles.Bold);
tocInfo.getFormatArray()[3].setLineDash(TabLeaderType.Solid);
tocInfo.getFormatArray()[3].getMargin().setLeft(30);
tocInfo.getFormatArray()[3].getMargin().setRight(30);
tocInfo.getFormatArray()[3].getTextState().setFontStyle(FontStyles.Bold);
try (Page page = document.getPages().add()) {
for (int level = 1; level < 5; level++) {
Heading heading = new Heading(level);
heading.setAutoSequence(true);
heading.setTocPage(tocPage);
heading.getTextState().setFont(FontRepository.findFont("Arial"));
heading.getSegments().add(new TextSegment("Sample Heading" + level));
heading.setInList(true);
page.getParagraphs().add(heading);
}
}
document.save(outputFile.toString());
}
}
إخفاء أرقام الصفحات في TOC
استخدم هذا المثال عندما يجب أن يُظهر جدول المحتويات عناوين الإدخالات دون أرقام الصفحات.
- افتح ملف PDF المصدر Document.
- أضف TOC إلى Page وإلغاء أرقام الصفحات في TocInfo.
- أنشئ المطلوب Heading إدخال وإضافتها إلى صفحة المحتوى.
- احفظ المستند المحدث.
public static void hidePageNumbersInToc(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
Page page;
Heading heading;
try (Page tocPage = document.getPages().add()) {
TocInfo tocInfo = new TocInfo();
TextFragment title = new TextFragment("Table Of Contents");
title.getTextState().setFontSize(20);
title.getTextState().setFontStyle(FontStyles.Bold);
tocInfo.setTitle(title);
tocInfo.setShowPageNumbers(false);
tocPage.setTocInfo(tocInfo);
tocInfo.setFormatArrayLength(4);
tocInfo.getFormatArray()[0].getMargin().setRight(0);
tocInfo.getFormatArray()[0].getTextState().setFontStyle(FontStyles.Bold | FontStyles.Italic);
tocInfo.getFormatArray()[1].getMargin().setLeft(30);
tocInfo.getFormatArray()[1].getTextState().setUnderline(true);
tocInfo.getFormatArray()[1].getTextState().setFontSize(10);
tocInfo.getFormatArray()[2].getTextState().setFontStyle(FontStyles.Bold);
tocInfo.getFormatArray()[3].getTextState().setFontStyle(FontStyles.Bold);
page = document.getPages().add();
heading = new Heading(1);
heading.setTocPage(tocPage);
}
heading.setAutoSequence(true);
heading.setInList(true);
heading.getSegments().add(new TextSegment("this is heading of level 1"));
page.getParagraphs().add(heading);
document.save(outputFile.toString());
}
}
تخصيص بادئات أرقام صفحات TOC
يضيف هذا المثال بادئة مخصصة لأرقام الصفحات المعروضة في جدول المحتويات المُنشأ.
- افتح ملف PDF المصدر Document.
- أدرج TOC في Page وحدد بادئة رقم الصفحة المطلوبة في TocInfo.
- أنشئ كائنًا من الفئة Heading مدخلات تشير إلى كل صفحة.
- احفظ المستند المحدث.
public static void customizePageNumbersInToc(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
Page tocPage = document.getPages().insert(1);
TocInfo tocInfo = new TocInfo();
TextFragment title = new TextFragment("Table Of Contents");
title.getTextState().setFontSize(20);
title.getTextState().setFontStyle(FontStyles.Bold);
tocInfo.setTitle(title);
tocInfo.setPageNumbersPrefix("P");
tocPage.setTocInfo(tocInfo);
for (int index = 1; index <= document.getPages().size(); index++) {
Page page = document.getPages().get_Item(index);
Heading heading = new Heading(1);
heading.setTocPage(tocPage);
heading.setDestinationPage(page);
heading.setTop(page.getRect().getHeight());
heading.getSegments().add(new TextSegment("Page " + index));
tocPage.getParagraphs().add(heading);
}
document.save(outputFile.toString());
}
}
إضافة سكريبت انتهاء صلاحية PDF
استخدم هذا النهج عندما يجب على المستند تشغيل Java سكريبت عند الفتح وإظهار تحذير انتهاء الصلاحية بعد تاريخ محدد.
- افتح ملف PDF المصدر Document وأضف أي محتوى مطلوب.
- أنشئ كائنًا من الفئة JavascriptAction مع منطق انتهاء الصلاحية.
- عيّن البرنامج النصي كإجراء فتح المستند واحفظ ملف الإخراج.
public static void setPdfExpiryDate(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
try (Page page = document.getPages().add()) {
page.getParagraphs().add(new TextFragment("Hello World..."));
}
JavascriptAction script = new JavascriptAction(
"var year=2017;"
+ "var month=5;"
+ "today = new Date(); today = new Date(today.getFullYear(), today.getMonth());"
+ "expiry = new Date(year, month);"
+ "if (today.getTime() > expiry.getTime())"
+ "app.alert('The file is expired. You need a new one.');");
document.setOpenAction(script);
document.save(outputFile.toString());
}
}
تسطيح نموذج PDF القابل للملء
يقوم هذا المثال بتحويل حقول النموذج التفاعلية إلى محتوى صفحة ثابت بحيث يصبح المستند الناتج غير قابل للتعديل كنموذج.
- افتح ملف PDF المصدر Document.
- تحقّق مما إذا كان المستند يحتوي على عناصر النموذج.
- سطّح كل Field ممثلة بـ WidgetAnnotation.
- احفظ المستند المسطح.
public static void flattenFillablePdf(Path inputFile, Path outputFile) {
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());
}
}