4

起初:我对可用于创建 pdf 的框架的了解并不是最好的,请在回答时记住这一点。

我需要一个框架/库,我可以使用它在 java 中创建 pdf 文件并(重要!)将文本放置在某些 x 和 y 坐标处。经过大量研究,我体验到我可以通过 iText 实现这一点。

这是一个简单的代码片段,它基本上显示了我现在正在用 iText 中的文本做什么。您可以简单地将其复制到您的编程环境中,您只需要 iText jar(可在此处下载:http: //sourceforge.net/projects/itext/files/latest/download ?source=files )

import java.io.FileOutputStream;

import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;

public class PDFTesting {

public static void main(String[] args) {
    Document document = new Document();
    try {
        PdfWriter writer = PdfWriter.getInstance(document,
                new FileOutputStream("output.pdf"));
        document.open();
        PdfContentByte cb = writer.getDirectContent();

        int x = 100; 
        int y = 500; 

        String text = "Hello"; 

        // now we can place content elements on the page
        BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
        cb.saveState();
        cb.beginText();
        cb.moveText(x, y);
        cb.setFontAndSize(bf, 12);
        cb.showText(text);
        cb.endText();
        cb.restoreState();

    } catch (Exception e) {
    }

    document.close();
}
}

我增加了将我的数据源中的文本添加到此方法的可能性,它真的很好用。结果对我来说看起来很有希望,所以目前我只剩下一项任务:

我需要将特定的背景颜色添加到我正在移动和放置在上面显示的方法中的文本(不是字体颜色!)中。

我的研究没有为我提供有关此任务的任何适合初学者的信息,因此如果您能帮助我解决此问题,我将非常高兴。

如果可能:您能否修改我的示例,为添加的示例文本添加背景颜色?我想我和其他人(将来可能会在阅读此主题时遇到同样的问题)将从中受益最大。

如果您需要更多信息或对我有其他建议,请随时与我联系。

感谢您的每一个回答,并认为您正在与我分享。

4

2 回答 2

3

我找到了我的问题的解决方案。

Chunk textAsChunk = new Chunk(text, textFont);
textAsChunk.setBackground(new BaseColor(120, 200, 50));

ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, new Phrase(textAsChunk), x, y, 0);

你在一个块中定义你的文本(块只是最小的一段文本)并给这个块你的文本以及字体(它还包括你的文本的大小)。在您的块上,您可以设置背景颜色,总体而言,您将使用显示的“showTextAligned”方法将其添加到文档中。

x 和 y 在这里指定坐标,cb 代表 PdfContentByte。

于 2012-08-19T11:59:58.480 回答
-1

使用setBackgroundColor()方法

在此处查看此示例:

http://www.kodejava.org/examples/837.html

于 2012-08-18T17:29:30.733 回答