Не могу задать параметры PDF, созданные с помощью itextpdf - PullRequest
0 голосов
/ 18 апреля 2020

Я обрабатываю HTML до PDF, используя itextpdf, но у меня проблема. HTML имеет определенные параметры, которые должны быть установлены после преобразования. Когда я манипулирую файлом PDF, чтобы установить изображение с вертикальным водяным знаком, byte[], который генерирует PDF, имеет что-то вроде этого:

[(C)-7(ódi)8(g)-3(o)16(:)-7(${)15(C)-7(O)4(D)3(_)5(D)3(O)4(C)-7(}  )20(R)-3(e)-3(v)-4(i)7(s)-3(i)7(ón)15(:)-7(${)15(R)-3(E)10(V)9(_)5(D)3(O)4(C)-7(}  )5(F)-3(e)-3(ch)15(a:)-5(${)15(F)-3(E)10(C)-7(H)19(A)-5(_)5(D)3(O)4(C)-7(})] TJ

, это имеет некоторые параметры, такие как ${COD_DOC}, но когда я Задайте им проблему: изображение связано

Мой вопрос: что означают цифры? потому что, когда я пытаюсь установить букву P, она не работает.

Код:

public Image manipulatePdfTemplate(File pdfTemplate, PdfDocument pdfDoc, Map<String, Object> fileVariables) 
        throws Exception 
{
    log.info("Iniciando el procesamiento del la plantilla pdf");
    PdfPage firstPage = pdfDoc.getFirstPage();

    // Sustituimos las variables por los valores de los parametros
    PdfObject object = firstPage.getPdfObject().get(PdfName.Contents);
    if (object instanceof PdfStream) {
        PdfStream stream = (PdfStream) object;
        byte[] data = stream.getBytes();

        // Método para escribir los bytes del contenido del pdf en un txt
        // writePdfContent(data);

        // Falla el caracter "5" y "X"
        if (fileVariables != null) {
            if (fileVariables.get("COD_DOC") != null && fileVariables.get("REV_DOC") != null
                    && fileVariables.get("FECHA_DOC") != null) {
                String replacedData = new String(data, StandardCharsets.ISO_8859_1)
                        .replace(AppConstant.COD_DOC, " (" + fileVariables.get("COD_DOC") + "  )")
                        .replace(AppConstant.REV_DOC, " (" + fileVariables.get("REV_DOC") + "  )")
                        .replace(AppConstant.FECHA_DOC, " (" + fileVariables.get("FECHA_DOC") + ")");
                stream.setData(replacedData.getBytes(StandardCharsets.ISO_8859_1));
            }
            else if(fileVariables.get("VERTICAL_TEXT") != null) {
                String replacedData = new String(data, StandardCharsets.ISO_8859_1)
                        .replace(AppConstant.VERTICAL_TEXT, "(" + fileVariables.get("VERTICAL_TEXT") + ")");
                stream.setData(replacedData.getBytes(StandardCharsets.ISO_8859_1));
            }
        }
    }

    // Convertimos el resultado a imagen que añadiremos de fondo en cada página del pdf resultante
    PdfFormXObject pageCopy = firstPage.copyAsFormXObject(pdfDoc);
    Image image = new Image(pageCopy);

    return image;
}

Перед настройкой параметров: enter image description here

После параметры настройки: enter image description here

1 Ответ

0 голосов
/ 20 апреля 2020

Прежде всего, сделайте себе одолжение и замените ваши ${COD_DOC} и подобные переменные перед преобразованием в PDF. PDF не формат, предназначенный для редактирования. В вашем случае вы видите некоторые причины, почему, прочитайте этот ответ для получения дополнительной информации.

При этом ваш фактический вопрос:

[(C)-7(ódi)8(g)-3(o)16(:)-7(${)15(C)-7(O)4(D)3(_)5(D)3(O)4(C)-7(}  )20(R)-3(e)-3(v)-4(i)7(s)-3(i)7(ón)15(:)-7(${)15(R)-3(E)10(V)9(_)5(D)3(O)4(C)-7(}  )5(F)-3(e)-3(ch)15(a:)-5(${)15(F)-3(E)10(C)-7(H)19(A)-5(_)5(D)3(O)4(C)-7(})] TJ

Мой вопрос: что означают цифры?

Вы опубликовали операцию TJ . Итак, давайте посмотрим, что спецификация PDF говорит об этой операции:

array TJ - Показать одну или несколько текстовых строк, допускающих индивидуальное позиционирование глифа. Каждый элемент array должен быть либо строкой, либо числом. Если элемент является строкой, этот оператор должен показать строку. Если это число, оператор должен отрегулировать положение текста на эту сумму; то есть он должен переводить текстовую матрицу T m . Число должно быть выражено в тысячных долях единицы текстового пространства (см. 9.4.4, «Детали текстового пространства»). Эта сумма должна быть вычтена из текущей горизонтальной или вертикальной координаты, в зависимости от режима записи. В системе координат по умолчанию положительная корректировка приводит к перемещению следующего глифа, окрашенного либо влево, либо вниз на заданную величину.

(ISO 32000-1, таблица 109 - Операторы с отображением текста)

Прочитайте этот ответ , чтобы узнать подробности из раздела 9.4.4, чтобы увидеть, как именно эти числа переводят текстовую матрицу, T m .

Следовательно, по существу, эти числа сокращают (положительный) или удлиняют (отрицательный) разрыв между чертежами предыдущей и следующих строк.

Часто, как в вашем В этом случае эта функция используется для реализации кернинга , т. е. регулировки расстояния между символами пропорциональным шрифтом, поскольку некоторые группы символов выглядят лучше, если символы не используют свои стандартные ширина.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...