当前位置: 首页 > 知识库问答 >
问题:

PDFbox-如何向图层添加内容?

万俟小林
2023-03-14

我正在使用pdfbox 2.0.8-需要创建一个层,并在那里添加一些图形。

我从如何修改pdf中的现有层(可选内容组)开始?

然而,这是基于1.8。我试图适应2.0,并设法创建了该层,但完全不清楚如何创建新资源并将其添加到该层,即如何创建道具。putMapping(resourceName,layer);必须重写1.8中的内容

共有1个答案

钱黎明
2023-03-14

OP引用的答案中的PDFBox 1.8代码相当于以下代码:

void addTextToLayer(PDDocument document, int pageNumber, String layerName, float x, float y, String text) throws IOException
{
    PDDocumentCatalog catalog = document.getDocumentCatalog();
    PDOptionalContentProperties ocprops = catalog.getOCProperties();
    if (ocprops == null)
    {
        ocprops = new PDOptionalContentProperties();
        catalog.setOCProperties(ocprops);
    }
    PDOptionalContentGroup layer = null;
    if (ocprops.hasGroup(layerName))
    {
        layer = ocprops.getGroup(layerName);
    }
    else
    {
        layer = new PDOptionalContentGroup(layerName);
        ocprops.addGroup(layer);
    }

    PDPage page = (PDPage) document.getPage(pageNumber);

    PDResources resources = page.getResources();
    if (resources == null)
    {
        resources = new PDResources();
        page.setResources(resources);
    }

    PDFont font = PDType1Font.HELVETICA;

    PDPageContentStream contentStream = new PDPageContentStream(document, page, AppendMode.APPEND, true, true);
    contentStream.beginMarkedContent(COSName.OC, layer);
    contentStream.beginText();
    contentStream.setFont(font, 12);
    contentStream.newLineAtOffset(x, y);
    contentStream.showText(text);
    contentStream.endText();
    contentStream.endMarkedContent();

    contentStream.close();
}

(AddContentToOCG)

可以这样使用:

PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);

addTextToLayer(document, 0, "MyLayer", 30, 600, "Text in new layer 'MyLayer'");
addTextToLayer(document, 0, "MyOtherLayer", 230, 550, "Text in new layer 'MyOtherLayer'");
addTextToLayer(document, 0, "MyLayer", 30, 500, "Text in existing layer 'MyLayer'");
addTextToLayer(document, 0, "MyOtherLayer", 230, 450, "Text in existing layer 'MyOtherLayer'");

document.save(new File(RESULT_FOLDER, "TextInOCGs.pdf"));
document.close();

(AddContentToOCG测试TestAddContentToneworexistingCG

 类似资料:
  • 正如你在下面的代码片段中看到的,我很难让蓝色覆盖贴在图像上,但是正如你所看到的,在左侧,由于某种原因,它没有贴在图片上。是的,我希望一整列的位置比另一列低/高一点,所以这里我尝试将整列1定位70px,但它撕裂了蓝色覆盖层和图像。有什么想法吗? null null

  • 对于一个项目,我正在创建不同的层,这些层都应该被写入一个geopackage。我正在使用QGIS 3.16.1和运行在Python 3.7上的QGIS中的Python控制台 我尝试了很多事情,但不知道如何做到这一点。这是我目前使用的。 问题是,在“测试”中。“gpkg”创建的层称为“测试”,而不是“点1”或“点2”。和第二个QgsVectorFileWriter。writeAsVectorForm

  • 我正在使用PDFBox从我的webapp中提取数据并将其放入PDF。我有一个方法,在每个PDF页面上绘制标题。但是,当我向每个页面添加图像时,文档的内存就会耗尽。我想知道有没有人有什么解决的办法?下面是我的drawHeader方法: public static void drawHeader(PDDocument doc,PDPage page,PDPageContentStream conten

  • 有没有办法在Apache Pdfbox中添加额外的字体样式? 我们目前正在尝试在系统中打印PDF(目前正在使用PDF渲染器)我一直在寻找各种替代方案(pdfbox、jpedal、jPDFPrint) 我们希望有一个免费的GPL兼容库可以使用,因此我们倾向于使用pdfbox。我已经能够编写一些示例代码来打印出“有效”的pdf。见下文: 正如我提到的,这是有效的,但我遇到的问题是PdfBox似乎无法识

  • 嗨,我正在尝试重新创建一个足球锦标赛,已经能够创建一个地图的集团,但现在想要添加到每个国家的点数。有人有什么好主意吗?请看看我已经做了什么。

  • 单击 按钮,可以将你已上传的数据添加到地图中。同一份数据可以多次添加到一个和多个不同地图中,你可以分别设置这些图层的不同显示样式而不必担心他们互相影响。但是请注意,修改图层的数据记录会导致不同图层的记录同时发生变化。 如果数据集合列表中没有你要添加的数据集合,你可以点击创建数据按钮立即创建,这和在数据管理中创建数据是同样的效果。 部分新创建的数据可能需要系统后台处理,你需要等待他处理完成才能将其添