⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdfsurveyservices.java

📁 Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * $Id: $ * * Copyright 2005-2006 The Apache Software Foundation *  * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at *  * http://www.apache.org/licenses/LICENSE-2.0 *  * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */package org.ofbiz.content.survey;import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.sql.Timestamp;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Locale;import java.util.Map;import java.util.Set;import org.ofbiz.base.util.Debug;import org.ofbiz.base.util.GeneralException;import org.ofbiz.base.util.UtilDateTime;import org.ofbiz.base.util.UtilMisc;import org.ofbiz.base.util.UtilValidate;import org.ofbiz.content.data.DataResourceWorker;import org.ofbiz.entity.GenericDelegator;import org.ofbiz.entity.GenericEntityException;import org.ofbiz.entity.GenericValue;import org.ofbiz.entity.util.ByteWrapper;import org.ofbiz.entity.util.EntityUtil;import org.ofbiz.service.DispatchContext;import org.ofbiz.service.GenericServiceException;import org.ofbiz.service.LocalDispatcher;import org.ofbiz.service.ModelService;import org.ofbiz.service.ServiceUtil;import com.lowagie.text.Chunk;import com.lowagie.text.Document;import com.lowagie.text.DocumentException;import com.lowagie.text.Paragraph;import com.lowagie.text.pdf.AcroFields;import com.lowagie.text.pdf.PdfDictionary;import com.lowagie.text.pdf.PdfName;import com.lowagie.text.pdf.PdfObject;import com.lowagie.text.pdf.PdfReader;import com.lowagie.text.pdf.PdfStamper;import com.lowagie.text.pdf.PdfWriter;/** * PdfSurveyServices Class *  * @author <a href="mailto:byersa@automationgroups.com">Al Byers</a> * @author <a href="mailto:jonesde@ofbiz.org">David E. Jones</a> * @version $Rev: 5462 $ * @since 3.2 */public class PdfSurveyServices {        public static final String module = PdfSurveyServices.class.getName();    /**     *      */    public static Map buildSurveyFromPdf(DispatchContext dctx, Map context) {        GenericDelegator delegator = dctx.getDelegator();        LocalDispatcher dispatcher = dctx.getDispatcher();        GenericValue userLogin = (GenericValue) context.get("userLogin");        Timestamp nowTimestamp = UtilDateTime.nowTimestamp();        String surveyId = null;        try {            String surveyName = (String) context.get("surveyName");            ByteArrayOutputStream os = new ByteArrayOutputStream();            ByteWrapper byteWrapper = getInputByteWrapper(context, delegator);            PdfReader pdfReader = new PdfReader(byteWrapper.getBytes());            PdfStamper pdfStamper = new PdfStamper(pdfReader, os);            AcroFields acroFields = pdfStamper.getAcroFields();            HashMap acroFieldMap = acroFields.getFields();                        String contentId = (String) context.get("contentId");            GenericValue survey = null;            surveyId = (String) context.get("surveyId");            if (UtilValidate.isEmpty(surveyId)) {                surveyId = delegator.getNextSeqId("Survey");                survey = delegator.makeValue("Survey", UtilMisc.toMap("surveyName", surveyName));                survey.set("surveyId", surveyId);                survey.set("allowMultiple", "Y");                survey.set("allowUpdate", "Y");                survey.create();            }                        // create a SurveyQuestionCategory to put the questions in            Map createCategoryResultMap = dispatcher.runSync("createSurveyQuestionCategory",                     UtilMisc.toMap("description", "From AcroForm in Content [" + contentId + "] for Survey [" + surveyId + "]", "userLogin", userLogin));            String surveyQuestionCategoryId = (String) createCategoryResultMap.get("surveyQuestionCategoryId");                        pdfStamper.setFormFlattening(true);            Iterator i = acroFieldMap.keySet().iterator();            while (i.hasNext()) {                String fieldName = (String) i.next();                AcroFields.Item item = acroFields.getFieldItem(fieldName);                int type = acroFields.getFieldType(fieldName);                String value = acroFields.getField(fieldName);                Debug.logInfo("fieldName:" + fieldName + "; item: " + item + "; value: " + value, module);                GenericValue surveyQuestion = delegator.makeValue("SurveyQuestion", UtilMisc.toMap("question", fieldName));                String surveyQuestionId = delegator.getNextSeqId("SurveyQuestion");                surveyQuestion.set("surveyQuestionId", surveyQuestionId);                surveyQuestion.set("surveyQuestionCategoryId", surveyQuestionCategoryId);                if (type == AcroFields.FIELD_TYPE_TEXT) {                    surveyQuestion.set("surveyQuestionTypeId", "TEXT_SHORT");                } else if (type == AcroFields.FIELD_TYPE_RADIOBUTTON) {                    surveyQuestion.set("surveyQuestionTypeId", "OPTION");                } else if (type == AcroFields.FIELD_TYPE_LIST || type == AcroFields.FIELD_TYPE_COMBO) {                    surveyQuestion.set("surveyQuestionTypeId", "OPTION");                    // TODO: handle these specially with the acroFields.getListOptionDisplay (and getListOptionExport?)                    String[] listOptionDisplayArray = acroFields.getListOptionDisplay(fieldName);                    String[] listOptionExportArray = acroFields.getListOptionExport(fieldName);                    Debug.logInfo("listOptionDisplayArray: " + listOptionDisplayArray + "; listOptionExportArray: " + listOptionExportArray, module);                } else {                    surveyQuestion.set("surveyQuestionTypeId", "TEXT_SHORT");                    Debug.logWarning("Building Survey from PDF, fieldName=[" + fieldName + "]: don't know how to handle field type: " + type + "; defaulting to short text", module);                }                                // ==== create a good sequenceNum based on tab order or if no tab order then the page location                                Integer tabPage = (Integer) item.page.get(0);                Integer tabOrder = (Integer) item.tabOrder.get(0);                Debug.logInfo("tabPage=" + tabPage + ", tabOrder=" + tabOrder, module);                                //array of float  multiple of 5. For each of this groups the values are: [page, llx, lly, urx, ury]                float[] fieldPositions = acroFields.getFieldPositions(fieldName);                float fieldPage = fieldPositions[0];                float fieldLlx = fieldPositions[1];                float fieldLly = fieldPositions[2];                float fieldUrx = fieldPositions[3];                float fieldUry = fieldPositions[4];                Debug.logInfo("fieldPage=" + fieldPage + ", fieldLlx=" + fieldLlx + ", fieldLly=" + fieldLly + ", fieldUrx=" + fieldUrx + ", fieldUry=" + fieldUry, module);                Long sequenceNum = null;                if (tabPage != null && tabOrder != null) {                    sequenceNum = new Long(tabPage.intValue() * 1000 + tabOrder.intValue());                    Debug.logInfo("tabPage=" + tabPage + ", tabOrder=" + tabOrder + ", sequenceNum=" + sequenceNum, module);                } else if (fieldPositions.length > 0) {                    sequenceNum = new Long((long) fieldPage * 10000 + (long) fieldLly * 1000 + (long) fieldLlx);                    Debug.logInfo("fieldPage=" + fieldPage + ", fieldLlx=" + fieldLlx + ", fieldLly=" + fieldLly + ", fieldUrx=" + fieldUrx + ", fieldUry=" + fieldUry + ", sequenceNum=" + sequenceNum, module);                }                                // TODO: need to find something better to put into these fields...                String annotation = null;                Iterator widgetIter = item.widgets.iterator();                while (widgetIter.hasNext()) {                    PdfDictionary dict = (PdfDictionary) widgetIter.next();                                        // if the "/Type" value is "/Annot", then get the value of "/TU" for the annotation                                        /* Interesting... this doesn't work, I guess we have to iterate to find the stuff...                    PdfObject typeValue = dict.get(new PdfName("/Type"));                    if (typeValue != null && "/Annot".equals(typeValue.toString())) {                        PdfObject tuValue = dict.get(new PdfName("/TU"));                        annotation = tuValue.toString();                    }                    */                                        PdfObject typeValue = null;                    PdfObject tuValue = null;                                        Set dictKeys = dict.getKeys();                    Iterator dictKeyIter = dictKeys.iterator();                    while (dictKeyIter.hasNext()) {                        PdfName dictKeyName = (PdfName) dictKeyIter.next();                        PdfObject dictObject = dict.get(dictKeyName);                                                if ("/Type".equals(dictKeyName.toString())) {                            typeValue = dictObject;                        } else if ("/TU".equals(dictKeyName.toString())) {                            tuValue = dictObject;                        }                        //Debug.logInfo("AcroForm widget fieldName[" + fieldName + "] dictKey[" + dictKeyName.toString() + "] dictValue[" + dictObject.toString() + "]", module);                    }                    if (tuValue != null && typeValue != null && "/Annot".equals(typeValue.toString())) {                        annotation = tuValue.toString();                    }                }                                surveyQuestion.set("description", fieldName);                if (UtilValidate.isNotEmpty(annotation)) {                    surveyQuestion.set("question", annotation);                } else {                    surveyQuestion.set("question", fieldName);                }                GenericValue surveyQuestionAppl = delegator.makeValue("SurveyQuestionAppl", UtilMisc.toMap("surveyId", surveyId, "surveyQuestionId", surveyQuestionId));                surveyQuestionAppl.set("fromDate", nowTimestamp);                surveyQuestionAppl.set("externalFieldRef", fieldName);                if (sequenceNum != null) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -