iText 5到iText 7代码转换。列表类型字段
我有下面的iText 5示例用于pdf修改iText 5到iText 7代码转换。列表类型字段,itext,itext7,Itext,Itext7,我有下面的iText 5示例用于pdf修改 public static void modifyPdfForRequestMap ( HashMap<String, String> fieldValuesMap, String srcPdfFile, String outFile, boolean formFlatten, boolean xfaForm, boolean fieldManipulateFlag )
public static void modifyPdfForRequestMap
(
HashMap<String, String> fieldValuesMap,
String srcPdfFile,
String outFile,
boolean formFlatten,
boolean xfaForm,
boolean fieldManipulateFlag
)
{
PdfReader reader = null;
PdfStamper stamper= null;
HashMap<String, String> modifiedFieldNamesMap = null;
if(fieldValuesMap != null)
{
try
{
reader = new PdfReader(srcPdfFile);
if(fieldManipulateFlag)
{
AcroFields fields = reader.getAcroFields();
String[] fieldNames = null;
if(fields != null)
{
Map<String, Item> formFields = fields.getFields();
if(formFields != null)
{
Set<String> fldNames = formFields.keySet();
fieldNames = new String[fldNames.size()];
int i =0;
for (String fldName : fldNames)
{
fieldNames[i]=(fldName);
i++;
}
}
}
if(fieldManipulateFlag)
{
modifiedFieldNamesMap = new HashMap<String, String>();
if(fieldValuesMap != null && !fieldValuesMap.isEmpty()
&& fieldNames != null && fieldNames.length > 0)
{
Iterator<String> keys = fieldValuesMap.keySet().iterator();
while (keys.hasNext())
{
String key = (String) keys.next();
String value = (String)fieldValuesMap.get(key);
int fieldsCount = fieldNames.length;
for(int i=0; i <fieldsCount; i++)
{
String fieldName = fieldNames[i];
if(fieldName != null
&& fieldName.indexOf("."+key+"[") != -1)
{
modifiedFieldNamesMap.put(fieldName, value);
}
else if(fieldName != null && fieldName.equals(key))
{
modifiedFieldNamesMap.put(key, value);
}
}
}
}
}
else
{
modifiedFieldNamesMap = fieldValuesMap;
}
}
else
{
modifiedFieldNamesMap = fieldValuesMap;
}
DeleteFile(outFile);
stamper = new PdfStamper(reader, new FileOutputStream(outFile));
if(stamper != null )
{
AcroFields form = stamper.getAcroFields();
XfaForm xfa = form.getXfa();
if(xfa != null && xfa.isXfaPresent() && !xfaForm)
{
form.removeXfa();
}
if(form != null)
{
HashMap<String, Item> fields = (HashMap<String, Item>) form.getFields();
Iterator<String> iter = modifiedFieldNamesMap.keySet().iterator();
while (iter.hasNext())
{
String fieldName = (String) iter.next();
String fieldValue = modifiedFieldNamesMap.get(fieldName);
int fieldType = form.getFieldType(fieldName);
if(fields != null && fields.containsKey(fieldName) && fieldValue != null)
{
if(fieldType == AcroFields.FIELD_TYPE_LIST && fieldValue.indexOf(",") != -1)
{
form.setListOption(fieldName, fieldValue.split(","),fieldValue.split(","));
}
else
{
form.setField(fieldName, fieldValue);
}
}
}
stamper.setFormFlattening(formFlatten);
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
catch (DocumentException e)
{
e.printStackTrace();
}
finally
{
try
{
if(stamper != null)
{
stamper.close();
}
if(reader != null)
{
reader.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
else if(formFlatten)
{
try
{
try
{
reader = new PdfReader(srcPdfFile);
}
catch (IOException e)
{
e.printStackTrace();
}
try
{
stamper = new PdfStamper(reader, new FileOutputStream(outFile));
}
catch (Exception e)
{
e.printStackTrace();
}
stamper.setFormFlattening(formFlatten);
}
finally
{
try
{
if(stamper != null)
{
stamper.close();
}
if(reader != null)
{
reader.close();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
modifiedFieldNamesMap = null;
}
提前感谢您的帮助。您看到了这方面的任何特殊问题吗?iText 7中有许多更改(例如,在iText7中找不到acroFields.getFieldType()和acroFields.FIELD_TYPE_列表)。我正在尝试将以下函数转换为iText 7,并面临一些问题,无法在iText 5中为iText 7找到替代方法来重建此函数。您如何看待在他们的网站上遵循a以了解差异?@HappyRahul请不要在stackoverflow上要求其他人为您编写所有代码,而是告诉我们具体问题。您说“无法在iText 5中为iText 7找到替代方法来重建此函数”。特别是哪种方法?你肯定不想告诉我们你没有发现任何类和方法,是吗?@mkl我已经编辑了我的问题。确切的问题是添加列表和简单字段类型。我已为此标记了部分代码。(/*****/)。该节上面的代码将转换为iText 7。我发布了整个iText5代码,所以它很容易理解,但在发布Stackoverflow问题时,我会记住你们的建议。谢谢。您看到了这方面的任何特殊问题吗?iText 7中有很多更改(例如,iText7中找不到acroFields.getFieldType()和acroFields.FIELD_TYPE_列表)。我正在尝试将以下函数转换为iText 7,并面临一些问题,无法在iText 5中为iText 7找到替代方法来重建此函数。您如何看待在他们的网站上遵循a以了解差异?@HappyRahul请不要在stackoverflow上要求其他人为您编写所有代码,而是告诉我们具体问题。您说“无法在iText 5中为iText 7找到替代方法来重建此函数”。特别是哪种方法?你肯定不想告诉我们你没有发现任何类和方法,是吗?@mkl我已经编辑了我的问题。确切的问题是添加列表和简单字段类型。我已为此标记了部分代码。(/*****/)。该节上面的代码将转换为iText 7。我发布了整个iText5代码,所以它很容易理解,但在发布Stackoverflow问题时,我会记住你们的建议。谢谢你。
PdfFormField field = form.getField( fieldName );
int fieldType = form.getFieldType (fieldName);
if( fields != null && fields.containsKey(fieldName) && fieldValue != null )
{
if(fieldValue.indexOf(",") != -1 && fieldType == AcroFields.FIELD_TYPE_LIST )
{
form.setListOption(fieldName, fieldValue.split(","),fieldValue.split(","));
}
else
{
form.setField(fieldName, fieldValue);
}
}
}