更改文本块

时间:2018-06-08 11:59:03

标签: java pdf itext

为了隐身术,我需要稍微更改文本块的y坐标(BT流中ET/Contents命令之间的y坐标。

枚举很简单。您必须为PdfReaderContentParser实施回调或直接使用PRTokeniser拆分内容:

    final PdfReaderContentParser contentParser = new PdfReaderContentParser(reader);
    final byte[] contentBytes = ContentByteUtils.getContentBytesForPage(reader, 1);
    final PRTokeniser tokeniser = new PRTokeniser(new RandomAccessFileOrArray(
            new RandomAccessSourceFactory().createSource(contentBytes)));
    final PdfContentParser ps = new PdfContentParser(tokeniser);
    final ArrayList<PdfObject> operands = new ArrayList<PdfObject>();
    while (ps.parse(operands).size() > 0) {
        final PdfLiteral operator = (PdfLiteral) operands.get(operands.size() - 1);
        if ("Td".equals(operator.toString())) {
            System.out.println(operands);
        }
    }

输出:

[56.8, 775.9, Td]
[523, 775.9, Td]
[56.8, 764.4, Td]
[534.2, 764.4, Td]
[56.8, 752.9, Td]
[56.8, 741.4, Td]

但是,我不知道如何将更改后的令牌保存回内容流。我已经看到example使用PdfTemplate在文档中移动矩形区域,但它似乎是一种矫枉过正。此外,我无法保证将保留阻止顺序。

我不需要知道文本块中实际编码的人类可读文本是什么,我不关心他们的视觉顺序。我只需要在修改后保留这些块的枚举顺序。

为每个操作数调用toPdf()是否足够,可能使用空格作为分隔符?换行是否重要?

0 个答案:

没有答案