我正在使用ItextSharp,因为我填充了表单字段,因为某些字段是条形码,我在模板级别声明为文本,我将替换为Image。
代码:
private void addBarcode(PdfStamper stamper, AcroFields fields, String barcodeValue, String fieldName) throws Exception
{
try
{
PdfContentByte overContent = stamper.getOverContent(1);
Barcode barcode = new Barcode39();
barcode.setCode(barcodeValue);
barcode.setFont(null);
barcode.setBarHeight(10f);
Image image39 = barcode.createImageWithBarcode(overContent, BaseColor.BLACK, null);
List<FieldPosition> barcodeArea = fields.getFieldPositions(fieldName);
if (CollectionUtils.isEmpty(barcodeArea))
{
return;
}
Rectangle rect = barcodeArea.get(0).position;
image39.scaleToFit(rect.getWidth(), rect.getHeight());
image39.setAbsolutePosition(rect.getLeft() + (rect.getWidth() - image39.getScaledWidth()) / 2, rect.getBottom() + (rect.getHeight() - image39.getScaledHeight()) / 2);
overContent.addImage(image39);
} catch (Exception ex)
{
LOGGER.error(ex.getMessage(), ex);
throw ex;
}
}
相同的代码工作方式不同(我在三个地方调用相同的代码)。图像附在下面。第三个很好,其他两个都不行,灰色条形码即将到来 的 IMAGE1:
的图像2:
的的Image3:
我也试过stamper.getUnderContent(1);
。
感谢。
答案 0 :(得分:0)
设置不透明度。此问题已解决。
<强>代码:强>
PdfGState state = new PdfGState();
state.setFillOpacity(100f);
overContent.setGState(state);