为什么我使用 itext7 pdfhtml java lib 将 svg 翻译成 pdf 时样式错误并且不显示中文

问题描述 投票:0回答:1

最初,我在 HTML 文件的 CSS 中使用 SVG 作为背景图像,并尝试使用

HtmlConvert.convertToPdf
将其转换为 PDF。但是,我的 SVG 图像遇到样式问题,颜色反转,将黑色显示为白色,反之亦然,而且汉字无法正常显示。我遇到了 html2pdf 对 SVG 支持的限制。随后,我尝试使用
SvgConvert.createPdf
将SVG直接转换为PDF,结果发现SVG仍然出现类似的问题。这让我相信,无论使用哪种方法,对 SVG 处理的支持都可能不够。这是我的代码:

SvgConverterProperties prop = new SvgConverterProperties();
FontProvider fontProvider = new FontProvider();
PdfFont pdfFont = PdfFontFactory.createFont("/font/HYWenHei-75W.ttf,PdfEncodings.IDENTITY_H");
fontProvider.addFont(pdfFont.getFontProgram());
prop.setFontProvider(fontProvider);
SvgConvert.createPdf(new FileInputStream('test.svg'),new FileOutPutStream('test.pdf'),prop);

svg 文件如 text 我不确定这是否是一个错误;有人可以帮我解决这个问题吗?谢谢。

从用户编码的角度是否有解决方案来解决这个问题,或者开发人员可以解决它并发布更新吗?请协助解决这个问题。

java svg itext itext7 pdfhtml
1个回答
0
投票

我能够将输入 .svg 最小化到

<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" data-v-4b6fc447="" width="692px" height="125px" viewBox="0 0 692 125" version="1.1">
  <defs >
    <radialGradient  cx="12.1963505%" cy="29.0520353%" fx="12.1963505%" fy="29.0520353%" r="93.5585522%" gradientTransform="translate(0.122, 0.2905), scale(0.9529, 1), rotate(39.6312), scale(1, 0.6811), translate(-0.122, -0.2905)" id="radialGradient-20">
      <stop stop-color="#FFE6D4" offset="0%"/>
      <stop stop-color="#FFFFFF" offset="24.9044735%"/>
      <stop stop-color="#FFFFFF" offset="29.1362898%"/>
      <stop stop-color="#FFFFFF" offset="62.7690476%"/>
      <stop stop-color="#C8DEF9" offset="100%"/>
    </radialGradient>
    <path data-v-4b6fc447="" d="M21.7423222,60.6707778 C19.9989592,60.2319973 11.0239174,55.753224 10.4824503,55.4581759 C0.269863617,50.4946798 0.798100889,45.3473504 0.798100889,40.9353539 C0.798100889,36.3395242 2.03065446,32.1113609 4.3196825,28.2508639 C5.62436175,26.2181404 7.00454795,24.4314687 8.42607253,22.8611664 C8.84671997,22.0277824 9.79720103,17.0616363 12.8561581,12.0244345 L18.4999935,15.0858947 C26.3198285,11.0937275 33.0205726,11.5220436 33.0205726,11.5220436 C33.4942723,11.5355932 33.9603196,11.5563833 34.4187232,11.5839446 C35.913608,10.2265004 36.0621399,9.5903757 35.7800241,7.09428014 C34.0533999,5.88182307 34.3029078,4.01911942 34.3029078,3.87421871 C34.3029078,2.90566404 34.6840946,1.93710936 35.446468,1.16226563 C36.2088415,0.3874219 37.1618084,0 38.1147751,0 C40.2113021,0 41.9266425,1.74339848 41.9266425,3.87421871 C41.9266425,6.00503895 40.2113021,7.7484375 38.1147751,7.7484375 C38.658364,9.49167078 38.6004157,10.3520544 38.4881948,12.0260966 C44.0393929,12.9078672 48.1986819,14.7583091 50.9894527,16.4199693 C52.6950942,15.4064503 53.5295649,14.1357205 56.5120729,12.5347571 C58.9839274,16.1877668 60.3758122,20.8249462 60.6877275,26.4462954 C62.5491203,29.2966742 63.9619936,32.4476068 64.8908861,35.7880247 C66.1234397,43.1413522 64.0104907,47.0018492 64.0104907,47.0018492 C60.9416839,53.9437406 50.1142623,58.4727808 49.4298997,58.7533428 L49.3959271,58.7671733 C48.6841697,58.998589 48.16522,59.1602579 47.8390779,59.2521801 C46.8307435,59.5363761 39.8013407,61.1207721 32.8769409,61.3903217 C28.2606744,61.5700214 24.5491348,61.3301735 21.7423222,60.6707778 Z" 
      id="path-21"/>


  </defs>
  <g stroke="none" stroke-width="1" >
    <g stroke="none" >
      <use  fill="url(#radialGradient-20)" xlink:href="#path-21"/>
    </g>
  </g>
</svg>

而且我发现iText还不支持

radialGradient
,请参阅

https://github.com/itext/itext-java/blob/develop/svg/src/main/java/com/itextpdf/svg/renderers/factories/DefaultSvgNodeRendererMapper.java#L159

如果您从忽略的 SVG 标签中清理 svg,您将获得可接受的结果。

关于

汉字无法正常显示

如果您提供

HYWenHei-75W.ttf
字体文件,我可以说更多。

© www.soinside.com 2019 - 2024. All rights reserved.