iText 7 - 重新生成使用 Adobe 创建的条码字段
iText 7 - Regenerate BarCode field created with Adobe
我来找你是因为我有问题!
我使用 Adobe Acrobat 在 acroform PDF 中创建了条码。我可以将新值设置为 barCode 字段,但无法使用新值生成新的 "appearance"。我该怎么做?
这就是我目前的做法,但没有成功......:[=11=]
PdfFormField field = fields.get("QRCODE");
field.setValue(this.generateXMLDataMatrix(),false);
form = form.setNeedAppearances(true);
form.flattenFields();
pdf.close();
所以现在,我仍然使用 Adobe Acrobat 创建的默认外观 :(
谢谢你的帮助! :)
您必须手动生成字段外观。这是一个如何为二维码做的例子:
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());
已解决!这就是我最终做到的:
//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);
我来找你是因为我有问题!
我使用 Adobe Acrobat 在 acroform PDF 中创建了条码。我可以将新值设置为 barCode 字段,但无法使用新值生成新的 "appearance"。我该怎么做?
这就是我目前的做法,但没有成功......:[=11=]
PdfFormField field = fields.get("QRCODE");
field.setValue(this.generateXMLDataMatrix(),false);
form = form.setNeedAppearances(true);
form.flattenFields();
pdf.close();
所以现在,我仍然使用 Adobe Acrobat 创建的默认外观 :(
谢谢你的帮助! :)
您必须手动生成字段外观。这是一个如何为二维码做的例子:
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());
已解决!这就是我最终做到的:
//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);