استخراج بيانات المتجه من ملف PDF باستخدام Java
Contents
[
Hide
]
الوصول إلى بيانات المتجه من مستند PDF
استخدام GraphicsAbsorber لفحص عناصر الرسومات المتجهية على صفحة وكتابة هندستها الأساسية إلى ملف نصي.
- افتح ملف PDF المصدر في كائن Document.
- أنشئ كائنًا من الفئة GraphicsAbsorber وزيارة الهدف Page لجمع عمليات الرسومات المتجهية.
- مرّ على المستخرجة الكائنات GraphicElement واقرأ مستطيلها، موضعها، ومجموعات المشغلين.
- ابنِ نص الإخراج مع تفاصيل الهندسة وعدد المشغلات لكل عنصر.
- اكتب بيانات المتجه المستخرجة إلى ملف الإخراج.
public static void extractGraphicsElements(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
GraphicsAbsorber absorber = new GraphicsAbsorber();
absorber.visit(document.getPages().get_Item(1));
StringBuilder text = new StringBuilder();
int index = 1;
for (GraphicElement element : absorber.getElements()) {
text.append("Element ").append(index)
.append(": Rectangle = ").append(element.getRectangle())
.append(", Position = ").append(element.getPosition())
.append(", Operators = ").append(element.getOperators().size())
.append("\n");
index++;
}
Files.writeString(outputFile, text.toString());
}
}
حفظ رسومات الصفحة المتجهة بصيغة SVG
- افتح ملف PDF المصدر في كائن Document.
- احصل على الهدف Page من المستند.
- استدعِ
page.trySaveVectorGraphics(outputFile.toString())لتصدير محتوى الرسومات المتجهة لتلك الصفحة مباشرة إلى SVG..
public static void saveVectorGraphicsToSvg(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
Page page = document.getPages().get_Item(1);
page.trySaveVectorGraphics(outputFile.toString());
}
}
حفظ كل عنصر مستخرج في ملف SVG منفصل
- افتح ملف PDF المصدر في كائن Document.
- أنشئ كائنًا من الفئة GraphicsAbsorber وزيارة الهدف Page.
- أنشئ دليل الإخراج للمسارات الفرعية المستخرجة قبل كتابة أي ملفات.
- مرّ على المستخرجة الكائنات GraphicElement والاستدعاء
saveToSvg(...)لكل عنصر. - احفظ كل عنصر مستخرج في ملف SVG منفصل.
public static void extractSubpathsToSvgs(Path inputFile, Path outputDir) throws Exception {
try (Document document = new Document(inputFile.toString())) {
GraphicsAbsorber absorber = new GraphicsAbsorber();
absorber.visit(document.getPages().get_Item(1));
Path subpathsDir = outputDir.resolve("subpaths");
Files.createDirectories(subpathsDir);
int index = 1;
for (GraphicElement element : absorber.getElements()) {
element.saveToSvg(subpathsDir.resolve("subpath_" + index + ".svg").toString());
index++;
}
}
}
دمج العناصر المستخرجة في ملف SVG واحد
- افتح ملف PDF المصدر في كائن Document.
- أنشئ كائنًا من الفئة GraphicsAbsorber وزيارة الهدف Page.
- أنشئ وسوم تغليف SVG التي ستحتوي على أجزاء المتجه المدمجة.
- مرّ على المستخرجة الكائنات GraphicElement وأضف كل جزء SVG تم إنشاؤه.
- اكتب ناتج SVG المدمج إلى الملف الهدف.
public static void extractListOfElementsToSingleImage(Path inputFile, Path outputFile) throws Exception {
try (Document document = new Document(inputFile.toString())) {
GraphicsAbsorber absorber = new GraphicsAbsorber();
absorber.visit(document.getPages().get_Item(1));
StringBuilder svg = new StringBuilder();
svg.append("<svg xmlns=\"http://www.w3.org/2000/svg\">\n");
for (GraphicElement element : absorber.getElements()) {
svg.append(element.saveToSvg()).append("\n");
}
svg.append("</svg>\n");
Files.writeString(outputFile, svg.toString());
}
}
استخراج عنصر متجه واحد
- افتح ملف PDF المصدر في كائن Document.
- أنشئ كائنًا من الفئة GraphicsAbsorber وزيارة الهدف Page.
- احصل على المطلوب GraphicElement من مجموعة العناصر المستخرجة.
- تحقّق مما إذا كان العنصر المحدد هو XFormPlacement وانزل إلى عناصره المتداخلة عند الحاجة.
- احفظ العنصر المتجه المحدد إلى ملف SVG الناتج.
public static void extractSingleVectorElement(Path inputFile, Path outputFile) {
try (Document document = new Document(inputFile.toString())) {
GraphicsAbsorber graphicsAbsorber = new GraphicsAbsorber();
Page page = document.getPages().get_Item(1);
graphicsAbsorber.visit(page);
if (graphicsAbsorber.getElements().size() > 1) {
GraphicElement xformPlacement = graphicsAbsorber.getElements().get_Item(1);
if (xformPlacement instanceof XFormPlacement) {
XFormPlacement placement = (XFormPlacement) xformPlacement;
if (placement.getElements().size() > 2) {
placement.getElements().get_Item(2).saveToSvg(outputFile.toString());
}
} else {
xformPlacement.saveToSvg(outputFile.toString());
}
}
}
}