Apache PDFBox库是一个用于处理PDF文档的开源Java工具。该项目允许创建新的PDF文档,处理现有文档以及从文档中提取内容的功能。 Apache PDFBox还包括几个命令行实用程序。
我有一个带标签的 PDF(符合 PDF-UA 标准),结构简单: 我需要添加注释: 我有一个带标签的 PDF(符合 PDF-UA 标准),结构简单: 我需要添加注释: <?xml version="1.0" encoding="UTF-8"?> <xfdf xmlns="http://ns.adobe.com/xfdf/"> <annots> <text color="#FFC333" date="D:20240425000000" flags="print,nozoom,norotate" opacity="0.600000" page="0" rect="43.086,707.79,63.086,732.79" title="ABC"> <contents-richtext> <body xmlns="http://www.w3.org/1999/xhtml"> <p dir="ltr">Sample comment</p> </body> </contents-richtext> <popup flags="nozoom,norotate" open="yes" page="0" rect="595.0,507.78998,790.0,632.79"/> </text> </annots> </xfdf> 在嵌套标签Annot中,在标签P中。像这样(我在 Adobe Acrobat 中手动制作): 我能够将 XFDF XML 导入 PDF: PDDocument document = PDDocument.load(new File("tagged.pdf")); FDFDocument fdfDoc = FDFDocument.loadXFDF(new File("annotation.xfdf")); List<FDFAnnotation> fdfAnnots = fdfDoc.getCatalog().getFDF().getAnnotations(); List<PDAnnotation> pageAnnotations = new ArrayList<>(); for (int i=0; i < fdfAnnots.size(); i++) { FDFAnnotation fdfannot = fdfAnnots.get(i); PDAnnotation pdfannot = PDAnnotation.createAnnotation(fdfannot.getCOSObject()); pdfannot.constructAppearances(); pageAnnotations.add(pdfannot); } document.getPage(0).setAnnotations(pageAnnotations); document.save(new File("tagged_with_annotation.pdf")); 但是 veraPDF 检查器输出: 注释(不包括子类型 Widget、PrinterMark 或 Link 的注释)应嵌套在 Annot 标签内 和 PDF 辅助功能检查器(PAC 工具)输出: 注释未嵌套在“Annot”结构元素内 正如预期的那样,因为我没有为导入的注释设置“annot”标签(和具体位置)。 此外,我还可以获得标签P对象: PDDocumentCatalog pdDocumentCatalog = document.getDocumentCatalog(); PDStructureTreeRoot pdStructureTreeRoot = pdDocumentCatalog.getStructureTreeRoot(); COSArray aDocument = (COSArray)(pdStructureTreeRoot.getK().getCOSObject()); COSObject oDocument = (COSObject) aDocument.get(0); COSArray aPart = (COSArray)oDocument.getItem(COSName.K).getCOSObject(); COSObject oPart = (COSObject) aPart.get(0); COSArray aSect = (COSArray)oPart.getItem(COSName.K).getCOSObject(); COSObject oSect = (COSObject) aSect.get(0); COSArray aP = (COSArray)oSect.getItem(COSName.K).getCOSObject(); COSObject oP= (COSObject) aP.get(0); 但我不明白如何编辑PDF中现有的标签树。 问题:如何使用PDFBox将现有标签树中的标签和注释添加到PDF中? 更新:示例 PDF 和 XFDF 此处。 这是我的第一次尝试。我没有 PAC 工具(或者我找不到它),所以我需要知道出了什么问题(如果有)。我已将注释放在数组的末尾Root/StructTreeRoot/K/[0]/K/[0]/K/[0]/K,在另一个文件中,它是数组中的第一项。 (COSArray 显然没有“插入”) PDStructureTreeRoot structureTreeRoot = doc.getDocumentCatalog().getStructureTreeRoot(); PDPage page = doc.getPage(0); PDAnnotation annotation = page.getAnnotations().get(0); COSArray aDocument = (COSArray) structureTreeRoot.getK(); COSDictionary oDocument = (COSDictionary) aDocument.getObject(0); COSArray aPart = oDocument.getCOSArray(COSName.K); COSDictionary oPart = (COSDictionary) aPart.getObject(0); COSArray aSect = oPart.getCOSArray(COSName.K); COSDictionary oSect = (COSDictionary) aSect.getObject(0); COSArray aP = oSect.getCOSArray(COSName.K); COSDictionary anDict = new COSDictionary(); // PDStructureElement anDict.setItem(COSName.S, COSName.ANNOT); anDict.setItem(COSName.P, aSect.get(0)); // assign aP but as ref PDObjectReference objRef = new PDObjectReference(); anDict.setItem(COSName.K, objRef); objRef.setReferencedObject(page.getAnnotations().get(0)); objRef.getCOSObject().setItem(COSName.P, anDict); //TODO check if needed in PDObjectReference API? objRef.getCOSObject().setItem(COSName.PG, page); //TODO check if needed in PDObjectReference API? aP.add(anDict); int parentTreeNextKey = structureTreeRoot.getParentTreeNextKey(); // -1, ignored here PDNumberTreeNode parentTree = structureTreeRoot.getParentTree(); Map<Integer, COSObjectable> numberTreeAsMap = getNumberTreeAsMap(parentTree); Set<Integer> keySet = numberTreeAsMap.keySet(); int maximum = keySet.stream().reduce(Integer::max).get(); annotation.setStructParent(maximum + 1); structureTreeRoot.setParentTreeNextKey(maximum + 2); numberTreeAsMap.put(maximum + 1, anDict); parentTree = new PDNumberTreeNode(PDParentTreeValue.class); parentTree.setNumbers(numberTreeAsMap); structureTreeRoot.setParentTree(parentTree); getNumberTreeAsMap 是 PDFMergerUtility 中的一个便捷方法 static Map<Integer, COSObjectable> getNumberTreeAsMap(PDNumberTreeNode tree) throws IOException { if (tree == null) { return new LinkedHashMap<>(); } Map<Integer, COSObjectable> numbers = tree.getNumbers(); if (numbers == null) { numbers = new LinkedHashMap<>(); } else { // must copy because the map is read only numbers = new LinkedHashMap<>(numbers); } List<PDNumberTreeNode> kids = tree.getKids(); if (kids != null) { for (PDNumberTreeNode kid : kids) { numbers.putAll(getNumberTreeAsMap(kid)); } } return numbers; }
使用 Java Apache PdfBox 在 PDF 模板中生成边框
在不久的将来我将开发一个PDF生成服务。这都是关于使用来自请求的数据填充一个简单的模板。 在我的研究过程中,我听说了 Apache PDFBox 和...
PDFbox 中的 PDF 字段无法在移动设备上打印(Android 通用 pdf 查看器问题)
我使用 pdfbox 生成 pdf 并设置一些字段。 下载的 pdf 缺少打印预览中的字段,并且不会在 ios 和 android 的默认 pdf 查看器中打印,但如果我安装 adobe
有时我们希望删除 PDF 文档的写保护/“加密”和数字签名,以便可以更改和重新签名文档。例如。因为原来的
无法使用 PDFBox 将 TIFF 图像添加到 PDF 中
我在尝试使用 PDFBox 3.0.3 创建包含多个 TIF 图像的 PDF 时遇到了一些问题。 :( 我尝试了几种不同的方法,但到目前为止都没有奏效。我基本上得到了
我有http://laws-lois.justice.gc.ca/PDF/A-8.8.pdf,我正在尝试使用有2列的PDFBox进行解析。 我希望解析文本以便将列分开,但是当我运行它时
pdfbox3.0.1在启动应用程序调用pdfbox api时生成大量警告消息
警告信息 2024-09-18 10:14:02.363 警告 -[]-[,,,,]-[http-nio-8080-exec-2] o.a.p.p.font.FileSystemFontProvider 651: 找到 2478 个新字体,字体缓存将被重新设置建成 2024-09-18 10:14:02.365
我正在尝试使用Java以结构化方式将表数据提取为表。 过去两年我一直在使用 pdfbox 和 tabula。 但问题是pdfbox返回的是pd中的所有数据...
Java Apache PDFBox 填充 PDF 字段(错误)
我在尝试填写多个 PDF 中的许多字段时遇到错误。该代码实际上是按预期创建和填充 PDF,并保存 PDF,但是代码抛出错误...
我有一个 springBoot 项目,我正在尝试使用 PDFBox 库将图像插入到 PDF 中。该图像存在于 src/main/resources/image 文件夹 (myImage.jpg) 中。实现代码如gi...
如何根据patch-t页面分割pdf文档?使用 Aspose?或者有没有最合适的?
我有一个pdf文档,其中每3页包含一个patch-t页。 我想基于patch-t分割pdf文档。使用 aspose 我看到有一个条款可以让我以 pdf 格式打印 patch-t 。 是吗
Apache PDFBox 无法提取文本,但 PDFBox 调试器正确显示文本?
我无法从 pdf 中提取文本,它显示垃圾字符,但当我使用调试器检查时,它显示正确的文本。 这是 pdf 链接。 假设我正在尝试扩展...
我现在使用 PDFBox,并且尝试使用 PDPageContentStream 中的 fillAndStroke() 方法绘制具有大边框笔划的多边形。 实际上,它可以在中心模式下使用笔画(一半在里面......
我正在使用 DHL Shipping (XML) API 来请求 DHL 货件并自动打印响应的运输标签。 系统的工作原理如下: DHL 响应 XML 包含一个 base64-en...
我想使用 PDFBox 打印 iText 创建的 PDF 文件。我已经使用 PDDocument 类及其方法 print() 成功尝试了这一点。您可以在这里找到文档:http://pdfbox.apache.org/
我正在尝试将 org.apache.pdfbox.pdmodel.PDDocument 类和 icafe 库(https://github.com/dragon66/icafe/)表示的 PDF 转换为具有第 4 组压缩的多页 tiff一个...
我正在做一个pdf-web-tools,想要实现去除pdf水印的功能,我可以在前端用pdf-lib实现还是在后端用pdfbox实现? 我知道有一些...
我正在尝试将普通 PDF 转换为 PDF/A。我已经在这里找到了一些文章,这些文章提供了有关如何生成 PDF/A 的一些见解。但每次我保存 PDDocument 时,生成的文件都是
我开始觉得不可能做我想做的事,但我只是想在放弃之前我会在这里问一下。 我有近 200 个报纸的 PDF 档案,我想分析它们。嗬...
如何使用 PDFBOX 或 ITEXT 增加字体大小或缩放现有 pdf 页面中的字体?
我想将现有的PDF变成大字体。 18pt 粗体字体 24pt 粗体字体 适用于pdf所有页面中的所有文本。整个页面中的文本将从当前大小增加到 18pt 或 24pt 以上。 T...