gpt4 book ai didi

java - 使用什么来生成将包含动态生成的条形码(Java)的pdf文档?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:01:12 26 4
gpt4 key购买 nike

我的要求是生成包含任意文本和条形码的 pdf 文档。我有相关的 question这解决了 pdf 生成部分,但在这里我想知道如何在 Java 中将条形码合并到 pdf 中。

到目前为止,我已经找到关于 barcode4j 如何使用 Apache FOP 的清晰解释:Instructions for the Apache FOP extension

但看起来 XSL-FO 不是满足我的要求的主要选项,因为我更喜欢使用 pdf 表单(使用 iText 或 PDFBox 或类似的)。同样,这还不是最终结果。

您在 pdf 中使用图像或字体作为条形码吗?除了 pdf API 之外,我还应该期待哪些依赖项(字体、库)?

最佳答案

我成功地使用 PDFBox 和 Barbecue 将条形码添加到 PDF。 Barbecue 提供了 Output 接口(interface),可以自己绘制条形码。我以 drawBar() 转换为对 PDPageContentStream.fillRect() 的调用的方式实现了这个接口(interface)。

现在将条形码添加到 PDF 归结为:

Barcode barcode = BarcodeFactory.createCode128(text);
barcode.output(new PDFBoxOutput(pageContentStream, startX, startY, height));

PDFBoxOutput 类如下所示:

import java.awt.Color;
import java.io.IOException;

import net.sourceforge.barbecue.output.LabelLayout;
import net.sourceforge.barbecue.output.Output;
import net.sourceforge.barbecue.output.OutputException;

import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;

public class PDFBoxOutput implements Output {

/** The widths and heights from Barbecue are multipplied with this scalar to get the widths and heights for PDFBox. */
public final static float SCALAR = 0.5f;

private final PDPageContentStream stream;
private final float startX;
private final float startY;
private final float height;
private boolean toggleDrawingColor;

PDFBoxOutput(PDPageContentStream stream, float startX, float startY, float height) {
this.stream = stream;
this.startX = startX;
this.startY = startY;
this.height = height;
}

@Override
public void beginDraw() throws OutputException {}

@Override
public int drawBar(int x, int y, int width, int height, boolean paintWithForegroundColor) throws OutputException {
if (paintWithForegroundColor == !toggleDrawingColor) {
try {
stream.setLineWidth(0.0f);
stream.setStrokingColor(Color.BLACK);
stream.fillRect(startX + SCALAR * x, startY - SCALAR * y, SCALAR * width, this.height);
stream.stroke();
} catch (IOException e) {
throw new OutputException(e);
}
}
return width;
}

@Override
public int drawText(String text, LabelLayout layout) throws OutputException {
return 0;
}

@Override
public void endDraw(int width, int height) throws OutputException {}

@Override
public void paintBackground(int x, int y, int width, int height) {}

@Override
public void toggleDrawingColor() {
toggleDrawingColor = !toggleDrawingColor;
}

}

关于java - 使用什么来生成将包含动态生成的条形码(Java)的pdf文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6627712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com