当前位置: 首页 > 知识库问答 >
问题:

在PDFBox中将文字样式设置为带下划线

陈兴朝
2023-03-14

我正在尝试使用PDFBox将带下划线的文本添加到空白pdf页面,但我在网上找不到任何示例。stackoverflow上的所有问题都指向提取带下划线的文本,而不是创建它。PDFBox是否未实现此功能?查看PDFBox文档,字体似乎预先呈现为粗体、斜体和常规。

例如,Times New Roman Regular表示为:

PDFont font = PDType1Font.TIMES_ROMAN. 

Times New Roman Bold表示为:

PDFont font = PDType1Font.TIMES_BOLD

斜体表示为:

PDFont font = PDType1Font.TIMES_ITALIC

似乎没有带下划线的选项。有没有给文本加下划线,或者这不是一个功能?

共有3个答案

佟阳飙
2023-03-14

试试这个答案:

当文本在pdf中的位置已知时,使用pdfbox高亮显示文本

此方法使用PDAnnotationTextMarkup,它有四个值

/**
 * The types of annotation.
 */
public static final String SUB_TYPE_HIGHLIGHT = "Highlight";
/**
 * The types of annotation.
 */
public static final String SUB_TYPE_UNDERLINE = "Underline";
/**
 * The types of annotation.
 */
public static final String SUB_TYPE_SQUIGGLY = "Squiggly";
/**
 * The types of annotation.
 */
public static final String SUB_TYPE_STRIKEOUT = "StrikeOut";

希望有帮助

宁修永
2023-03-14

我对带下划线的字符串使用下面的函数。

public class UnderlineText {
PDFont font = PDType1Font.HELVETICA_BOLD;
float fontSize = 10f;
String str = "Hello";
public static void main(String[] args) {
    new UnderlineText().generatePDF(20, 200);
}

public void generatePDF(int sX, int sY)
{
    //create pdf and its contents for one page
    PDDocument document = new PDDocument();
    File file = new File("underlinePdfbox.pdf");
    PDPage page = new PDPage();
    PDPageContentStream contentStream;

    try {
        document.addPage(page);

        //create content stream
        contentStream = new PDPageContentStream(document, page);

        //being text for our page
        contentStream.beginText();
        contentStream.setFont( font, fontSize);
        contentStream.newLineAtOffset(sX, sY);
        contentStream.showText(str);
        contentStream.endText();

        //Draw Underline
        drawLine(contentStream, str, 1, sX, sY, -2);


        //close and save document
        contentStream.close();
        document.save(file);
        document.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
}

public void drawLine(PDPageContentStream contentStream, String text, float lineWidth, float sx, float sy, float linePosition) throws IOException {
     //Calculate String width
    float stringWidth = fontSize * font.getStringWidth(str) / 1000;
    float lineEndPoint = sx + stringWidth;

    //begin to draw our line
    contentStream.setLineWidth(lineWidth);
    contentStream.moveTo(sx, sy + linePosition);
    contentStream.lineTo(lineEndPoint, sy + linePosition);
    contentStream.stroke();
}
}

drawLine是我创建的一个函数,用于为特定字符串绘制一条线。您可以使用“位置”属性根据规范调整线条。

在第行下创建位置字段中的负(-)值。可以对“over line”和“stroke line”使用正值。(例如,2表示下划线,10表示超行,2表示上述代码的笔划行)

您还可以管理线条的宽度。

贲功
2023-03-14

我不确定这是否是一个更好的选择,但我跟随蒂尔曼·豪斯赫尔并与我的文本进行了比较。例如,我有以下内容:

public processPDF(int xOne, int yOne, int xTwo, int yTwo)
{
    //create pdf and its contents for one page
    PDDocument document = new PDDocument();
    File file = new File("hello.pdf");
    PDPage page = new PDPage();
    PDFont font = PDType1Font.HELVETICA_BOLD;
    PDPageContentStream contentStream;

    try {
        //create content stream
        contentStream = new PDPageContentStream(document, page);

        //being to create our text for our page
        contentStream.beginText();
        contentStream.setFont( font, largeTitle);

        //position of text
        contentStream.moveTextPositionByAmount(xOne, yOne, xTwo, yTwo);
        contentStream.drawString("Hello");
        contentStream.endText();

        //begin to draw our line
        contentStream.drawLine(xOne, yOne - .5, xTwo, yYwo - .5);

        //close and save document
        document.save(file);
        document.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
}

其中,参数xOne、yOne、xTwo和yTwo是文本的位置。这条线让我们减法。从yOne和yTwo中选择5,将其移到文本位置下方一小点,最终将其设置为带下划线的文本。

也许有更好的方法,但这是我走的路线。

 类似资料:
  • 我有一个JTextPane组件,我试图将用户键入的文本样式设置为同时下划线和删除线。 应该将下一个类型化字符的删除线属性设置为true的相关代码片段如下: 这确实会将文本样式设置为删除线,但如果已经将其样式设置为下划线,则会丢失下划线样式信息。仔细查看styleConstants.setStrikeThrough(...)背后的实际代码我注意到,下划线和删除线属性的CSS样式标记都是相同的(即“t

  • 我有一个项目,要求我在一段文本中的一些下划线文本下放置一个ID字符串。 下面是一个使用带有灰色边框的内嵌SVG对象来显示布局的示例: 我可以使用带有基线偏移的内联元素接近,然后使用 SVG 来呈现文本。但是,这有一个缺点(我认为),即我必须手动输入 SVG 的宽度(以像素为单位),这对于如此简单的布局来说似乎非常复杂。 下面是它的XSL-FO标记: 所以我的问题是:我可以在Apache FOP X

  • 问题内容: 我需要有关在Openpyxl中设置样式的建议。 我看到可以设置单元格的NumberFormat,但是我还需要设置字体颜色和属性(粗体等)。有一个style.py类,但是似乎我无法设置单元格的style属性,而且我真的不想开始修改openpyxl源代码。 有没有人找到解决方案? 问题答案: 从openpyxl版本1.5.7开始,我已成功应用以下工作表样式选项… 仅供参考,您可以在…中找到

  • 我试图找出如何设置整个word文档的字体样式,完全是通过选择菜单中预设的样式来完成的: 因为我已经制作了一个宏来逐字转换整个文档,所以我试图用它来完成的是更改所有预设磁贴(正常、无间距、标题、标题1等)。)以匹配现有的预设,而不是旧的预设(旧字体)。 这可能吗?我要修改什么对象来实现这一点?

  • 您好,我想调整字体大小和颜色的字体真棒。这是我正在使用的代码,我可以让颜色或字体大小正常工作。但不是两者都在一起。也不确定我是应该使用内嵌CSS还是创建一个单独的CSS文件。这是一个简短的HTML表单(计算器)。 我的语法有问题吗?我做了大量的搜索,似乎找不到问题所在。 谢谢

  • 在 Rax 中,有以下几种方式给元素设置样式: 内联样式 通过元素的 style 属性,为元素设置内联样式: 1const myStyle = { 2 fontSize: '24px', 3 color: '#FF0000' 4}; 5 6const element = <h1 style={myStyle}>Hello Rax</h1>; 需要注意的是,style 的值是一个 object,