当前位置: 首页 > 面试题库 >

PDFBOX Same Stream具有粗体和普通文本

杨和蔼
2023-03-14
问题内容

好吧,我一直在使用PDFBox,但我仍然一点都不了解它,但是
我已经阅读了文档,使用字体和其他一些地方,但是
我发现了如何从PDF中获取文本,并且样式,但我是在创建
它,而不是在阅读它。

我正在努力做某事

像:这样(在同一行上具有粗体和普通文本)。

我一直在使用流:

不确定这是否是帮助我所需的全部代码,因为我刚刚加入了这个
项目,但是当我加入时它才开始。

如果您能帮助我实施此代码,或者
为我提供阅读解决方案的想法或资源,我将非常感谢。

我将代码留在这里:

public void rCovernoteFooter(PDPageContentStream stream , float x, float y) throws IOException {
    y = y-20;
    String currentDate = df1.format(new Date());
    String[] issues = constants.issued().split("/");
    String issued = issues[0] + currentDate + issues[1];
    y = rText(stream, x, y, 90, 0, 10, issued, null);
    stream.setFont(PDType1Font.TIMES_ROMAN, 8);
    y = rText(stream, x, y - 50, 117, 0, 10, constants.terms(), null);
}

public float rText(PDPageContentStream cStream, float x, float y, int col1, int col2, int spc, String data1, String data2) throws IOException {
    float y1 = 0f;
    float y2 = 0f;
    if (data2 == null) {
        y = iterate(data1, col1, x, y, spc, cStream);
    } else {
        y1 = iterate(data1, col1, x, y, spc, cStream);
        y2 = iterate(data2, col2, x + 125, y, spc,  cStream);
        if (y1 >= y2) {
        return y2;
        } else {
        return y1;
        }
    }
    return y;
}

private float iterate(String text, int len, float x, float y, int space, PDPageContentStream stream) throws IOException {
    int rowHeight = 0;
    List<String> wordList = Lists.newArrayList();
    wordList = wordLines(text, len);

    stream.setFont(PDType1Font.TIMES_BOLD, 10);
    for (String word : wordList) {
        stream.beginText();
        stream.moveTextPositionByAmount(x, y - rowHeight);
        stream.drawString(word);
        stream.endText();
        if (wordList.size() != 1)
        rowHeight = rowHeight + 10;
    }
    if (rowHeight >= space) {
        y = y - (rowHeight + 10);
    } else {
        y = y - space;
        }
    return y;
}

Thanks in advice


问题答案:

我正在努力做某事

像:这样(在同一行上具有粗体和普通文本)。

我一直在使用流:

创建粗体(或其他样式)文本的首选方法是使用
已为该变体显式创建的字体变体。
但是,如果没有这样的字体,则可以人工模拟这些
样式:

  • 人工加粗:使用文本呈现模式2不仅填充字母区域,而且沿其轮廓画一条线
  • 人工勾勒轮廓:使用文本呈现模式1沿字母轮廓绘制一条线,而不是填充它
  • 人工斜体(实际上是倾斜的:更改文本矩阵以使输出倾斜。
    代码中:

    PDRectangle rec = new PDRectangle(220, 120);
    PDDocument document = null;
    document = new PDDocument();

    PDPage page = new PDPage(rec);
    document.addPage(page);

    PDPageContentStream content = new PDPageContentStream(document, page, true, true);

    content.beginText();
    content.moveTextPositionByAmount(7, 105);
    content.setFont(PDType1Font.HELVETICA, 12);
    content.drawString(“Normal text and “);
    content.setFont(PDType1Font.HELVETICA_BOLD, 12);
    content.drawString(“bold text”);
    content.moveTextPositionByAmount(0, -25);
    content.setFont(PDType1Font.HELVETICA_OBLIQUE, 12);
    content.drawString(“Italic text and “);
    content.setFont(PDType1Font.HELVETICA_BOLD_OBLIQUE, 12);
    content.drawString(“bold italic text”);
    content.endText();

    content.setLineWidth(.5f);

    content.beginText();
    content.moveTextPositionByAmount(7, 55);
    content.setFont(PDType1Font.HELVETICA, 12);
    content.drawString(“Normal text and “);
    content.appendRawCommands(“2 Tr\n”);
    content.drawString(“artificially bold text”);
    content.appendRawCommands(“0 Tr\n”);
    content.moveTextPositionByAmount(0, -25);
    content.appendRawCommands(“1 Tr\n”);
    content.drawString(“Artificially outlined text”);
    content.appendRawCommands(“0 Tr\n”);
    content.setTextMatrix(1, 0, .2f, 1, 7, 5);
    content.drawString(“Artificially italic text and “);
    content.appendRawCommands(“2 Tr\n”);
    content.drawString(“bold italic text”);
    content.appendRawCommands(“0 Tr\n”);
    content.endText();

    content.close();

    document.save(“StyledTexts.pdf”);
    document.close();



 类似资料:
  • 在编辑文本中,用户应选择他们键入的内容是粗体、斜体还是正常。在我的情况下,当用户选择粗体时,整个编辑文本将更改为粗体,如果他再次选择斜体,则整个编辑文本将变为斜体。当用户选择粗体键入某些内容时,它应该是粗体的,当他选择斜体或正常时,他键入的单词应该是斜体或正常,而不是前一个粗体。此外,当我在编辑文本中打印输入时,即使以粗体显示,它也被正常打印。 我在底部有我的代码。 这是我将编辑文本设置为粗体或斜

  • 我正在尝试在itext 5中使用TextField。我的字体名是“微軟正黑體英文是“Microsoft JhengHei”。我想用粗体和黑色的字体。 初始化字体(3是字体。BOLD|字体。ITALIC和BC是我的基本颜色) 我有一个文本字段变量,并将fontZh设置为setFont。 pdf结果只有字体样式、大小和颜色是正确的。但这种大胆和不自然是行不通的。

  • $format = new \Vtiful\Kernel\Format($fileHandle); $boldStyle = $format->bold()->toResource();

  • 我是pdfbox和java的新手——试图复制带有徽标格式等的pdf信件。我需要在句子中使用混合字体(粗体)。目前正在使用WordUtils追加段落字符串。包装,然后开始。文本等进行分析和显示(drawString有删除线,无法选择此项-我确实找到了使用它的多种字体的信息)。由于字段值在文本和长度上会有所不同,我不能简单地搜索、拆分和更改字体以显示。无法使用标签来实现这一点(天哪,我已经尝试了我能想

  • 使用PDFBox提取PDF时,有没有办法保留文本格式? 我有一个解析PDF文档以获取信息的程序。当PDF的新版本发布时,作者使用粗体或斜体字文本来指示新信息,并在指示省略的文本中删除或加下划线。在PDFbox中使用基本的Stripper类返回所有文本,但格式被删除,因此我无法判断文本是新的还是省略的。我目前正在使用下面的项目示例代码: 如果我简单地将PDF文本复制并粘贴到保存格式的rich tex

  • 问题内容: 我试着做 但这并没有使它大胆。它只是看起来间隔开了。 那是错误的方式吗? 问题答案: 您将问题标记为已接受,但评论指出该问题无效。我同意它不起作用。 不是字体。它是字体的属性。如果要更改字体,可以执行以下操作: 我添加斜体只是为了向您展示代码的工作原理,因为在我看来,在Metal LAF中,默认设置是粗体。