我想使用JPod库将图像添加到生成的pdf中。
JPod DrawInLineImagePlain示例(在https://github.com/born2snipe/learning-jpod/blob/master/not-in-repo/examples/de/intarsys/pdf/example/content/DrawInlineImagePlain.java)建议添加这样的图像(假设先前已定义了CSCreator创建者):
// image bytes
private byte[] data = new byte[] { (byte) 170, (byte) 170, (byte) 170,
(byte) 170, (byte) 170, (byte) 170, (byte) 170, (byte) 170,
(byte) 170, (byte) 170, (byte) 170, (byte) 170, (byte) 170,
(byte) 170, (byte) 170, (byte) 170, (byte) 170, (byte) 170,
(byte) 170, (byte) 170, (byte) 170, (byte) 170, (byte) 170,
(byte) 170, (byte) 170, (byte) 170, (byte) 170, (byte) 170,
(byte) 170, (byte) 170, (byte) 170, (byte) 170 };
creator.transform(400, 0, 0, 400, 100, 100);
creator.perform("BI");
creator.perform("/W 16 /H 16 /BPC 1 /CS /G ID");
COSString stringData = COSString.create(data);
creator.perform("EI", stringData);
creator.close();
但是,我不能这样做,因为JPod不再支持perform()。
似乎inlineImage()应该能够嵌入图像。 JPod文档描述了inlineImage(),如下所示:
描绘内联图像。 PDF图形操作员" BI"," ID"," EI"。
这让我假设inlineImage()可以编码DrawInLineImagePlain示例中的所有图形运算符,还可以使用以下信息对宽度,高度,每个组件的位数,颜色空间和图像数据进行编码。 PDImage参数。
所以我尝试将这个例子并行化(再次假设CSCreator创建者先前已定义):
// image bytes
byte[] data = new byte[] { (byte) 170, (byte) 170, (byte) 170,
(byte) 170, (byte) 170, (byte) 170, (byte) 170, (byte) 170,
(byte) 170, (byte) 170, (byte) 170, (byte) 170, (byte) 170,
(byte) 170, (byte) 170, (byte) 170, (byte) 170, (byte) 170,
(byte) 170, (byte) 170, (byte) 170, (byte) 170, (byte) 170,
(byte) 170, (byte) 170, (byte) 170, (byte) 170, (byte) 170,
(byte) 170, (byte) 170, (byte) 170, (byte) 170 };
PDImage imageData = (PDImage) PDImage.META.createNew();
imageData.setBytes(data);
imageData.setHeight(16);
imageData.setWidth(16);
imageData.setBitsPerComponent(1);
imageData.setColorSpace(PDColorSpace.getNamed(PDColorSpace.CN_CS_DeviceGray));
creator.inlineImage(imageData);
creator.close();
遗憾的是,这会产生一个空白的PDF。我需要更改什么才能使图像显示在PDF中?
我猜测文档或页面设置没有任何问题,因为我可以将此图像嵌入替换为文本或线条图,并且文本或行将在PDF中正常显示。< / p>
答案 0 :(得分:0)
inlineImage
未在CSCreator中实施。使用addOperand
直接向内容流添加内容。您的图片代码为:
content.addOperation(new CSOperation(CSOperators.CSO_BI));
CSOperation operationID = new CSOperation(CSOperators.CSO_ID);
operationID.addOperand(PDImage.DK_W);
operationID.addOperand(COSInteger.create(16));
operationID.addOperand(PDImage.DK_H);
operationID.addOperand(COSInteger.create(16));
operationID.addOperand(PDImage.DK_BPC);
operationID.addOperand(COSInteger.create(1));
operationID.addOperand(PDImage.DK_CS);
operationID.addOperand(PDColorSpace.CN_CS_G);
content.addOperation(operationID);
CSOperation operationEI = new CSOperation(CSOperators.CSO_EI);
operationEI.addOperand(COSString.create(data));
content.addOperation(operationEI);
或者使用doImage