Java 在PDF文档中绘制图形

Wesley13
• 阅读 903

本篇文档将介绍通过Java编程在PDF文档中绘制图形的方法。包括绘制矩形、椭圆形、不规则多边形、线条、弧线、曲线、扇形等等。针对方法中提供的思路,也可以自行变换图形设计思路,如菱形、梯形或者组合图形等。

使用工具:Free Spire.PDF for Java(免费版)

Jar****文件导入:

步骤1****:将安装包中lib文件夹下的两个文件复制到程序中新建的文件夹中(这里在程序中可新建一个文件夹并命名为Lib)

Java 在PDF文档中绘制图形

步骤2****:复制文件后,将两个添加引用到程序:选中这两个jar文件,点击鼠标右键,选择“Build Path” – “Add to Build Path”。完成引用。

 Java 在PDF文档中绘制图形

Java****代码示例(供参考)

import java.awt.Color;
import java.awt.Point;
import java.awt.geom.Rectangle2D;

import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.*;

public class DrawShapes {

    public static void main(String[] args) {
        
        //创建PdfDocument对象
        PdfDocument doc = new PdfDocument();
        
        //添加一页
        PdfPageBase page = doc.getPages().add();      
        
        //创建画笔、画刷
        PdfPen pen =new PdfPen(new PdfRGBColor(Color.black),0.3);
        PdfBrush brush= PdfBrushes.getGreenYellow();
        
        //绘制矩形
        Rectangle2D.Float rect1 = new Rectangle2D.Float(0, 20, 120, 50);//创建Rectangle2D对象,并指定图形在PDF页面中的大小、位置
        PdfLinearGradientBrush linearGradientBrush = new PdfLinearGradientBrush(rect1,new PdfRGBColor(Color.PINK),new PdfRGBColor(Color.YELLOW),PdfLinearGradientMode.Horizontal);//填充图形颜色          
        page.getCanvas().drawRectangle(linearGradientBrush, rect1);//绘制矩形到页面
        
        //绘制椭圆
        Point centerStart= new Point(205,45);
        Point centerEnd= new Point(205,45);
        PdfRadialGradientBrush radialGradientBrush = new PdfRadialGradientBrush(centerStart,0,centerEnd,60,new PdfRGBColor(Color.white),new PdfRGBColor(Color.cyan));
        Rectangle2D.Float rect2= new Rectangle2D.Float(180, 20, 50, 50);
        page.getCanvas().drawEllipse(radialGradientBrush,rect2);
        
        //绘制多边形
        Point p1=new Point(290,70);
        Point p2=new Point(310,45);
        Point p3=new Point(325,60);
        Point p4=new Point(340,20);
        Point p5=new Point(370,70);
        Point[] points = {p1, p2, p3, p4, p5};       
        page.getCanvas().drawPolygon(pen,brush, points);
        
        //绘制弧形
        float startAngle = 0;
        float sweepAngle = 270;
        Rectangle2D.Float rect3= new Rectangle2D.Float(0, 110, 50, 50);
        page.getCanvas().drawArc(pen, rect3, startAngle, sweepAngle);
        
        //绘制扇形     
        Rectangle2D.Float rect4= new Rectangle2D.Float(70, 110, 50, 50);
        page.getCanvas().drawPie(pen, rect4, startAngle, sweepAngle);
        
        //绘制直线 
        Point pStart=new Point(205,110);
        Point pEnd=new Point(205,160);
        page.getCanvas().drawLine(pen, pStart, pEnd);
  
        //绘制贝塞尔曲线
        Point startPoint = new Point(290, 135);
        Point firstControlPoint = new Point(330, 70);
        Point secondControlPoint = new Point(330, 200);
        Point endPoint = new Point(370, 135);
        page.getCanvas().drawBezier(pen, startPoint, firstControlPoint, secondControlPoint, endPoint);
                              
        //保存文档
        doc.saveToFile("DrawShapes.pdf",FileFormat.PDF);       
    }
}

完成代码后,运行程序,生成文档。(如下图)

 Java 在PDF文档中绘制图形

(本文完)

转载请注明出处!!

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Wesley13 Wesley13
3年前
P2P技术揭秘.P2P网络技术原理与典型系统开发
Modular.Java(2009.06)\.Craig.Walls.文字版.pdf:http://www.t00y.com/file/59501950(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.t00y.com%2Ffile%2F59501950)\More.E
Stella981 Stella981
3年前
C# 绘制Word形状——基本形状、组合形状
一、序言在OfficeWord中,支持在Word文档中插入类型非常丰富的形状,包括线条、矩形、基本形状(诸如圆形、多边形、星形、括号、笑脸等等图形)、箭头形状、公式形状、流程图、旗帜图形、标注图形等等,我们在编程过程中,想要在Word中绘制不同类型的图形,可以通过类库来操作。控件Spire.Docfor.NET6.0及以
Easter79 Easter79
3年前
TouchVG答疑
Q:TouchVG是否针对绘制效率做了优化?A:TouchVG针对绘制效率做的优化有:a、包络框检查:在视图外的图形不显示b、九宫格剪裁:对直线段、折线、多边形进行剪裁显示c、后台异步显示:regenAll重新生成所有图形时,在单独的CALayer和GCD线程中绘制,绘制完后再显示到视图,不阻塞主线程交互和显示。例如重绘10000条曲线在后台绘
秋桐 秋桐
1年前
Java 给PDF添加文本水印
水印一般用于标注文档的版权信息、作者、所属机构或者文档属性等。与文档批注等不同,水印是绘制到页面中的元素,所以不能轻易被删除。因此,水印也是一种很好的防伪手段。水印又分为文本水印和图片水印两种。这里,以Java代码为例,我将分享通过代码给PDF文档添加文本水印的具体方法和示例代码。
秋桐 秋桐
1年前
Java 向PDF中添加图像水印
水印一般用于标注文档的版权信息、作者、所属机构或者文档属性等。不同于文本批注等,文字水印是绘制到页面中的元素,所以不会被轻易删除。因此,水印也是一种很好的防伪手段。水印又分为文本水印和图片水印两种。之前已经介绍过向PDF中添加文本水印的方法。这次,我将分享通过Java代码给PDF文档添加图像水印的具体方法和示例代码。使用到的工具是FreeSpire.PDFforJava(免费版)。