Điều đó luôn xảy ra. PDF không có vòng kết nối trong nguyên thủy, chỉ beziers. Mô hình hình ảnh PDF được xây dựng từ mô hình hình ảnh PostScript, mà chính nó chỉ cung cấp các vòng tròn bằng cách sử dụng các arc/arcto nguyên thủy, mà bản thân chúng được thực hiện trong điều khoản của beziers.
Rất kỳ quặc, tôi đã gọi để thực hiện tác vụ chính xác này trong một số mã thử nghiệm mà tôi đang thực hiện để tạo tệp PDF. Đây là cách tôi đã làm nó:
private void DrawEllipse(PdfGraphics g, double xrad, double yrad)
{
const double magic = 0.551784;
double xmagic = xrad * magic;
double ymagic = yrad * magic;
g.MoveTo(-xrad, 0);
g.CurveTo(-xrad, ymagic, -xmagic, yrad, 0, yrad);
g.CurveTo(xmagic, yrad, xrad, ymagic, xrad, 0);
g.CurveTo(xrad, -ymagic, xmagic, -yrad, 0, -yrad);
g.CurveTo(-xmagic, -yrad, -xrad, -ymagic, -xrad, 0);
}
private void DrawCircle(PdfGraphics g, double radius)
{
DrawEllipse(g, radius, radius);
}
Giả sử rằng PdfGraphics
là một lớp học mà spews ra lệnh PDF, vì vậy g.MoveTo(x, y)
sẽ biến thành "x y m" trong luồng nội dung. Tôi lấy toán và số ma thuật của tôi từ Don Lancaster's fabulous explanation (PDF, tự nhiên). Điều này giả định rằng hình tròn hoặc hình elip sẽ được vẽ ở gốc. Để di chuyển nó ở một nơi khác, thực hiện chuyển đổi bản dịch trước hoặc sửa đổi mã để trừ thêm vào nguồn gốc mong muốn. Mã này cho một lỗi trường hợp xấu nhất khoảng 1/1250 (khoảng 0,08%) và trung bình 1/2500 (khoảng 0,04%).