إنشاء ملف PDF معقد
Contents
[
Hide
]
مرحبًا بالعالم يوضح المثال أبسط مسار لإنشاء PDF. يبني هذا المثال على سير العمل هذا وينشئ مستندًا أغنى يجمع بين الرسومات والنصوص والمحتوى الجدولي.
لإنشاء مستند PDF أكثر تعقيدًا في Java:
- أنشئ كائنًا من الفئة Document وأضف Page.
- أضف صورة إلى Page مع
page.addImage(...)وهدف Rectangle. - أنشئ رأس TextFragment وعيّن الخط والحجم والمحاذاة و Position.
- أنشئ كائنًا ثانيًا من الفئة TextFragment للفقرة الوصفية.
- ابنِ Table مع حدود، حشو، وتنسيق الرأس.
- أضف صفوف الجدول الزمني المُولَّدة إلى Table.
- ألحق Table إلى الـ الفقرات Page.
- احفظ ملف PDF الناتج Document.
الكود Java التالي مبني على GetStartedExamples.java.
public static void complexExample(Path imageFile, Path outputFile) {
try (Document document = new Document()) {
Page page = document.getPages().add();
page.addImage(imageFile.toString(), new Rectangle(20, 730, 120, 830, true));
TextFragment header = new TextFragment("New ferry routes in Fall 2029");
header.getTextState().setFont(FontRepository.findFont("Arial"));
header.getTextState().setFontSize(24);
header.setHorizontalAlignment(HorizontalAlignment.Center);
header.setPosition(new Position(130, 720));
page.getParagraphs().add(header);
String descriptionText = "Visitors must buy tickets online and tickets are limited to 5,000 per day. "
+ "Ferry service is operating at half capacity and on a reduced schedule. "
+ "Expect lineups.";
TextFragment description = new TextFragment(descriptionText);
description.getTextState().setFont(FontRepository.findFont("Times New Roman"));
description.getTextState().setFontSize(14);
description.setHorizontalAlignment(HorizontalAlignment.Left);
page.getParagraphs().add(description);
page.getParagraphs().add(createScheduleTable());
document.save(outputFile.toString());
}
}
يستخدم المثال نفسه طريقة مساعدة لإعداد جدول المواعيد مع تنسيق العنوان وتوقيتات المغادرة المُولدة:
private static Table createScheduleTable() {
Table table = new Table();
table.setColumnWidths("200 200");
table.setBorder(new BorderInfo(BorderSide.Box, 1.0f, Color.getDarkSlateGray()));
table.setDefaultCellBorder(new BorderInfo(BorderSide.Box, 0.5f, Color.getBlack()));
table.setDefaultCellPadding(new MarginInfo(4.5, 4.5, 4.5, 4.5));
table.getMargin().setBottom(10);
table.getDefaultCellTextState().setFont(FontRepository.findFont("Helvetica"));
Row headerRow = table.getRows().add();
Cell departsCityCell = headerRow.getCells().add("Departs City");
Cell departsIslandCell = headerRow.getCells().add("Departs Island");
styleHeaderCell(departsCityCell);
styleHeaderCell(departsIslandCell);
Duration time = Duration.ofHours(6);
Duration increment = Duration.ofMinutes(30);
for (int index = 0; index < 10; index++) {
Row dataRow = table.getRows().add();
dataRow.getCells().add(formatTime(time));
time = time.plus(increment);
dataRow.getCells().add(formatTime(time));
}
return table;
}