为了账号安全,请及时绑定邮箱和手机立即绑定

iText 7 - 重新生成使用 Adob​​e 创建的条码字段

iText 7 - 重新生成使用 Adob​​e 创建的条码字段

千万里不及你 2023-05-17 16:52:56
我来找你是因为我有一个问题!我使用 Adobe Acrobat 在 acroform PDF 中创建了条码。我可以将新值设置为 barCode 字段,但我无法使用新值生成新的“外观”。我怎样才能做到这一点 ?这就是我现在做的没有成功......:PdfFormField field = fields.get("QRCODE");field.setValue(this.generateXMLDataMatrix(),false);form = form.setNeedAppearances(true);form.flattenFields();pdf.close();    所以现在,我仍然拥有在 Adobe Acrobat 中创建的默认外观 :(谢谢你的帮助 !:)
查看完整描述

2 回答

?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

您将必须手动生成字段外观。这是一个如何为 QR 码执行此操作的示例:


PdfFormField field = fields.get("QRCODE");

// Get the annotation. If you might have multiple representations of the same field across the document the just iterate over all widgets

PdfWidgetAnnotation annotation = field.getWidgets().get(0);

// This class will help us draw the barcode

BarcodeQRCode qrCode = new BarcodeQRCode(this.generateXMLDataMatrix());

// Get the number of rectangles constituting the barcode

Rectangle size = qrCode.getBarcodeSize();

// Creating a new FormXObject that will become our apperance. Set the dimension(bbox) of the current appearance

PdfFormXObject newAppearance = new PdfFormXObject(annotation.getAppearanceObject(PdfName.N).getAsRectangle(PdfName.BBox));

// Helper class to draw on FormXObject

PdfCanvas barcodeCanvas = new PdfCanvas(newAppearance, pdfDocument);

// Calculating the side of the smaller rectangle in the barcode

float side = Math.min(annotation.getRectangle().toRectangle().getHeight() / size.getHeight(),

        annotation.getRectangle().toRectangle().getWidth() / size.getWidth());

// Draw the barcode on the XObject

qrCode.placeBarcode(barcodeCanvas, ColorConstants.BLACK, side);

// Set appearance to the newly generated one

annotation.setAppearance(PdfName.N, newAppearance.getPdfObject());


查看完整回答
反对 回复 2023-05-17
?
12345678_0001

TA贡献1802条经验 获得超5个赞

解决了!这就是我最终做到的:


    //Generate BarCodedataMatrix

    BarcodeDataMatrix dataMatrix = new BarcodeDataMatrix();

    //Add code to the BarCodedataMatrix

    dataMatrix.setCode(generateXMLDataMatrix());

    dataMatrix.setOptions(BarcodeDataMatrix.DM_AUTO);

    //Add dataMatrix to PDF

    //Create a canvas for the first page

    PdfCanvas canvas = new PdfCanvas(pdf.getFirstPage());

    //Create the PdfFormXObject based on the dataMatrix

    PdfFormXObject object = dataMatrix.createFormXObject(pdf);

    //Add the pdfFormXObject to the canvas at X,Y position

    canvas.addXObject(object,50,660);


查看完整回答
反对 回复 2023-05-17
  • 2 回答
  • 0 关注
  • 135 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信