Форматирование текста внутри PDF

Как добавить отступ строки в PDF

Aspose.PDF для Java предлагает свойство SubsequentLinesIndent в классе TextFormattingOptions. Которое может использоваться для указания отступа строки в сценариях генерации PDF с использованием TextFragment и коллекции Paragraphs.

Пожалуйста, используйте следующий фрагмент кода для использования этого свойства:

public static void AddLineIndentToPDF() {
        // Создать новый объект документа
        Document document = new Document();
        Page page = document.getPages().add();

        TextFragment text = new TextFragment(
                "A quick brown fox jumped over the lazy dog. A quick brown fox jumped over the lazy dog. A quick brown fox jumped over the lazy dog. A quick brown fox jumped over the lazy dog. A quick brown fox jumped over the lazy dog. A quick brown fox jumped over the lazy dog. A quick brown fox jumped over the lazy dog. A quick brown fox jumped over the lazy dog.");

        // Инициализировать TextFormattingOptions для текстового фрагмента и указать
        // значение SubsequentLinesIndent
        TextFormattingOptions textOptions = new TextFormattingOptions();
        textOptions.setSubsequentLinesIndent(20);
        text.getTextState().setFormattingOptions(textOptions);

        page.getParagraphs().add(text);

        text = new TextFragment("Line2");
        page.getParagraphs().add(text);

        text = new TextFragment("Line3");
        page.getParagraphs().add(text);

        text = new TextFragment("Line4");
        page.getParagraphs().add(text);

        text = new TextFragment("Line5");
        page.getParagraphs().add(text);

        document.save(_dataDir + "SubsequentIndent_out.pdf");
    }

Как добавить границу к тексту

Следующий фрагмент кода показывает, как добавить границу к тексту, используя TextBuilder и установку метода DrawTextRectangleBorder из TextState:

public static void AddTextBorder() {
    // Создать новый объект документа
    Document pdfDocument = new Document();
    // Получить конкретную страницу
    Page pdfPage = pdfDocument.getPages().add();
    // Создать текстовый фрагмент
    TextFragment textFragment = new TextFragment("основной текст");
    textFragment.setPosition(new Position(100, 600));
    // Установить свойства текста
    textFragment.getTextState().setFontSize(12);
    textFragment.getTextState().setFont(FontRepository.findFont("TimesNewRoman"));
    textFragment.getTextState().setBackgroundColor (Color.getLightGray());
    textFragment.getTextState().setForegroundColor (Color.getRed());
    // Используйте setStrokingColor для рисования границы (обводки) вокруг текстового прямоугольника
    textFragment.getTextState().setStrokingColor (Color.getDarkRed());
    // Используйте метод setDrawTextRectangleBorder, чтобы установить значение true
    textFragment.getTextState().setDrawTextRectangleBorder(true);
    TextBuilder tb = new TextBuilder(pdfPage);
    tb.appendText(textFragment);
    // Сохранить документ
    pdfDocument.save(_dataDir + "PDFWithTextBorder_out.pdf");
}

Как добавить подчеркнутый текст

Следующий фрагмент кода показывает, как добавить подчеркнутый текст при создании нового PDF файла.

public static void AddUnderlineText(){
    // Создать объект документации
    Document pdfDocument = new Document();
    // Добавить страницу в PDF документ
    Page page = pdfDocument.getPages().add();
    // Создать TextBuilder для первой страницы
    TextBuilder tb = new TextBuilder(page);
    // TextFragment с примером текста
    TextFragment fragment = new TextFragment("Текст с подчеркиванием");
    // Установить шрифт для TextFragment
    fragment.getTextState().setFont (FontRepository.findFont("Arial"));
    fragment.getTextState().setFontSize (10);
    // Установить форматирование текста как подчеркнутое
    fragment.getTextState().setUnderline(true);
    // Указать позицию, где должен быть размещен TextFragment
    fragment.setPosition (new Position(10, 800));
    // Добавить TextFragment в PDF файл
    tb.appendText(fragment);

    // Сохранить полученный PDF документ.
    pdfDocument.save(_dataDir + "AddUnderlineText_out.pdf");
}

Как добавить рамку вокруг добавленного текста

