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

好吧,我一直在使用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();

以上是 PDFBOX Same Stream具有粗体和普通文本 的全部内容, 来源链接: utcz.com/qa/404020.html

回到顶部