Проблема с добавлением таблицы пользовательских стилей в качестве подсказки транскодирования - PullRequest
0 голосов
/ 12 июня 2019

Я использую Apache Batik версии 1.9 для конвертации SVG в PDF.

У меня есть требование для создания PDF-файла из SVG, и содержимое PDF должно быть размещено в центре страницы.

Я попытался добавить таблицу стилей согласно документации батика, но я получаю ошибку пространства кучи, когда я использую PDFTranscoder.KEY_USER_STYLESHEET_URI.

Ниже приведен код и ошибка. Может кто-нибудь, пожалуйста, помогите мне исправить это?

try{
String uuid = UUID.randomUUID().toString();
String css = "svg {" + "shape-rendering: geometricPrecision;" + "text-rendering:  geometricPrecision;" + "color-rendering: optimizeQuality;" + "image-rendering: optimizeQuality;" + "}";       
cssFile = File.createTempFile("batik-default-override-", ".css");
FileUtils.writeStringToFile(cssFile, css);
FileInputStream inputStream = new FileInputStream(new File(Paths.get("Input").toAbsolutePath()+"/visualsummary.svg"));
byte[] bytes = IOUtils.toByteArray(inputStream);
FileOutputStream pdfOutputStream = new FileOutputStream(new File(Paths.get("Output").toAbsolutePath()+"/convertedSvg_"+uuid+".pdf"));
Transcoder transcoder = new PDFTranscoder();
TranscoderInput transcoderInput = new TranscoderInput(new ByteArrayInputStream(bytes));
TranscoderOutput transcoderOutput = new TranscoderOutput(pdfOutputStream);
int dpi = 300;
//String path = Paths.get("Input").toAbsolutePath()+"/customstyle.css";
//URI uri = URI.create(path);
//transcoder.addTranscodingHint(PDFTranscoder.KEY_USER_STYLESHEET_URI, uri.toString());
transcoder.addTranscodingHint(PDFTranscoder.KEY_USER_STYLESHEET_URI, cssFile.toURI().toString());
transcoder.addTranscodingHint(PDFTranscoder.KEY_HEIGHT, new Float(dpi * 42.0));
transcoder.addTranscodingHint(PDFTranscoder.KEY_PIXEL_UNIT_TO_MILLIMETER,(25.4f / 72f));
transcoder.transcode(transcoderInput, transcoderOutput);
}catch(Exception e){
    e.printStackTrace();
}finally{
    cssFile.delete();
}



Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.awt.image.DataBufferInt.<init>(DataBufferInt.java:75)
    at java.awt.image.SinglePixelPackedSampleModel.createDataBuffer(SinglePixelPackedSampleModel.java:242)
    at java.awt.image.Raster.createWritableRaster(Raster.java:941)
    at org.apache.batik.ext.awt.image.rendered.AbstractRed.getData(AbstractRed.java:523)
    at org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:264)
    at org.apache.batik.ext.awt.image.GraphicsUtil.drawImage(GraphicsUtil.java:455)
    at org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:549)
    at org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
    at org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
    at org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
    at org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
    at org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
    at org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
    at org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
    at org.apache.batik.gvt.CanvasGraphicsNode.primitivePaint(CanvasGraphicsNode.java:159)
    at org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
    at org.apache.batik.gvt.CompositeGraphicsNode.primitivePaint(CompositeGraphicsNode.java:165)
    at org.apache.batik.gvt.AbstractGraphicsNode.paint(AbstractGraphicsNode.java:509)
    at org.apache.fop.svg.PDFTranscoder.transcode(PDFTranscoder.java:185)
    at org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(XMLAbstractTranscoder.java:142)
    at org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(SVGAbstractTranscoder.java:156)
    at com.aramco.ecc.drilleye.ManipulatePDF.main(ManipulatePDF.java:69)
...