gpt4 book ai didi

java - 使用 pdfbox 创建新的自定义 COSBase 对象?

转载 作者:行者123 更新时间:2023-11-30 05:38:11 33 4
gpt4 key购买 nike

我们可以创建一个新的自定义 PDFOperator(如 PDFOperator{BDC})和 COSBase 对象(如 COSName{P} COSName{Prop1} (Prop1 将再次引用一个 obj))吗?并将这些添加到 pdf 的根结构中?

我已经从现有的 pdf 文档中读取了一些解析器标记列表。我想给pdf打标签。在此过程中,我将首先使用新创建的 COSBase 对象操作 token 列表。最后我将它们添加到根树结构中。那么这里我如何创建一个 COSBase 对象。我正在使用代码从 pdf 中提取 token

old_document = PDDocument.load(new File(inputPdfFile));
List<Object> newTokens = new ArrayList<>();
for (PDPage page : old_document.getPages())
{
PDFStreamParser parser = new PDFStreamParser(page);
parser.parse();
List<Object> tokens = parser.getTokens();
for (Object token : tokens) {
System.out.println(token);
if (token instanceof Operator) {
Operator op = (Operator) token;
}
}
newTokens.add(token);
}

PDStream newContents = new PDStream(document);
document.addPage(page);
OutputStream out = newContents.createOutputStream(COSName.FLATE_DECODE);
ContentStreamWriter writer = new ContentStreamWriter(out);
writer.writeTokens(newTokens);
out.close();
page.setContents(newContents);
document.save(outputPdfFile);
document.close();

以上代码将创建一个包含所有格式和图像的新 pdf。因此,在 newTokens 列表中包含所有现有的 COSBase 对象,因此我想使用一些标记 COSBase 对象进行操作,如果我保存了新文档,那么应该对其进行标记,而不需要处理任何解码、编码、字体和图像处理。

首先这个想法行得通吗?如果是,请帮助我编写一些代码来创建自定义 COSBase 对象。我对 java 很陌生。

最佳答案

根据您的文档格式,您可以插入标记的内容。

//Below code is to add   "/p <<MCID 0>> /BDC"

newTokens.add(COSName.getPDFName("P"));
currentMarkedContentDictionary = new COSDictionary();
currentMarkedContentDictionary.setInt(COSName.MCID, mcid);
mcid++;
newTokens.add(currentMarkedContentDictionary);
newTokens.add(Operator.getOperator("BDC"));

// After adding mcid you have to append your existing tokens TJ , TD, Td, T* ....
newTokens.add(existing_token);
// Closed EMC
newTokens.add(Operator.getOperator("EMC"));
//Adding marked content to the root tree structure.
structureElement = new PDStructureElement(StandardStructureTypes.P, currentSection);
structureElement.setPage(page);
PDMarkedContent markedContent = new PDMarkedContent(COSName.P, currentMarkedContentDictionary);
structureElement.appendKid(markedContent);
currentSection.appendKid(structureElement);

感谢@Tilman Hausherr

关于java - 使用 pdfbox 创建新的自定义 COSBase 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56231681/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com