บทนำ
Aspose.PDF FOSS สำหรับ C++ มี API เวกเตอร์กราฟิกขนาดเล็กสำหรับสร้างรูปทรงอิสระโดยตรงบนหน้า PDF ซึ่งแยกจากเส้นทางการเรนเดอร์แบบแรสเตอร์ของไลบรารี — BmpDevice, JpegDevice, และ TiffDevice ที่แปลงเนื้อหาหน้าเดิมเป็นรูปแบบภาพ — แต่ช่วยให้โปรแกรมสร้างรูปทรงเรขาคณิตใหม่ (วงกลม, วงรี, และเส้น) บนหน้าเมื่อเอกสารถูกสร้าง.
ส่วนกลางของ API อยู่ที่ Graph ซึ่งเป็นคอนเทนเนอร์ที่เก็บชุดของอ็อบเจ็กต์ Shape และถูกวางบนหน้าในลักษณะเดียวกับเนื้อหาอื่น ๆ ของหน้า ผ่าน Page.Paragraphs() รูปทรงที่เป็นรูปธรรมสามแบบสืบทอดจากฐานแบบนามธรรม Shape ได้แก่ Circle, Ellipse, และ Line โดยแต่ละรูปทรงแสดงเรขาคณิตของตนผ่านชุดคุณสมบัติตัวเลขเล็ก ๆ แทนการใช้จุดหรือประเภทสี่เหลี่ยมร่วมกัน ความกว้างของเส้น, สี, การเติมสี, และรูปแบบเส้นประตั้งค่าแยกตามรูปทรงผ่าน GraphInfo และคอนเทนเนอร์ Graph เองมี BorderInfo สำหรับกรอบรอบคอนเทนเนอร์ทั้งหมด.
นี่เป็นส่วนที่แคบของไลบรารี — ห้าคลาสที่ครอบคลุมเรขาคณิตและการจัดรูปแบบของรูปทรง — มีจุดประสงค์สำหรับโปรแกรมที่ต้องการวาดเนื้อหาเรขาคณิตง่าย ๆ (กรอบ, เครื่องหมาย, เส้นเชื่อมต่อ, วงกลมไฮไลท์) บนหน้าโดยไม่ต้องสร้างชั้นการวาดเวกเตอร์เต็มรูปแบบหรือย้อนกลับไปใช้การผสานภาพ.
สิ่งที่รวมอยู่
คอนเทนเนอร์กราฟและการเพิ่มรูปทรงลงในหน้า
Graph เก็บรูปทรงที่วาดบนหน้า คุณสมบัติของมันเอง — Left(), Top(), Width(), Height(), และ IsChangePosition() — กำหนดตำแหน่งและขนาดของคอนเทนเนอร์บนหน้า และ Shapes() คืนค่าเวกเตอร์ของพอยน์เตอร์ Shape ที่มันเก็บอยู่ รูปทรงจะถูกเพิ่มโดยการสร้าง, ตั้งค่าคุณสมบัติของมัน, แล้วต่อท้ายลงในเวกเตอร์นั้น; Graph เองจะถูกเพิ่มลงบนหน้าโดยผ่าน Page.Paragraphs().Add().
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/graph.hpp>
#include <aspose/pdf/circle.hpp>
using namespace Aspose::Pdf;
int main() {
Document doc;
Page page = doc.Pages().Add();
auto graph = std::make_shared<Graph>();
graph->Left(50.0);
graph->Top(50.0);
graph->Width(400.0);
graph->Height(400.0);
auto circle = std::make_unique<Circle>();
circle->PosX(200.0);
circle->PosY(200.0);
circle->Radius(75.0);
graph->Shapes().push_back(std::move(circle));
page.Paragraphs().Add(graph);
doc.Save("graph.pdf");
}
วาดวงกลมและวงรี
Circle และ Ellipse แต่ละอันอธิบายเรขาคณิตของตนด้วยคุณสมบัติตัวเลขธรรมดาแทนการใช้จุดหรือประเภทสี่เหลี่ยมร่วมกัน Circle มีเมธอด PosX(), PosY(), และ Radius(); Ellipse มีเมธอด Left(), Bottom(), Width(), และ Height() ซึ่งบรรยายกล่องขอบเขตในรูปแบบเดียวกับที่ Graph ใช้สำหรับการกำหนดตำแหน่ง ทั้งสองคลาสจะ override CheckBounds(containerWidth, containerHeight) ที่สืบทอดจาก Shape เพื่อรายงานว่ารูปทรงในปัจจุบันพอดีกับคอนเทนเนอร์ขนาดที่กำหนดหรือไม่.
#include <aspose/pdf/circle.hpp>
#include <aspose/pdf/ellipse.hpp>
using namespace Aspose::Pdf;
Circle circle;
circle.PosX(150.0);
circle.PosY(150.0);
circle.Radius(50.0);
bool circleFits = circle.CheckBounds(400.0, 400.0);
Ellipse ellipse;
ellipse.Left(20.0);
ellipse.Bottom(20.0);
ellipse.Width(120.0);
ellipse.Height(60.0);
bool ellipseFits = ellipse.CheckBounds(400.0, 400.0);
วาดเส้น
Line เก็บเรขาคณิตของมันแตกต่างจาก Circle และ Ellipse: PositionArray() คืนค่า std::vector<float> แบนของพิกัด — คู่ x, y สำหรับแต่ละจุดที่เส้นผ่าน — แทนชุดของคุณสมบัติที่ตั้งชื่อไว้ ส่วนของเส้นที่มีสองจุดจะตั้งค่าด้วยสี่ค่า: x เริ่มต้น, y เริ่มต้น, x สิ้นสุด, y สิ้นสุด เช่นเดียวกับรูปทรงอื่น ๆ, Line จะ override CheckBounds(containerWidth, containerHeight) จาก Shape.
#include <aspose/pdf/line.hpp>
using namespace Aspose::Pdf;
Line line;
line.PositionArray({50.0f, 50.0f, 350.0f, 350.0f});
bool lineFits = line.CheckBounds(400.0, 400.0);
การจัดรูปแบบรูปทรงด้วย GraphInfo และ BorderInfo
เส้นขอบและการเติมของแต่ละรูปทรงมาจาก GraphInfo ซึ่งอ่านและตั้งค่าผ่าน Shape.GraphInfo() / GraphInfo(value). GraphInfo เปิดเผยความกว้างของเส้น (LineWidth()), สีเส้นและสีเติม (Color(), FillColor()), รูปแบบจุดประทัก (DashArray(), DashPhase()), ธงเส้นคู่ (IsDoubled()), และคุณสมบัติการเอียง/สเกล/การหมุน (SkewAngleX()/SkewAngleY(), ScalingRateX()/ScalingRateY(), RotationAngle()). ตัวคอนเทนเนอร์ Graph ยังมี BorderInfo ซึ่งตั้งค่าผ่าน Border(), ซึ่งเก็บ GraphInfo หนึ่งรายการต่อขอบ — Left(), Right(), Top(), Bottom() — พร้อมกับ RoundedBorderRadius() สำหรับทำให้ขอบของคอนเทนเนอร์มีการโค้ง.
#include <aspose/pdf/graph_info.hpp>
#include <aspose/pdf/border_info.hpp>
#include <aspose/pdf/color.hpp>
using namespace Aspose::Pdf;
GraphInfo stroke;
stroke.LineWidth(2.0f);
stroke.Color(Color::FromRgb(1.0, 0.0, 0.0));
stroke.FillColor(Color::FromRgb(1.0, 0.9, 0.9));
stroke.DashArray({4, 2});
BorderInfo border{BorderSide::All, 1.5f, Color::Black()};
border.RoundedBorderRadius(6.0);
เริ่มต้นอย่างรวดเร็ว
เพิ่มไลบรารีเป็น subdirectory ของ CMake และลิงก์กับ target aspose_pdf_foss:
add_subdirectory(aspose.pdf-foss-for-cpp)
target_link_libraries(your_app PRIVATE aspose_pdf_foss)
สร้างเอกสาร, เพิ่มหน้า, วาดวงกลมภายในคอนเทนเนอร์ Graph, แล้วบันทึกผลลัพธ์:
#include <aspose/pdf/document.hpp>
#include <aspose/pdf/graph.hpp>
#include <aspose/pdf/circle.hpp>
using namespace Aspose::Pdf;
int main() {
Document doc;
Page page = doc.Pages().Add();
auto graph = std::make_shared<Graph>();
graph->Left(50.0);
graph->Top(50.0);
graph->Width(300.0);
graph->Height(300.0);
auto circle = std::make_unique<Circle>();
circle->PosX(150.0);
circle->PosY(150.0);
circle->Radius(100.0);
graph->Shapes().push_back(std::move(circle));
page.Paragraphs().Add(graph);
doc.Save("circle.pdf");
}
รูปแบบที่รองรับ
| รูปแบบ | ส่วนขยาย | อ่าน | เขียน |
|---|---|---|---|
| BMP | .bmp | — | ✓ |
| JPEG | .jpg | — | ✓ |
| TIFF | .tiff | — | ✓ |
| Text | .txt | — | ✓ |
| SVG | .svg | ✓ | — |
รูปแบบเหล่านี้ใช้กับไลบรารีทั้งหมด — การเรสเตอร์หน้า (BMP, JPEG, TIFF), การสกัดข้อความ (Text) และการนำเข้า SVG — ไม่ได้ใช้กับคลาสกราฟิกเวกเตอร์โดยเฉพาะ Graph, Shape, Circle, Ellipse, และ Line วาดโดยตรงลงในเนื้อหาหน้าหนังสือ PDF และไม่ได้ผูกติดกับรูปแบบไฟล์ของตนเอง.
โอเพ่นซอร์ส & การให้สิทธิ์
Aspose.PDF FOSS สำหรับ C++ มีการแจกจ่ายภายใต้ใบอนุญาต MIT, โดยซอร์สเต็มพร้อมให้ดาวน์โหลดที่ github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-Cpp. ใบอนุญาตอนุญาตให้ใช้งานเชิงพาณิชย์, การแก้ไข, และการแจกจ่ายต่อโดยไม่มีข้อตกลงแยกต่างหาก.