gpt4 book ai didi

java - 删除其他运算符并仅保留文本运算符(TJ,Tj) pdfBox

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:20 41 4
gpt4 key购买 nike

我有一个 pdf 文件,我希望从中删除所有图像和其他绘图内容。并将结果另存为新的 pdf。

我知道如何使用 TJ 、 Tj 运算符删除文本,我目前执行的操作如下

op.getOperation().equals( "TJ")

是否可以将这些文本运算符复制到格式完整的其他 pdf 文件上,以便新的 pdf 变成纯文本 pdf,而不是删除 TJ,Tj 运算符?如果使用 Tj , TJ 运算符以外的其他运算符绘制的文本丢失,也没关系。

删除 TJ,Tj 的代码取自 THIS堆栈溢出帖子。但它部分有效,它只是仅删除图像,使绘画和其他艺术完好无损。

编辑:我能想到的其他选项是将 BT ET block 之外的所有其他运算符的 cmyk 颜色设置为白色。这样 pdf 就会感觉只有文本。这可能吗 ?如果是,请支持 pdfBox 中的代码示例。

最佳答案

... THIS stackoverflow post. But it partially works , it just removes images only, leaving drawing and other art intact.

位图图形以外的图形的主要来源是 vector 图形。它们通常由路径定义组成,后跟填充或描边路径的命令。

要删除这些图形,您可以通过将路径绘制或填充运算符替换为 n 运算符(路径绘制无操作)来改进您提到的答案中的示例。

            if( token instanceof PDFOperator )
{
PDFOperator op = (PDFOperator)token;
if( op.getOperation().equals( "Do") )
{
//remove the one argument to this operator
COSName name = (COSName)newTokens.remove( newTokens.size() -1 );
continue;
}
else if (PAINTING_PATH_OPS.contains(op.getOperation()))
{
// replace path painting operator by path no-op
token = PDFOperator.getOperator("n");
}
}

哪里

final static List<String> PAINTING_PATH_OPS = Arrays.asList("S", "s", "F", "f", "f*", "B", "b", "B*", "b*");

包含路径删除或填充运算符。

PS:提到的答案中使用的图像删除代码有两个缺点:

  • 它删除了太多,因为它不仅删除了图像xobject,还删除了form xobject;有时(尤其是在 n-up 工具输出中)所有内容都驻留在此类形式的 xobject 中,包括所有文本

    要解决此问题,您必须检查引用的 xobject 的类型,并且只有在它具有子类型图像时才将其删除。由于表单 xobject 反过来也可以包含图像,因此您必须递归到表单 xobject(它有自己的内容流)。

  • 它删除的内容太少,因为它忽略了内嵌图像。

    要解决此问题,您还必须留意内容中的 BI ... 键值对 ... ID ... 图像数据 ... EI 部分并将其删除。

关于java - 删除其他运算符并仅保留文本运算符(TJ,Tj) pdfBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22067557/

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