Непрозрачность штрихов не влияет на svg: текст при конвертации svg в pdf с использованием fop-2.2 - PullRequest
3 голосов
/ 13 июня 2019

Я обновляю батик-1.7 до 1.11 и fop-0.94 до 2.2.Я использую PDFTranscoder из FOP для преобразования SVG в PDF в моем приложении.Непрозрачность мазка применяется к тексту в SVG.Перед обновлением pdf выглядит хорошо, и результат, как и ожидалось, с непрозрачностью.Но после обновления штрих-непрозрачность не применяется к тексту.

Ниже приведен код, используемый для преобразования SVG в PDF:

Transcoder transcoder = new PDFTranscoder();
TranscoderInput input = new TranscoderInput(svgFile.toURI().toString());
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
TranscoderOutput output = new TranscoderOutput(outStream);
transcoder.transcode(input, output);

Используемый SVG-файл:

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="418" viewBox="0,0 65416,45424" width="816" xml:space="preserve">   
<defs>
<style type="text/css"><![CDATA[
.P{
font-family:"Arial";
font-weight:normal;
font-size:247px;
font-family:"Lucida Sans";
font-style:normal;
stroke:#000;
stroke-width:16px;
stroke-dasharray:none;
stroke-linejoin:miter;
stroke-miterlimit:10;
stroke-width:0.5px;
stroke-linecap:square;
stroke-opacity:1.0;
fill:none;
fill-opacity:0.0;
fill-rule:evenodd;
}

.M{
font-family:"Arial";
font-weight:normal;
font-size:282px;
font-style:normal;
stroke:#00F;
stroke-dasharray:none;
stroke-linejoin:miter;
stroke-miterlimit:10;
stroke-width:2px;
stroke-linecap:square;
stroke-opacity:1.0;
fill:#00F;
fill-rule:evenodd;
fill-opacity:1.0;
}

.dimmed{
stroke-opacity:0.5;
fill-opacity:0.0;
}
]]></style>
</defs>
<g>


<g>

<path class="dimmed P" d="M7964,25320h5669m-5669,0v1905m0,-1401h5669m-5669,467h5669m-5669,467h5669m-5669,467h5669m-4968,-1401v1401m934,-1401v1401m785,-1401v1401m743,-1401v1401m1295,-1401v1401m1210,-1905v1905"/> 

<text class="dimmed M" x="10258" y="25695">CONN3</text>
<text class="M" x="8054" y="26172">Cav</text>
</g>
</g>

</svg>

Непрозрачность штрихов в классе "затемненный" не оказывает никакого влияния на текст "CONN3" после обновления батика и fop.

1 Ответ

1 голос
/ 23 июня 2019

Произошла указанная выше ошибка, поскольку по умолчанию для текста обводки задано значение «1».Поэтому независимо от того, какое значение мы передаем атрибуту stroke-oppacity, оно не имеет никакого эффекта.

Я решил проблему, изменив «applyColorAndPaint» PDFTextPainter.java в исходном коде fop и перестроив jar.

private void applyColorAndPaint(TextPaintInfo tpi) { 
 Paint fillPaint = tpi.fillPaint; 
 Paint strokePaint = tpi.strokePaint; 
 Stroke stroke = tpi.strokeStroke; 
 int fillAlpha = PDFGraphics2D.OPAQUE; 
 int strokeAlpha = PDFGraphics2D.OPAQUE; 
 if (fillPaint instanceof Color) { 
      Color col = (Color) fillPaint; 
      pdf.applyColor(col, true); 
      fillAlpha = col.getAlpha(); 
 } 
 if (strokePaint instanceof Color) { 
      Color col = (Color) strokePaint; 
      pdf.applyColor(col, false); 
      strokeAlpha = col.getAlpha(); 
 } 
 pdf.applyPaint(fillPaint, true); 
 pdf.applyStroke(stroke); 

 if (strokePaint != null){ 
      pdf.applyPaint(strokePaint, false); 
 } 
 pdf.applyAlpha(fillAlpha, strokeAlpha); 
}
...