找回密码
 立即注册

QQ登录

只需一步,快速开始

Dtttax

高级会员

235

主题

572

帖子

1849

积分

高级会员

积分
1849
Dtttax
高级会员   /  发表于:2019-4-15 15:40  /   查看:4798  /  回复:10
本帖最后由 Dtttax 于 2019-4-15 18:41 编辑

咨询一下,在表单中的标题设置有下划线,在表单中显示正常。

但是在导出pdf后,含有下划线的文本内容都会比 文本长出来一截。
类似下图,请问这类情况如何来排查?
(重写了GC.Spread.Sheets.CellTypes.Text.paintContent方法   去除其他样式,只留下textDecoration=1,打印还是这种效果,下划线比文本长。 在表单中显示也是正常的)





附件上传不了。 这是百度地址。
这个数据 是下划线比内容长。   如果我把自己都换成大写的 就会变成内容比下划线长

链接: https://pan.baidu.com/s/1PbqW7GMhft1tF0TXsOb61A 提取码: fg4e 复制这段内容后打开百度网盘手机App,操作更方便哦

8 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-4-15 17:55:48
沙发
您好,您的图片没有上传上来,建议您提供一个能重现问题的ssjson文档,我们排查一下问题在哪。
回复 使用道具 举报
Dtttax
高级会员   /  发表于:2019-4-15 18:43:25
板凳
KevinChen 发表于 2019-4-15 17:55
您好,您的图片没有上传上来,建议您提供一个能重现问题的ssjson文档,我们排查一下问题在哪。

附件重新上传了。 还请查看

我在这里 复现了这种情况
https://www.grapecity.com/en/demos/spread/JS/ExcelMobileSample/
回复 使用道具 举报
Dtttax
高级会员   /  发表于:2019-4-15 18:43:28
地板
KevinChen 发表于 2019-4-15 17:55
您好,您的图片没有上传上来,建议您提供一个能重现问题的ssjson文档,我们排查一下问题在哪。

附件重新上传了。 还请查看

我在这里 复现了这种情况
https://www.grapecity.com/en/demos/spread/JS/ExcelMobileSample/
回复 使用道具 举报
Dtttax
高级会员   /  发表于:2019-4-15 18:43:56
5#
KevinChen 发表于 2019-4-15 17:55
您好,您的图片没有上传上来,建议您提供一个能重现问题的ssjson文档,我们排查一下问题在哪。

附件重新上传了。 还请查看

我在这里 复现了这种情况
https://www.grapecity.com/en/demos/spread/JS/ExcelMobileSample/
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-4-16 11:57:25
6#
您好,问题原因分析如下:


当文档中设置了不同字体时,由于不同字体尺寸不同,所以显示效果如图:

微信截图_20190416115319.png


在导出PDF时,没有注册对应的字体的话,在导出的PDF中都会显示默认字体,如图:


image.png722257384.png


而下划线的长度是根据字体长度来确定的,在PDF中字体发生了变化,所以导致下划线长度与字体不一致的情况。


问题解决办法:为导出的PDF文档注册相应的字体。具体操作方法可以参考技术博客:

https://www.grapecity.com.cn/blogs/spreadjs-solve-font-garbled-problem
回复 使用道具 举报
Dtttax
高级会员   /  发表于:2019-4-16 14:06:32
7#
KevinChen 发表于 2019-4-16 11:57
您好,问题原因分析如下:

系统提供了哪些内置的字体啊?如何判断 哪些需要注册 哪些不需要

样式中的font: "normal bold 16px Arial", 应该是内置的吧?
回复 使用道具 举报
Dtttax
高级会员   /  发表于:2019-4-16 16:41:35
8#
KevinChen 发表于 2019-4-16 11:57
您好,问题原因分析如下:

font: "normal bold 16px Arial" 这个应该注册什么字体啊?   现在注册了一个 Arial

      const fileReader = new FileReader();
      fileReader.onload = function(event) {
        const arrayBuffer = event.target.result
        const fonts = GC.Spread.Sheets.PDF.PDFFontsManager.getFont('Arial') || {};
        fonts['Arial'] = arrayBuffer;
        GC.Spread.Sheets.PDF.PDFFontsManager.registerFont('Arial', fonts);
      };
      fileReader.readAsArrayBuffer( new Blob([data.result], {type : 'application/text'}));

打印还是一样的效果.
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-4-16 17:44:33
9#
您好,

首先,Arial是拉丁文字体,也就是说不包含中文字体,

当设置单元格字体为Arial时,单元格中的中文内容实际上会被浏览器赋予一个默认字体以避免乱码,

导入到PDF后,中文内容会匹配中文字体,而不会匹配Arial,因为Arial中找不到中文字体的编码。


其次,推荐您可以下载一个技术博客中分享的示例,百度网盘链接地址和分享码在文章中有:

https://www.grapecity.com.cn/blo ... ont-garbled-problem

比如在这个示例中,我通过以下这句代码,为3,2位置的单元格设置了normal bold 16px Arial字体的Hello World,代码如下:

  1. // 下划线
  2.             sheet.getCell(3, 2).font("normal bold 16px Arial").value("Hello World").textDecoration(GC.Spread.Sheets.TextDecorationType.underline);
复制代码


如图:

image.png474334411.png

此时,不执行字体注入,直接导出PDF的效果如下:

image.png124565428.png

如图所示,出现了下划线与字体不齐的现象,下一步开始为PDF注入字体,

首先从操作系统的C:\Windows\Fonts中找到Arial字体,粘贴到示例工程中:

image.png639626464.png

image.png388108214.png

如上图所示,Arial字体包含了arial.ttf arialbd.ttf等多个不同的字体,这是根据

字体加粗、变细、常规等做了区分,这里只需要导入arial.ttf和arialbd.ttf即可,

如下列代码所示:

  1. registerServerFont('Arial', 'normal', 'font/arial.ttf');
  2. registerServerFont('Arial', 'bold', 'font/arialbd.ttf');
复制代码


导入字体后,再执行导出PDF操作,效果如下:

image.png811595458.png

可见,字体和下划线与文档中实现了一致。
回复 使用道具 举报
Dtttax
高级会员   /  发表于:2019-4-16 18:16:15
10#
KevinChen 发表于 2019-4-16 17:44
您好,

首先,Arial是拉丁文字体,也就是说不包含中文字体,

弄好了。fetch的自定义有点问题,修正后就正常了
感谢
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部