使用工具提示

通过添加不可见按钮为搜索文本添加工具提示

在 PDF 文档中通常需要为短语或特定单词添加一些详细信息作为工具提示,以便当用户将鼠标光标悬停在文本上时可以弹出。Aspose.PDF for Java 提供了通过在搜索文本上添加不可见按钮来创建工具提示的功能。以下代码段将向您展示如何实现此功能:

package com.aspose.pdf.examples;

import com.aspose.pdf.ButtonField;
import com.aspose.pdf.Document;
import com.aspose.pdf.TextFragment;
import com.aspose.pdf.TextFragmentAbsorber;
import com.aspose.pdf.TextFragmentCollection;

public class ExampleToolTip {

    private static String _dataDir = "/home/admin1/pdf-examples/Samples/";

    public static void AddToolTip() {
        String outputFile = _dataDir + "Tooltip_out.pdf";

        // 创建带有文本的示例文档
        Document doc = new Document();
        doc.getPages().add().getParagraphs().add(new TextFragment("将鼠标光标移到此处以显示工具提示"));
        doc.getPages().get_Item(1).getParagraphs().add(new TextFragment("将鼠标光标移到此处以显示非常长的工具提示"));
        doc.save(outputFile);

        // 打开带有文本的文档
        Document document = new Document(outputFile);
        // 创建 TextAbsorber 对象以查找所有与正则表达式匹配的短语
        TextFragmentAbsorber absorber = new TextFragmentAbsorber("将鼠标光标移到此处以显示工具提示");
        // 为文档页面接受吸收器
        document.getPages().accept(absorber);
        // 获取提取的文本片段
        TextFragmentCollection textFragments = absorber.getTextFragments();

        // 遍历片段
        for(TextFragment fragment : textFragments)
        {
            // 在文本片段位置创建不可见按钮
            ButtonField field = new ButtonField(fragment.getPage(), fragment.getRectangle());
            // AlternateName 值将作为工具提示由查看应用程序显示
            field.setAlternateName ("文本的工具提示。");
            // 将按钮字段添加到文档
            document.getForm().add(field);
        }

        // 接下来将是非常长的工具提示示例
        absorber = new TextFragmentAbsorber("将鼠标光标移到此处以显示非常长的工具提示");
        document.getPages().accept(absorber);
        textFragments = absorber.getTextFragments();

        for(TextFragment fragment : textFragments)
        {
            ButtonField field = new ButtonField(fragment.getPage(), fragment.getRectangle());
            // 设置非常长的文本
            field.setAlternateName ("Lorem ipsum dolor sit amet, consectetur adipiscing elit," +
                                    " sed do eiusmod tempor incididunt ut labore et dolore magna" +
                                    " aliqua. Ut enim ad minim veniam, quis nostrud exercitation" +
                                    " ullamco laboris nisi ut aliquip ex ea commodo consequat." +
                                    " Duis aute irure dolor in reprehenderit in voluptate velit" +
                                    " esse cillum dolore eu fugiat nulla pariatur. Excepteur sint" +
                                    " occaecat cupidatat non proident, sunt in culpa qui officia" +
                                    " deserunt mollit anim id est laborum.");
            document.getForm().add(field);
        }

        // 保存文档
        document.save(outputFile);
    }
}

创建一个隐藏文本块并在鼠标悬停时显示

在 Aspose.PDF 中,实现了一项隐藏动作的功能,可以在鼠标进入/退出某些不可见按钮时显示/隐藏文本框字段(或任何其他类型的注释)。为此,使用 Aspose.Pdf.Annotations.HideAction 类来分配隐藏/显示文本块的动作。请使用以下代码片段在鼠标进入/退出时显示/隐藏文本块。

还请注意,文档中的 PDF 动作在合规阅读器中运行良好(例如。 Adobe Reader)但不保证其他PDF阅读器(例如,Web浏览器插件)。我们进行了简要调查,发现:

  • 所有的隐藏动作在Internet Explorer v.11.0中工作正常。
  • 所有隐藏动作在Opera v.12.14中也能正常工作,但我们发现首次打开文档时有一些响应延迟。
  • 只有使用接受字段名称的HideAction构造函数的实现才能在Google Chrome v.61.0浏览文档时工作;如果在Google Chrome中浏览很重要,请使用相应的构造函数:

buttonField.Actions.OnEnter = new HideAction(floatingField.FullName, false); buttonField.Actions.OnExit = new HideAction(floatingField.FullName);

    public static void name() {
        String outputFile = _dataDir + "TextBlock_HideShow_MouseOverOut_out.pdf";

        // 创建含有文本的示例文档
        Document doc = new Document();
        doc.getPages().add().getParagraphs().add(new TextFragment("将鼠标光标移动到此处以显示浮动文本"));
        doc.save(outputFile);

        // 打开含有文本的文档
        Document document = new Document(outputFile);
        // 创建TextAbsorber对象以查找所有匹配正则表达式的短语
        TextFragmentAbsorber absorber = new TextFragmentAbsorber("将鼠标光标移动到此处以显示浮动文本");
        // 接受文档页面的吸收器
        document.getPages().accept(absorber);
        // 获取第一个提取的文本片段
        TextFragmentCollection textFragments = absorber.getTextFragments();
        TextFragment fragment = textFragments.get_Item(1);

        // 在页面的指定矩形中创建用于浮动文本的隐藏文本字段
        TextBoxField floatingField = new TextBoxField(fragment.getPage(), new Rectangle(100, 700, 220, 740));
        // 设置要显示为字段值的文本
        floatingField.setValue ("这是\"浮动文本字段\"。");
        // 我们建议在此场景中将字段设为“只读”
        floatingField.setReadOnly(true);

        // 设置“隐藏”标志以使字段在打开文档时不可见
        floatingField.setFlags( floatingField.getFlags() | AnnotationFlags.Hidden);

        // 设置唯一字段名称不是必须的,但允许
        floatingField.setPartialName ("FloatingField_1");

        // 设置字段外观的特征不是必须的,但会更好
        DefaultAppearance da = new DefaultAppearance("Helvetica", 16, java.awt.Color.RED);
        floatingField.setDefaultAppearance(da);
        //new DefaultAppearance("Helv", 10, Color.getBlue()
        floatingField.getCharacteristics().setBackground(Color.getLightBlue());
        floatingField.getCharacteristics().setBorder(Color.getDarkBlue());
        floatingField.setBorder(new Border(floatingField));
        floatingField.getBorder().setWidth(1);
        floatingField.setMultiline(true);

        // 将文本字段添加到文档
        document.getForm().add(floatingField);

        // 在文本片段位置创建不可见按钮
        Field buttonField = new ButtonField(fragment.getPage(), fragment.getRectangle());
        // 为指定字段(注释)和不可见标志创建新的隐藏动作。
        // (如果您在上面指定了名称,也可以通过名称引用浮动字段。)
        // 在不可见按钮字段上添加鼠标进入/退出动作
        buttonField.getActions().setOnEnter(new HideAction(floatingField, false));
        buttonField.getActions().setOnExit (new HideAction(floatingField));

        // 将按钮字段添加到文档
        document.getForm().add(buttonField);

        // 保存文档
        document.save(outputFile);
    }