Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iText 5到iText 7代码转换。列表类型字段_Itext_Itext7 - Fatal编程技术网

iText 5到iText 7代码转换。列表类型字段

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 )

我有下面的iText 5示例用于pdf修改

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);
     }
   }                            
}