perl – 如何使用PDF原语绘制填充和未填充的圆圈?
发布时间:2020-12-15 21:46:20 所属栏目:大数据 来源:网络整理
导读:在PostScript上绘制圆圈很容易,我很惊讶PDF显然没有传承那些相同的原语.有很多商业图书馆可以做到这一点,但它不应该比这简单吗? 还有一些使用Bézier曲线的技巧,但你没有得到一个完美的圆,你必须在连接段中绘制它们.只要它看起来接近完美,我就不需要一个完
在PostScript上绘制圆圈很容易,我很惊讶PDF显然没有传承那些相同的原语.有很多商业图书馆可以做到这一点,但它不应该比这简单吗?
还有一些使用Bézier曲线的技巧,但你没有得到一个完美的圆,你必须在连接段中绘制它们.只要它看起来接近完美,我就不需要一个完美的圆圈. 我这样做是对PDF-EasyPDF Perl模块的补充,但语言不是我需要帮助的部分. 解决方法
情况总是如此. PDF在原语中没有圆圈,只有贝塞尔曲线. PDF成像模型是根据PostScript成像模型构建的,PostScript成像模型本身仅使用arc / arcto基元提供圆,这些原语本身是根据贝塞尔曲线实现的.
奇怪的是,我打算在我正在研究的一些测试代码中执行这个确切的任务,生成PDF文件.我是这样做的: 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,yrad); g.CurveTo(xmagic,xrad,0); g.CurveTo(xrad,-ymagic,xmagic,-yrad,-yrad); g.CurveTo(-xmagic,-xrad,0); } private void DrawCircle(PdfGraphics g,double radius) { DrawEllipse(g,radius,radius); } 假设PdfGraphics是一个喷出PDF命令的类,因此g.MoveTo(x,y)将在内容流中变成“x y m”.我从Don Lancaster’s fabulous explanation中获取了数学和我的幻数(PDF,自然而然).这假设将在原点绘制圆或椭圆.要将其移动到其他位置,请先执行转换转换,或修改代码以在所需的原点中减去add.该代码给出的最差情况误差约为1/1250(约0.08%),平均值为1/2500(约0.04%). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |