pdfl初始化失败怎么解决(Java 添加和删除PDF注释)

众所周知,我们无法对PDF格式的文档进行直接编辑,而需借助PDF编辑器才可以。今天,我将介绍如何不使用编辑器,只需借助一个控件来通过后端调用Java代码的方式编辑PDF文档 —— 给PDF文档中的指定文本添加注释及如何删除已有注释。

创建开发环境

运行代码前,我们需要创建开发环境,即安装配置JDK和Intellij IDEA。接着我们需将Free Spire.PDF for Java控件下的Spire.Pdf.jar导入IDEA。可手动导入或通过Maven仓库引用以下代码进行导入。

<repositories> <repository> <id>com.e-iceblue</id> <url>http://repo.e-iceblue.cn/repository/maven-public/</url> </repository> </repositories> <dependencies> <dependency> <groupId>e-iceblue</groupId> <artifactId>spire.pdf.free</artifactId> <version>3.9.0</version> </dependency> </dependencies>

新建PDF文档并为其添加弹出式注释

pdfl初始化失败

import com.spire.pdf.*; import com.spire.pdf.annotations.*; import com.spire.pdf.graphics.*; import java.awt.*; import java.awt.geom.*; public class PopupAnnotation { public static void main(String[] args) { //初始化PdfDocument实例 PdfDocument doc = new PdfDocument(); //设置边距 PdfUnitConvertor unitCvtr = new PdfUnitConvertor(); PdfMargins margin = new PdfMargins(); margin.setTop(unitCvtr.convertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point)); margin.setBottom(margin.getTop()); margin.setLeft(unitCvtr.convertUnits(3f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point)); margin.setRight(margin.getLeft()); //添加新页 PdfPageBase page = doc.getPages().add(PdfPageSize.A4, margin); //插入文本 PdfBrush brush1 = PdfBrushes.getBlack(); PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Arial Unicode MS", Font.BOLD + Font.ITALIC,13), true); PdfStringFormat format1 = new PdfStringFormat(PdfTextAlignment.Left); float y = 50; String s = "本示例用于演示如何为PDF文档添加弹出式注释。"; page.getCanvas().drawString(s, font1, brush1, 0, y - 5, format1); y = y + (float)font1.measureString(s, format1).getHeight(); //指定附注的文本、图标及图标颜色 PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial Unicode MS",0, 10)); PdfStringFormat format = new PdfStringFormat(); format.setMeasureTrailingSpaces(true); String prompt = "弹出式注释"; Dimension2D size = font.measureString(prompt, format); page.getCanvas().drawString(prompt, font, PdfBrushes.getDodgerBlue(), 0, y); float x = (float)size.getWidth(); String label = "添加弹出式注释"; page.getCanvas().drawString(label, font, PdfBrushes.getOrangeRed(), x, y); x = x + (float)font.measureString(label, format).getWidth(); String markupText = "什么是弹出式注释?"; Rectangle2D rectangle2D = new Rectangle.Float(); rectangle2D.setFrame(new Point2D.Double(x,y),new Dimension()); PdfPopupAnnotation annotation = new PdfPopupAnnotation(rectangle2D, markupText); annotation.setIcon(PdfPopupIcon.Paragraph); annotation.setOpen(true); annotation.setColor(new PdfRGBColor(Color.YELLOW)); ((PdfNewPage) page).getAnnotations().add(annotation); //保存文档 doc.saveToFile("output/AddPopupAnnotation.pdf"); doc.close(); } }

添加效果

为已有PDF文档添加文本框注释

import com.spire.pdf.*; import com.spire.pdf.annotations.*; import com.spire.pdf.graphics.*; import java.awt.*; import java.awt.geom.*; import com.spire.pdf.general.find.PdfTextFind; public class TextBoxAnnotation { public static void main(String[] args) { //加载示例文档 PdfDocument doc = new PdfDocument(); doc.loadFromFile("C:UsersTest1DesktopSample.pdf"); //获取第一页 PdfPageBase page = doc.getPages().get(0); //获取文本并指定添加文本框注释的位置 PdfTextFind[] find = page.findText("人工智能").getFinds(); float x = (float)(find[0].getPosition().getX() - doc.getPageSettings().getMargins().getLeft() + find[0].getSize().getWidth()+20); float y = (float)(find[0].getPosition().getY() - doc.getPageSettings().getMargins().getTop()+20); //创建文本框注释 Rectangle2D.Float rect = new Rectangle2D.Float(x, y, 150, 30); PdfFreeTextAnnotation textAnnotation = new PdfFreeTextAnnotation(rect); // 设置注释文字及字体,注释框边界颜色及背景色 textAnnotation.setMarkupText("人工智能的定义"); PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial",0, 12));; textAnnotation.setFont(font); PdfAnnotationBorder border = new PdfAnnotationBorder(0.5f); textAnnotation.setBorder(border); textAnnotation.setBorderColor(new PdfRGBColor(Color.pink)); textAnnotation.setColor(new PdfRGBColor(Color.YELLOW)); textAnnotation.setOpacity(0.75f); textAnnotation.setTextMarkupColor(new PdfRGBColor(Color.black)); //添加注释到PDF page.getAnnotationsWidget().add(textAnnotation); //保存结果文档 doc.saveToFile("output/FreeTextAnnotation.pdf"); doc.close(); } }

添加效果

删除PDF文档中已有的注释

Free Spire.PDF for Java不仅支持删除PDF文档中已有的所有注释,同时还可以删除指定的某个注释。以下是删除所有注释的代码示例。

import com.spire.pdf.*; public class DeleteAnnotation { public static void main(String[] args) { //加载示例文档 PdfDocument document = new PdfDocument(); document.loadFromFile("C:UsersTest1DesktopFreeTextAnnotation.pdf"); //删除第一页上的第一个注释 //document.getPages().get(0).getAnnotationsWidget().removeAt(0); //删除所有注释 document.getPages().get(0).getAnnotationsWidget().clear(); //保存文档 String result = "output/DeleteAllAnnotations.pdf"; document.saveToFile(result); } }

您可以还会对下面的文章感兴趣

最新评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

使用微信扫描二维码后

点击右上角发送给好友