找回密码
 立即注册

QQ登录

只需一步,快速开始

KearneyKang 讲师达人认证 悬赏达人认证
超级版主   /  发表于:2020-9-21 10:06  /   查看:2630  /  回复:1
本帖最后由 KearneyKang 于 2021-5-13 15:25 编辑

ActiveReports是一款轻量级纯前端的报表控件,适合任何web项目,但是在报表导出的时候由于缺少对应的字体引用,会存在导出PDF乱码的情况。下面我们就来说说如何解决导出PDF乱码的问题
第一种办法:
1、首先在新建一个font文件,放入对应的字体文件配置放在 "fontsConfig.json”中, 这里我们使用 “微软雅黑”为例
微软雅黑字体:SimHei.ttf


  1. {
  2.         "path": "",
  3.         "descriptors": [
  4.                 {
  5.                         "name": "微软雅黑",
  6.                         "locals": [
  7.                                 "微软雅黑",
  8.                                 "MicrosoftYaHei"
  9.                         ],
  10.                         "source": "fonts/SimHei.ttf"
  11.                 },
  12.                 {
  13.                         "name": "微软雅黑 Light"
  14.                         

  15.                 },
  16.                 {
  17.                         "name": "等线"
  18.                 },
  19.                 {
  20.                         "name": "等线 Light"
  21.                         
  22.                 },
  23.                 {
  24.                         "name": "宋体",
  25.                         "source": "fonts/SimHei.ttf"


  26.                 },
  27.                 {
  28.                         "name": "仿宋"
  29.                 },
  30.                 {
  31.                         "name": "新宋体"
  32.                 },
  33.                 {
  34.                         "name": "幼圆"
  35.                 },
  36.                 {
  37.                         "name": "楷体"
  38.                 },
  39.                 {
  40.                         "name": "隶书"
  41.                 },
  42.                 {
  43.                         "name": "黑体",
  44.                         "source": "fonts/SimHei.ttf"
  45.                 },
  46.                 {
  47.                         "name": "Arial"
  48.                 },
  49.                 {
  50.                         "name": "Arial Black"
  51.                 },
  52.                 {
  53.                         "name": "Comic Sans MS"
  54.                 },
  55.                 {
  56.                         "name": "Courier New"
  57.                 },
  58.                 {
  59.                         "name": "Geneva"
  60.                 },
  61.                 {
  62.                         "name": "Georgia"
  63.                 },
  64.                 {
  65.                         "name": "Helvetica"
  66.                 },
  67.                 {
  68.                         "name": "Impact"
  69.                 },
  70.                 {
  71.                         "name": "Lucida Console"
  72.                 },
  73.                 {
  74.                         "name": "Meiryo"
  75.                 },
  76.                 {
  77.                         "name": "Meiryo UI"
  78.                 },
  79.                 {
  80.                         "name": "MingLiU"
  81.                 },
  82.                 {
  83.                         "name": "MingLiU-ExtB"
  84.                 },
  85.                 {
  86.                         "name": "MS Gothic"
  87.                 },
  88.                 {
  89.                         "name": "MS Mincho"
  90.                 },
  91.                 {
  92.                         "name": "MS PGothic"
  93.                 },
  94.                 {
  95.                         "name": "MS PMincho"
  96.                 },
  97.                 {
  98.                         "name": "MS Song"
  99.                 },
  100.                 {
  101.                         "name": "MS UI Gothic"
  102.                 },
  103.                 {
  104.                         "name": "NSimSun"
  105.                 },
  106.                 {
  107.                         "name": "Osaka"
  108.                 },
  109.                 {
  110.                         "name": "PMingLiU"
  111.                 },
  112.                 {
  113.                         "name": "PMingLiU-ExtB"
  114.                 },
  115.                 {
  116.                         "name": "SimSun"
  117.                 },
  118.                 {
  119.                         "name": "SimSun-ExtB"
  120.                 },
  121.                 {
  122.                         "name": "Song"
  123.                 },
  124.                 {
  125.                         "name": "Tahoma"
  126.                 },
  127.                 {
  128.                         "name": "Times New Roman"
  129.                 },
  130.                 {
  131.                         "name": "Trebuchet MS"
  132.                 },
  133.                 {
  134.                         "name": "Verdana"
  135.                 },
  136.                 {
  137.                         "name": "Yu Gothic"
  138.                 }
  139.         ]
  140. }
复制代码
2、打开src中的App.vue文件
导入该方法:
  1. import { FontStore } from "@grapecity/activereports/core";
复制代码


添加该方法进行字体config文件配置
  1. FontStore.registerFonts("/fonts/fontsConfig.json");
