如何使用PDFBox应用波浪线?

时间:2018-12-17 10:42:15

标签: java pdfbox

基于https://stackoverflow.com/a/51654691中发布的代码,我已经能够将突出显示,下划线和删除线注释应用于PDF中的文本。现在,我正在尝试概念上类似的波浪状注释,它似乎没有任何作用(文本看起来没有改变)。

我找不到专门用于此目的的示例(并且在PDFBox JIRA中没有出现有关“弯曲”的相关问题),因此我只能使用此注释。

我可以发布我使用的代码,但是它与上面链接的代码基本相同,除了使用SUB_TYPE_SQUIGGLY而不是SUB_TYPE_HIGHLIGHT。

更新:这是我正在测试的最基本形式的代码。

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.List;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.color.PDColor;
import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationTextMarkup;

public class MainSourceSO {

    public static void main (String[] args) throws Exception {
        PDDocument document = PDDocument.load(new File("SO-example.pdf"));

        List<PDAnnotation> annotations = document.getPage(0).getAnnotations();
        PDColor color = new PDColor(new float[] { 1, 1 / 255F, 1 }, PDDeviceRGB.INSTANCE);

        PDAnnotationTextMarkup highlight = new PDAnnotationTextMarkup(PDAnnotationTextMarkup.SUB_TYPE_UNDERLINE);
        highlight.setRectangle(new PDRectangle(72, 400, 72, 18));
        highlight.setQuadPoints(new float[]{72.0f,418.0f,142.002f,418.0f,72.0f,400.0f,142.002f,400.0f});
        highlight.setColor(color);
        annotations.add(highlight);

        highlight = new PDAnnotationTextMarkup(PDAnnotationTextMarkup.SUB_TYPE_HIGHLIGHT);
        highlight.setRectangle(new PDRectangle(72, 500, 72, 18));
        highlight.setQuadPoints(new float[]{72.0f,518.0f,142.002f,518.0f,72.0f,500.0f,142.002f,500.0f});
        highlight.setColor(color);
        annotations.add(highlight);

        highlight = new PDAnnotationTextMarkup(PDAnnotationTextMarkup.SUB_TYPE_STRIKEOUT);
        highlight.setRectangle(new PDRectangle(72, 600, 72, 18));
        highlight.setQuadPoints(new float[]{72.0f,618.0f,142.002f,618.0f,72.0f,600.0f,142.002f,600.0f});
        highlight.setColor(color);
        annotations.add(highlight);

        highlight = new PDAnnotationTextMarkup(PDAnnotationTextMarkup.SUB_TYPE_SQUIGGLY);
        highlight.setRectangle(new PDRectangle(72, 700, 72, 18));
        highlight.setQuadPoints(new float[]{72.0f,718.0f,142.002f,718.0f,72.0f,700.0f,142.002f,700.0f});
        highlight.setColor(color);
        annotations.add(highlight);

        File file1 = new File("SO-example-2.pdf");
        document.save(file1);
    }
}

1 个答案:

答案 0 :(得分:2)

此代码对我有用:

PDDocument document = PDDocument.load(...);
List<PDAnnotation> annotations = document.getPage(0).getAnnotations();
PDAnnotationTextMarkup highlight = new PDAnnotationTextMarkup(PDAnnotationTextMarkup.SUB_TYPE_SQUIGGLY);
highlight.setRectangle(new PDRectangle(72, 500, 72, 18));
highlight.setQuadPoints(new float[]{72.0f,518.0f,142.002f,518.0f,72.0f,500.0f,142.002f,500.0f});
PDColor yellow = new PDColor(new float[] { 1, 1, 100 / 255F }, PDDeviceRGB.INSTANCE);
highlight.setColor(yellow);
annotations.add(highlight);
document.save(...);

我不知道什么对您不起作用。也许是颜色(很难看到),也许是矩形或也许是四点。 (PDF规范中有关于四点的错误,请参见enter image description here。)