2014-12-11 5 views
2

Я пытаюсь разобрать данные аннотации в XFDF и нарисовать его с помощью библиотеки iText. Я хочу нарисовать аннотацию, как прикрепленный образ.iText - PdfAnnotation.createInk

Ниже приведен мой код для проверки функции PdfAnnotation.createInk, но он не работает после запуска кода.

У меня есть Google и читайте документы, но не так много предоставленной информации. Любые предложения и советы? Благодаря!

// step 1 
    Document document = new Document(PageSize.A4); 
    // step 2 
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(destFile)); 
    // step 3 
    document.open(); 

    PdfContentByte pcb = new PdfContentByte(writer); 
    pcb.setColorStroke(BaseColor.RED); 
    Rectangle rect = new Rectangle(52.92f, 397.56f, 173.36f, 530.67f); 
    float[][] inkList = {{61.736111f,530.669250f},{61.295139f,525.820984f},{61.295139f,518.768860f}, 
      {61.295139f,505.986969f},{61.295139f,490.560547f},{61.295139f,470.726562f},{59.972221f,452.214844f}, 
      {57.767361f,434.143890f},{56.003471f,418.276703f},{53.357639f,404.172516f},{51.593750f,391.390625f}, 
      {50.711807f,382.134766f},{49.829861f,376.845703f} 
    }; 

    //float inkList[][] = 
    PdfAnnotation an = PdfAnnotation.createInk(writer, rect, "", inkList); 
    an.setPage(1); 
    an.setColor(BaseColor.RED); 
    an.setFlags(PdfAnnotation.FLAGS_PRINT); 

    writer.addAnnotation(an); 
    //Step 5 
    document.close(); 

enter image description here

+0

* но не работает * - что происходит вместо этого? – mkl

+0

Вывести pdf без аннотаций – PrimaryChicken

+0

На этой неделе я больше не буду в офисе. Если ваш вопрос не будет дан в ответ на начало следующей недели, я тогда рассмотрю его. – mkl

ответ

4

Выход PDF, казалось бы, не содержит аннотацию, потому что определенные аннотации просто совокупность изолированных точек.

Параметр PdfAnnotation.createInkfloat[][] соответствует InkList входа в Ink словаря аннотаций:

InkList массив (обязательно) Массив из п массивов, каждый из которых представляет собой погладил путь , Каждый массив должен представлять собой последовательность чередующихся горизонтальных и вертикальных координат в пространстве пользователя по умолчанию, задавая точки вдоль пути. При натягивании точки должны быть соединены прямыми линиями или кривыми в зависимом от исполнения порядке .

Таким образом, в случае массива OPS

float[][] inkList = {{61.736111f,530.669250f},{61.295139f,525.820984f},{61.295139f,518.768860f}, 
     {61.295139f,505.986969f},{61.295139f,490.560547f},{61.295139f,470.726562f},{59.972221f,452.214844f}, 
     {57.767361f,434.143890f},{56.003471f,418.276703f},{53.357639f,404.172516f},{51.593750f,391.390625f}, 
     {50.711807f,382.134766f},{49.829861f,376.845703f} 
}; 

мы имеем коллекцию из 13 дорожек, каждая из которых содержат только одну точку. Итак, ничего не нарисовано.

Если мы соединим все точки в одном пути, хотя,

float[][] inkList = {{61.736111f,530.669250f,61.295139f,525.820984f,61.295139f,518.768860f, 
      61.295139f,505.986969f,61.295139f,490.560547f,61.295139f,470.726562f,59.972221f,452.214844f, 
      57.767361f,434.143890f,56.003471f,418.276703f,53.357639f,404.172516f,51.593750f,391.390625f, 
      50.711807f,382.134766f,49.829861f,376.845703f} 
    }; 

результата заключается в следующем:

Screenshot

который выглядит как левая линия «Н» в скриншот в вопросе.

+0

Большое спасибо. – PrimaryChicken

+0

Кроме того, знаете ли вы, как задать ширину линии для аннотации? Благодарю. – PrimaryChicken

+0

Cf. [мой ответ] (http://stackoverflow.com/a/27501490/1729265) на ваш [последующий вопрос] (http://stackoverflow.com/q/27497333/1729265). – mkl