复制代码
详细代码如下:
  1. <template>
  2. <div>
  3. <button @click="expExcel">Excel</button>
  4. <button @click="expPDF">PDF1</button>
  5. </div>
  6.   <div id="viewer-host">
  7.     <JSViewer v-bind:availableExports="['pdf', 'xlsx', 'html']" v-bind:report="{ Uri: 'design-report.rdlx-json' }"></JSViewer>
  8.   </div>
  9. </template>

  10. <script>
  11.     import { Viewer } from "@grapecity/activereports-vue";
  12.     import "@grapecity/activereports/styles/ar-js-ui.css";
  13.     import "@grapecity/activereports/styles/ar-js-ui.css";
  14.     import "@grapecity/activereports/styles/ar-js-viewer.css";
  15.     import { XlsxExport} from '@grapecity/activereports';  
  16.     import { Core, PdfExport } from "@grapecity/activereports";
  17.     import { FontStore } from "@grapecity/activereports/core";
  18. export default {
  19.   name: "App",
  20.   components: {
  21.     JSViewer: Viewer,
  22.   },
  23. methods: {
  24. expExcel() {  
  25.         var ARJS = Core;
  26.         var Excel = XlsxExport;
  27.         var settings = {
  28.             sheetName: '快递单',
  29.             pageSettings: {
  30.                 size: 'A4',
  31.                 orientation: 'portrait'
  32.             }
  33.           }
  34.         var pageReport = new ARJS.PageReport();
  35.         pageReport.load('design-report.rdlx-json')
  36.             .then(function () { return pageReport.run() })
  37.             .then(function (pageDocument) { return Excel.exportDocument(pageDocument, settings) })
  38.               .then(function (result) { result.download('arjs-excel') });
  39.       },
  40. expPDF() {
  41.           console.log('exportReport()--type:');      
  42.           var ARJS = Core;
  43.           var PDF = PdfExport;
  44.           var settings = {
  45.             info: {
  46.                 title: '快递单',
  47.                 author: 'GrapeCity inc.',
  48.             },
  49.             pdfVersion:"1.7"
  50.         }
  51.         var pageReport = new ARJS.PageReport();
  52.         pageReport.load('/design-report.rdlx-json')
  53.             .then(function() { return pageReport.run() })
  54.             .then(function(pageDocument) { return PDF.exportDocument(pageDocument, settings) })
  55.             .then(function(result) { result.download('arjs-pdf') });
  56.       }      
  57. }
  58. };
  59. FontStore.registerFonts("/fonts/fontsConfig.json");
  60. </script>
  61. <style>
  62. #viewer-host {
  63.   width: 100%;
  64.   height: 100vh;
  65. }
  66. </style>
复制代码
3、预览结果如下:



第二种办法

1、首先在新建一个font文件,放入对应的字体文件 这里我们使用 “微软雅黑”为例
微软雅黑字体:SimHei.ttf

2、打开src中的App.vue文件


3、进行字体文件的配置(.ttf的字体文件)
    整体详细代码如下:
  1. <template>

  2.       <div id="app" style="height: 600px">
  3.       <GcArViewer ref="control" v-bind:zoom="reportZoom"
  4.             viewMode="paginated"
  5.             v-bind:availableExports = "['pdf', 'xlsx']"
  6.             v-on:report-loaded="this.onReportLoaded"
  7.             v-on:document-loaded="onDocumentLoaded"
  8.             :report="{ Uri: 'zuantoushiyong.rdlx-json' }"/>
  9.       </div>
  10.    </template>

  11.    <script>
  12.    import Vue from 'vue';
  13.    import '@grapecity/activereports/styles/ar-js-viewer.css';
  14.    import { Viewer} from '@grapecity/activereports-vue';
  15.    import '@grapecity/activereports';
  16.    export default Vue.extend ({        
  17.    name: 'app',
  18.          components: {
  19.             GcArViewer: Viewer
  20.         },
  21.         data: function () {
  22.             return {
  23.                 reportZoom: 'FitPage',
  24.             }
  25.         },
  26.         mounted(){
  27.             var htmlBtnIcon = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="24" height="24"><path class="gc-icon-color--text" d="M19 26v2c0 1.1-.9 2-2 2H2c-1.1 0-2-.9-2-2V5c0-1.1.9-2 2-2h10v6c0 1.1.9 2 2 2h5v2H6c-1.7 0-3 1.3-3 3v7c0 1.7 1.3 3 3 3h13zM13 3v6c0 .6.5 1 1 1h5l-6-7zM6 14c-1.1 0-2 .9-2 2v7c0 1.1.9 2 2 2h23c1.1 0 2-.9 2-2v-7c0-1.1-.9-2-2-2H6zm23 8v1h-5v-7h1v6h4zm-15-5v6h1v-6h2v-1h-5v1h2zm-4 2v-3h1v7h-1v-3H7v3H6v-7h1v3h3zm10.5 0L19 16h-1v7h1v-5l1 2h1l1-2v5h1v-7h-1l-1.5 3z" fill-rule="evenodd" clip-rule="evenodd" /></svg>';
  28.             this.getViewer().toolbar().addItem({
  29.                 key: '$html-export-btn',
  30.                 icon: { type:'svg', content:htmlBtnIcon },
  31.                 title: "HTML Export",
  32.                 enabled: true,
  33.                 action: () => { this.getViewer().export('html', []).then((result) => result.download("Exported_HTML")) }               
  34.             });
  35.             this.getViewer().registerFont({
  36.             source: 'fonts/SimHei.ttf',
  37.             name: '微软雅黑'
  38.            });
  39.            },
  40.            
  41.          methods: {
  42.            onDocumentLoaded: function (a) { console.log("document loaded", a);
  43.         },
  44.         onReportLoaded: function (arg) { console.log    ("report loaded", arg);
  45.            },
  46.            getViewer() {
  47.            return this.$refs.control;
  48.            }
  49.            }
  50.        });

  51.    </script>
复制代码
4、最后预览展示结果




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部