Вы можете контролировать внешний вид добавленного текста. Пример ниже показывает, как добавить рамку вокруг текста, который вы добавили, нарисовав вокруг него прямоугольник. Узнайте больше о классе PdfContentEditor.

public static void AddBorderAroundAddedText() {
    PdfContentEditor editor = new PdfContentEditor();
    editor.bindPdf(_dataDir + "input.pdf");
    LineInfo lineInfo = new LineInfo();
    lineInfo.setLineWidth(2);
    lineInfo.setVerticeCoordinate (new float[] { 0, 0, 100, 100, 50, 100 });
    lineInfo.setVisibility(true);
    editor.createPolygon(lineInfo, 1, new java.awt.Rectangle(0, 0, 0, 0), "");

    // Сохранить результирующий PDF документ.
    editor.save(_dataDir + "AddingBorderAroundAddedText_out.pdf");
}

Как добавить перевод строки

TextFragment не поддерживает перевод строки внутри текста. Однако, чтобы добавить текст с переводом строки, используйте TextFragment с TextParagraph:

  • используйте “\r\n” или Environment.NewLine в TextFragment вместо одиночного “\n”;
  • создайте объект TextParagraph. Это добавит текст с разделением строк;
  • добавьте TextFragment с TextParagraph.AppendLine;
  • добавьте TextParagraph с TextBuilder.AppendParagraph. Пожалуйста, используйте приведенный ниже фрагмент кода.
public static void AddNewLineFeed() {        
    Document pdfDocument = new Document();
    Page page = pdfDocument.getPages().add();

    // Инициализируйте новый TextFragment с текстом, содержащим необходимые маркеры новой строки
    TextFragment textFragment = new TextFragment("Applicant Name: " + System.lineSeparator() + " Joe Smoe");

    // Установите свойства фрагмента текста, если необходимо
    textFragment.getTextState().setFontSize (12);
    textFragment.getTextState().setFont(FontRepository.findFont("DejaVu Serif"));
    textFragment.getTextState().setBackgroundColor (Color.getLightGray());
    textFragment.getTextState().setForegroundColor (Color.getRed());

    // Создайте объект TextParagraph
    TextParagraph par = new TextParagraph();

    // Добавьте новый TextFragment в абзац
    par.appendLine(textFragment);

    // Установите позицию абзаца
    par.setPosition (new Position(100, 600));

    // Создайте объект TextBuilder
    TextBuilder textBuilder = new TextBuilder(page);
    // Добавьте TextParagraph, используя TextBuilder
    textBuilder.appendParagraph(par);

    // Сохраните результирующий PDF-документ.
    pdfDocument.save(_dataDir + "AddNewLineFeed_out.pdf");
}

Как добавить зачеркнутый текст

Класс TextState предоставляет возможности для установки форматирования для TextFragments, размещаемых внутри PDF документа. Вы можете использовать этот класс, чтобы устанавливать форматирование текста как жирный, курсив, подчеркивание, и начиная с этого релиза, API предоставил возможность отмечать форматирование текста как зачеркнутое. Пожалуйста, попробуйте использовать следующий фрагмент кода, чтобы добавить TextFragment с форматированием зачеркнутого текста.

Пожалуйста, используйте полный фрагмент кода:

public static void AddStrikeOutText(){
    // Открыть документ
    Document pdfDocument = new Document();
    // Получить конкретную страницу
    Page pdfPage = (Page)pdfDocument.getPages().add();

    // Создать фрагмент текста
    TextFragment textFragment = new TextFragment("main text");
    textFragment.setPosition (new Position(100, 600));

    // Установить свойства текста
    textFragment.getTextState().setFontSize(12);
    textFragment.getTextState().setFont(FontRepository.findFont("DejaVu Serif"));
    textFragment.getTextState().setBackgroundColor(Color.getLightGray());
    textFragment.getTextState().setForegroundColor(Color.getRed());
    // использовать метод setStrikeOut для включения зачеркнутого текста
    textFragment.getTextState().setStrikeOut(true);
    // Отметить текст как жирный
    textFragment.getTextState().setFontStyle(FontStyles.Bold);

    // Создать объект TextBuilder
    TextBuilder textBuilder = new TextBuilder(pdfPage);
    // Добавить фрагмент текста на страницу PDF
    textBuilder.appendText(textFragment);

    // Сохранить итоговый PDF документ.
    pdfDocument.save(_dataDir + "AddStrikeOutText_out.pdf");        
}

