2016-12-05 1 views
0

У меня есть прецедент, где мне нужно показать динамическое изображение в формате pdf. Я использую FApacheFOP 2.1 поколения PDF. Я получаю строку изображения в точке от вызова API, тогда я конвертирую это изображение в формат базы 64.Не удалось увидеть изображение base64 в формате PDF с использованием xslfo и FOP 2.1

пожалуйста найти Java CoE, чтобы преобразовать изображение:

String jpgFileName = ConfigManager.getImageFilePath() + "/jpgImage-"+System.currentTimeMillis()+".jpg"; 
Blob imageDataBlob = (Blob) faesRow.get("imageData"); 

     FileUtil.writeToFile(imageDataBlob, jpgFileName); 

     String base64Result = Base64.getEncoder().encodeToString(FileUtil.readFromFile(jpgFileName).getBytes("utf-8")); 

     result = base64Result; 

Я использую данные типа base64 в xslfo для печати изображения на PDF, пожалуйста, найти xslfo ниже, здесь $ signatureImage это данные, посланные код Java выше:

<xsl:param name="Name">data:image/jpg;base64,{$!signatureImage}</xsl:param> 

    <fo:block-container absolute-position="absolute" left="3.50in" top="9.25in" width="4.0in" height="2.0in"> 
     <fo:block text-align="left"> 
     <fo:external-graphic content-width="scale-to-fit" 
      content-height="100%" 
      width="100%" 
      scaling="uniform" 
      src="url({$Name})"/> 
     </fo:block> 
    </fo:block-container> 

в выводе шаблона рендеринге я получаю м base64 поток там в файле xslfo. Ниже приведены результаты:

<xsl:param name="Name">data:image/jpg;base64,{77+977+977+977+9ABBK... }</xsl:param> 

<fo:block-container absolute-position="absolute" left="3.50in" top="9.25in" width="4.0in" height="2.0in"> 
    <fo:block text-align="left"> 
    <fo:external-graphic content-width="scale-to-fit" 
     content-height="100%" 
     width="100%" 
     scaling="uniform" 
     src="url({$Name})"/> 
    </fo:block> 
</fo:block-container> 

Теперь проблема заключается в том, что изображение не получает оценку при выходе PDF-файла. Не могли бы вы помочь мне найти способ печати изображения здесь.

Дополнительная информация: 1. У меня нет ошибок при создании PDF. 2. PDF способен печатать статические изображения и штрих-код.

+0

не должен быть типом содержимого 'image/jpeg' вместо изображения/jpg? Кроме того, {} вокруг строки b64 выглядит подозрительно для меня. –

+0

Я попытался с jpeg и удалив {} тоже .. Но не повезло, он не показывает изображение. Это похоже на проблему с преобразованием base64, но не уверен, в чем проблема. –

+0

, когда я делаю base64-декодирование ваших данных «base64» 77 + 977 + 977 + 977 + 9ABB ... он начинается с 0xef 0xbf 0xbd 0xef ... который, кажется, не является файлом jpeg, который начинается с 0xff 0xd8 и вероятно, тогда 0xff 0xe0. выглядит неправильно для меня ... –

ответ

2

В этом случае я обнаружил проблему.

первый вопрос был с преобразованием base64, мы должны использовать преобразования, как показано ниже:

File file= new File(jpgFileName); 
FileInputStream fileInputStream= new FileInputStream(file); 
byte[] b= new byte[(int) file.length()]; 

fileInputStream.read(b); 

String base64Result = new String(Base64.getEncoder().encode(b),"UTF-8"); 

Другое, чем это некоторые изменения также требуется в xslfo шаблоне тоже, пожалуйста, найти изменение ниже:

<fo:block-container absolute-position="absolute" left="3.50in" top="9.25in" width="4.0in" height="2.0in"> 
    <fo:block text-align="left"> 
    <fo:external-graphic content-width="scale-to-fit" 
     content-height="100%" 
     width="100%" 
     scaling="uniform" 
     src="url('data:image/jpeg;base64,$!signatureImage')"/> 
    </fo:block> 
</fo:block-container> 
+0

Лучшие вопросы по SO - это те, где OP находит ответ сам. –

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