2015-11-03 5 views
1

Я использовал пакет какое-то время, и он работал нормально. После обновления до последнего пакета код сломался.crispin.Fop Apache Fop C# port

После инициализации завод с конструктором какой-умолчанию я получаю сообщение об ошибке:

'org.apache.fop.render.ImageHandlerRegistry' threw an exception. 

Каждый получил представление о том, как configuratin должна выглядеть так он будет работать снова?

public string GeneratePdf(string foFile, string pdfFile) 
    { 
     OutputStream os = new BufferedOutputStream(new FileOutputStream(new java.io.File(pdfFile))); 
     string ret = ""; 
     try 
     { 
      // Factory before update 
      FopFactory fopFactory = FopFactory.newInstance(); 
      // After the update the Factory needs some sort of configuration 
      // I tryed with all the constructors but can't get the sample to work. 
      FopFactory fopFactory = FopFactory.newInstance(null); 
      Fop fop = fopFactory.newFop("application/pdf", os); 
      FOUserAgent foUserAgent = fop.getUserAgent(); 
      javax.xml.transform.TransformerFactory factory = javax.xml.transform.TransformerFactory.newInstance(); 
      javax.xml.transform.Transformer transformer = factory.newTransformer(); 
      javax.xml.transform.Source src = new javax.xml.transform.stream.StreamSource(new java.io.File(foFile)); 
      javax.xml.transform.Result res = new javax.xml.transform.sax.SAXResult(fop.getDefaultHandler()); 
      transformer.transform(src, res); 

      ret = pdfFile; 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 

     finally 
     { 
      os.close(); 
     } 
     return ret; 
    } 

ответ

0

Фактический источник проблемы, вероятно, не модернизация Криспина, но пакет зависимости от IKVM 8, https://stackoverflow.com/a/30887042/993388, кажется, описывает подобную проблему.

После того, как я изменил IKVM с 8.x на 7.x, проблема исчезла. Также обязательно удалите или настройте любые переадресации привязки к IKVM 8.x с App.Config, в противном случае среда выполнения все равно может попытаться захватить новые сборки.

Это только обходное решение, но это лучшее, что я мог найти на данный момент.

0

Старый вопрос, но это работает для меня:

var jFopFactory = org.apache.fop.apps.FopFactory.newInstance(new java.net.URI(".")); 

Я не пробовал с любыми изображениями или другими ресурсами, хотя.