發表於 程式分享

使用word書籤 ,convert word to pdf

1.word / 書籤 => 設定書籤名稱
pic1
2.範例程式碼

   private ByteArrayOutputStream gen2ImgFile(int applySeqno_in, String kindDesc, OLServiceEntry olServiceEntry,
            StringBuffer docFileName, OLClientSeal olClientSeal1, OLClientSeal olClientSeal2) {
        //0.Start
        InputStream in = OLPdfClientShowAction.class.getResourceAsStream(templateImgFileName);          
        IXDocReport report = null;
        IContext context = null;
        try {
            //0.Init
            report = XDocReportRegistry.getRegistry().loadReport(in, TemplateEngineKind.Velocity);
            context = report.createContext();
            
            OLPdfProject project = new OLPdfProject(kindDesc + "_" + applySeqno_in);
            context.put("project", project);
            context.put("client.title", kindDesc);
            FieldsMetadata metadata = report.createFieldsMetadata();    
            
            //1.第1張圖
            if (olClientSeal1 != null) {
                logger.info("fileName-1: " + olClientSeal1.getDocFileName());
                String iPageTag1 = "pic1";
                    
                //1-1.註冊圖片
                metadata.addFieldAsImage(iPageTag1);
                    
                //1-2.設定圖片 
                byte[] docSrc1 = olClientSeal1.getDocSrc();
                byte[] decodeBytes1 = docSrc1;
                if (olClientSeal1.getSrcKind() == 1) {  //base64
                    String base64Str1 = new String(docSrc1);            
                    String tmpBase64Str1 = base64Str1.substring(base64Str1.indexOf(",") + 1);
                    decodeBytes1 = DatatypeConverter.parseBase64Binary(tmpBase64Str1);
                }
                        
                IImageProvider pic1 = new ByteArrayImageProvider(decodeBytes1);
                pic1.setWidth(300f);
                pic1.setResize(true);
                        
                context.put(iPageTag1, pic1);
            }
                    
            //2.第2張圖
            if (olClientSeal2 != null) {
                logger.info("fileName-2: " + olClientSeal2.getDocFileName());
                String iPageTag2 = "pic2";
                
                //2-1.註冊圖片
                metadata.addFieldAsImage(iPageTag2);
                
                //2-2.設定圖片      
                byte[] docSrc2 = olClientSeal2.getDocSrc();
                byte[] decodeBytes2 = docSrc2;
                if (olClientSeal2.getSrcKind() == 1) {  //base64
                    String base64Str2 = new String(docSrc2);            
                    String tmpBase64Str2 = base64Str2.substring(base64Str2.indexOf(",") + 1);
                    decodeBytes2 = DatatypeConverter.parseBase64Binary(tmpBase64Str2);
                }
                
                IImageProvider pic2 = new ByteArrayImageProvider(decodeBytes2);
                pic2.setWidth(300f);
                pic2.setResize(true);
                    
                context.put(iPageTag2, pic2);
            }
            
            //3.Generate report by merging Java model with the Docx
            ByteArrayOutputStream outPdf = new ByteArrayOutputStream();
            PdfOptions pdfOptions = PdfOptions.create();
            FontFactory.registerDirectory(application.getRealPath("/") + "WEB-INF" + File.separator 
                        + "classes" + File.separator + "fonts" + File.separator);
            Options options = Options.getTo(ConverterTypeTo.PDF).via(ConverterTypeVia.XWPF).subOptions(pdfOptions);                 
            report.convert(context, options, outPdf);
                
            //8.顯示檔案
            if (docFileName != null)
                docFileName.append(java.net.URLEncoder.encode(OLPdfKind.Kind_2.getDesc() + "_" + applySeqno_in + ".pdf", "UTF-8"));
            return outPdf;
        } catch (IOException e) {
            logger.error("gen2ImgFile() IOException error : " + e.getMessage());
            return null;
        } catch (XDocReportException e) {
            logger.error("gen2ImgFile() XDocReportException error : " + e.getMessage());
            return null;
        }       
    }

發表留言