2016-06-10 2 views
0

У меня возникли проблемы с получением моих диаграмм в формате PDF. Недавно я разместил это: Generating PDF with iText and batik, которое было решено, как было предложено, с некоторой настройкой на весы.Таблицы IText, батик и ваадин масштабируются неправильно на linux

Я запускаю amy testenviroment на локальном стеклянном стекле на машине с окнами 10, и когда я экспортирую в PDF, на самом деле получаю прекрасный результат.

Windows result

Но когда я толкнул результаты на сервер RHEL, результаты различались. Диаграммы, представленные на сайте является большим, но когда я экспортировать в PDF, я получаю это:

Linux result

Как вы можете видеть, название выталкивается вниз, по какой-то причине Y-ось с этикеткой обрезаны, а метки данных сплющиваются вместе. Я пробовал играть с разными масштабами, с и без scaletofit, scaletoabsolute и так далее, но независимо от того, что я делаю, он продолжает делать что-то странное.

Кто-нибудь знает, что происходит - и даже лучше, как это исправить? Я дважды проверял, что phantomjs является той же версией, чтобы убедиться, что SVG является правильным.

Код выглядит следующим образом:

private Image createSvgImage(PdfContentByte contentByte, Chart chart) throws IOException { 
    Configuration configuration = chart.getConfiguration(); 
    configuration.setExporting(false); 
    SVGGenerator generator = SVGGenerator.getInstance(); 
    generator.withHeigth(600); 
    generator.withWidth(1200); 
    String svg = generator.generate(configuration); 
    Image image = drawUnscaledSvg(contentByte, svg); 
    image.scaleToFit(800, 370); 
    configuration.setExporting(true); 
    return image; 
} 


    private Image drawUnscaledSvg(PdfContentByte contentByte, String svgStr) throws IOException { 
    GraphicsNode imageGraphics = buildBatikGraphicsNode(svgStr); 

    float width = 1200; 
    float height = 600; 
    PdfTemplate template = contentByte.createTemplate(width, height); 
    Graphics2D graphics = template.createGraphics(width, height); 
    try { 

     imageGraphics.paint(graphics); 
     graphics.translate(-10, -10); 

     return new ImgTemplate(template); 
    } catch (BadElementException e) { 
     throw new RuntimeException("Couldn't generate PDF from SVG", e); 
    } finally { 
     graphics.dispose(); 
    } 
} 


    private GraphicsNode buildBatikGraphicsNode(String svgStr) throws IOException { 
     UserAgent agent = new UserAgentAdapter(); 

     SVGDocument svgdoc = createSVGDocument(svgStr, agent); 
     DocumentLoader loader = new DocumentLoader(agent); 
     BridgeContext bridgeContext = new BridgeContext(agent, loader); 
     bridgeContext.setDynamicState(BridgeContext.STATIC); 

     GVTBuilder builder = new GVTBuilder(); 

     GraphicsNode imageGraphics = builder.build(bridgeContext, svgdoc); 
     return imageGraphics; 
} 


    private SVGDocument createSVGDocument(String svg, UserAgent agent) 
     throws IOException { 
    SVGDocumentFactory documentFactory = new SAXSVGDocumentFactory(
      agent.getXMLParserClassName(), true); 

    SVGDocument svgdoc = documentFactory.createSVGDocument(null, 
      new StringReader(svg)); 
    return svgdoc; 
} 

UPDATE Я попытался чтении SVG файла с диска, который я знал, был правильным, и что правильно поместить в PDF. Таким образом, проблема лежит где-то в генераторе SVG. Кто-нибудь знает об этом?

+0

Никто? Кажется, я ничего не могу найти. : -/ –

+0

После вашего редактирования, где вы исключили PDF, вы могли бы опубликовать упрощенную версию вашего кода, которая содержит только материал svg? –

+0

@AmedeeVanGasse - должно быть сделано сейчас, хорошая точка. Хотя я все еще верю, что ошибка лежит внутри линий, которые используют синглтон SVGGenerator. Я пробовал обновлять все пакеты, требуемые PhantomJS, строго следуя инструкциям со своего сайта, но мне все равно не повезло. :) –

ответ

1

Использование старой версии PhantomJS (1.9.8) устраняет проблему. Я сделал билет с Ваадином.

+0

Хорошо, что вы нашли причину. Я удалил тег itext, чтобы он не появлялся в нашем Slack (да, мы на мониторе iText Software StackOverflow). –

+0

Фантастический - отличный сервис. –

Смежные вопросы