Применение градиентной заливки к тексту

Форматирование текста было дополнительно улучшено в API для сценариев редактирования текста, и теперь вы можете добавлять текст с цветовым пространством шаблона внутри PDF-документа. Класс com.aspose.pdf.Color был дополнительно улучшен путем введения нового метода setPatternColorSpace, который можно использовать для указания цветов заливки для текста. Этот новый метод добавляет различную градиентную заливку к тексту, например, аксиальную заливку, радиальную (тип 3) заливку, как показано в следующем фрагменте кода:

public static void ApplyGradientShading() {
    Document pdfDocument = new Document(_dataDir + "sample.pdf");
    TextFragmentAbsorber absorber = new TextFragmentAbsorber("always print correctly");
    pdfDocument.getPages().accept(absorber);

    TextFragment textFragment = absorber.getTextFragments().get_Item(1);

    Color foregroundColor = new com.aspose.pdf.Color();
    foregroundColor.setPatternColorSpace(new GradientAxialShading(Color.getRed(), Color.getBlue()));

    // Создаем новый цвет с цветовыми пространствами шаблона
    textFragment.getTextState().setForegroundColor (foregroundColor);

    textFragment.getTextState().setUnderline(true);

    pdfDocument.save(_dataDir + "text_out.pdf");
}

Для применения радиального градиента, вы можете использовать метод setPatternColorSpace, равный GradientRadialShading(startingColor, endingColor) в указанном выше фрагменте кода.

public static void ApplyGradientShadingRadial() {
    Document pdfDocument = new Document(_dataDir + "sample.pdf");
    TextFragmentAbsorber absorber = new TextFragmentAbsorber("всегда печатайте правильно");
    pdfDocument.getPages().accept(absorber);

    TextFragment textFragment = absorber.getTextFragments().get_Item(1);

    Color foregroundColor = new com.aspose.pdf.Color();
    foregroundColor.setPatternColorSpace(new GradientRadialShading(Color.getRed(), Color.getBlue()));

    // Создать новый цвет с шаблонным цветовым пространством
    textFragment.getTextState().setForegroundColor (foregroundColor);

    textFragment.getTextState().setUnderline(true);

    pdfDocument.save(_dataDir + "text_out.pdf");
}

Как выровнять текст относительно плавающего содержимого

Aspose.PDF поддерживает установку выравнивания текста для содержимого внутри элемента Floating Box. Свойства выравнивания экземпляра Aspose.Pdf.FloatingBox могут быть использованы для достижения этого, как показано в следующем примере кода.

public static void AlignTextToFloatContent() {
    Document pdfDocument = new Document();
    Page page = pdfDocument.getPages().add();

    FloatingBox floatBox = new FloatingBox(100, 100);
    floatBox.setVerticalAlignment(VerticalAlignment.Bottom);
    floatBox.setHorizontalAlignment (HorizontalAlignment.Right);
    floatBox.getParagraphs().add(new TextFragment("FloatingBox_bottom"));
    floatBox.setBorder(new BorderInfo(BorderSide.All, Color.getBlue()));
    
    page.getParagraphs().add(floatBox);

    FloatingBox floatBox1 = new FloatingBox(100, 100);
    floatBox1.setVerticalAlignment(VerticalAlignment.Center);
    floatBox1.setHorizontalAlignment (HorizontalAlignment.Right);
    floatBox1.getParagraphs().add(new TextFragment("FloatingBox_center"));
    floatBox1.setBorder (new BorderInfo(BorderSide.All, Color.getBlue()));
    page.getParagraphs().add(floatBox1);

    FloatingBox floatBox2 = new FloatingBox(100, 100);
    floatBox2.setVerticalAlignment(VerticalAlignment.Top);
    floatBox2.setHorizontalAlignment (HorizontalAlignment.Right);
    floatBox2.getParagraphs().add(new TextFragment("FloatingBox_top"));
    floatBox2.setBorder (new BorderInfo(BorderSide.All, Color.getBlue()));
    page.getParagraphs().add(floatBox2);

    pdfDocument.save(_dataDir + "FloatingBox_alignment_review_out.pdf");        
}