Как применить волнистые линии, используя PDFBox? - PullRequest
0 голосов
/ 17 декабря 2018

Основываясь на коде, опубликованном в 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 голосов
/ 17 декабря 2018

Этот код работал для меня:

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 есть ошибка относительно четырех точек, см. здесь ).

...