Shared Components -> Report Queries -> Create
Report Query Name: first_query
Output Format: PDF
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOsywxSWdkhXJuLRXO9maThzpw7pxjO3R6W4O3Og8m2HYNOQVSNTX-5LCdJafctaGvzNxGqIFRIF7wIkS7-Gw-5I6YjK3pi9qlj82hOpHPeVscmj4mTeMGZL4kLWB4kOkViosasStXeKh0/s200/01.png)
Click on Next button
SQL guery:
select "PHOTOS"."PHOTO_ID" as "PHOTO_ID",
"PHOTOS"."MIME_TYPE" as "MIME_TYPE"
from "PHOTOS" "PHOTOS"
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikgBEpArTmoSvkAqfNwHhznhmA5jwJQXBgF6PaerPQeklI_RXrmZ4pONtLbZqcdgfErrKO-Th1XvY_IaFAaSv5YwLRiDnP7F4vMdlVgoi3cl6hEfY9DLTuAAOMJMqOt5h1iaX2WTLeeMZS/s200/02.png)
Click on Next button
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1KFFJSV2S5nIC21YqL3_l0V8lP7rVKXi6PQsS-GZy3WDyo7-7UyDObF3Xql70YWu8Ig25yJYoyGqSmjabxmhfqieTV0RI8P8GakGmVTguoUkmLC3_F_nhCGXaodcvBTGLo0GMQiy0bqaI/s200/03.png)
Click on Add Query button
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji4bfDZ20q-vZHcvUeHL5dEwlWuSEq8Tu2b-His-tIhNVNjrioQ4wwcJPTMO1IULZZx-uY1Uuo75H4aNhRnYyG84F8eltbPq9JNX80rt6apj6VJaZjy87qQbnmb6MNEUef1teGN9l-PBve/s200/04.png)
Click on Create button
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbBfsk_l3WOg772Iv9FDt0GK5wBCOQcKf3RTR-xK1JaWca9GxEL5A335CR46oMHLoJO1TORZs9VR9jr0IaQbF9WuUQUay72oj3EETkn6nzRHsi0iQb3UMPziH2ZkGu4zTasscOW120hd3K/s200/05.png)
Click on Next button
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDMQ-IAIOFmaFofssvALEkwYvY0dqmeYZuhhtDaqo_9Qx87OcpSvP-3aqzh_pd1Dc0f6Jm5YHmA7dH_Nv9Da1Y5mfh_lXExU1bzkF5qy0xGepMsjjah75OhD57AMEygZdWunQmbhizjaHf/s200/06.png)
Click on Next button
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBaVVfpNqYFm-fj0ZV3Rvfqo3Vu36c-tI3Ff5r8KmhDS6_61ZVBk9D8Yd-Dbmjzm2yDAn5lIkIjBVYAoVam6XgNnVEyKnhze2f6JWzJ0LY7LhUQKyGunHFYX6gtYi7clJLYwDIpPeeQKFN/s200/07.png)
Click on Finish button
At now you get the following result (because we used the default report layout):
- we can't see the second query (select sysdate from dual), we can only see the first query in pdf
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRry1kSO-TBsPeF8kKdLoFXQgEqWXU_9ft4XnMvbFeQQP45LpXK8alaBUSo1_IlXKjZ8cKfMvZ8vRRLda476eHeBU7n9mkX8loN_DYF1bzGSB8xx8qL_eVPtGwjCVc2SD-8UM5Mwpme2Lc/s200/08.png)
2) Create custom report layout
At first we have to see the xml data:
Shared Components -> Report Queries ->Click on first_query (which was created by us)
-> Source Queries -> click on Download button
Xml data which was generated by APEX:
<?xml version="1.0" encoding="UTF-8"?>
<DATA>
<ROWSET1>
<ROWSET1_ROW>
<PHOTO_ID>1</PHOTO_ID>
<MIME_TYPE>image/jpeg</MIME_TYPE>
</ROWSET1_ROW>
</ROWSET1>
<ROWSET2>
<ROWSET2_ROW>
<SYSDATE>31-MAY-10</SYSDATE>
</ROWSET2_ROW>
</ROWSET2>
</DATA>
If you see the xml data you can write layout for it. (Or you can use BI Publisher Desktop and MS Word for it)
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<fo:root>
<fo:layout-master-set>
<fo:simple-page-master master-name="A4-portrait"
page-height="29.7cm" page-width="21.0cm" margin="2cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4-portrait">
<fo:flow flow-name="xsl-region-body"> <!-- START of PAGE BODY -->
<fo:block > <!-- START of MAIN BLOCK in page body -->
<xsl:for-each select="DATA" ><!-- start of DATA -->
<fo:block font-weight="bold" font-family="Helvetica" font-size="18pt" padding-top="1pt" padding-bottom="20pt" text-align="center">PHOTOS</fo:block>
<fo:block padding-before="10pt" padding-bottom="10pt">
<fo:table border="0.5pt solid #000000">
<fo:table-column column-width="20mm"/>
<fo:table-column column-width="43mm"/>
<fo:table-column column-width="120mm"/>
<fo:table-body >
<fo:table-row>
<fo:table-cell border-right="0.5pt solid #000000" border-bottom="0.5pt solid #000000" padding-left="5pt" padding-top="3pt" padding-bottom="1pt">
<fo:block font-size="12pt" font-family="Helvetica">Photo_id</fo:block>
</fo:table-cell>
<fo:table-cell border-right="0.5pt solid #000000" border-bottom="0.5pt solid #000000" padding-left="5pt" padding-top="3pt" padding-bottom="1pt">
<fo:block font-size="12pt" font-family="Helvetica">mime_type </fo:block>
</fo:table-cell>
<fo:table-cell border-bottom="0.5pt solid #000000" padding-left="5pt" padding-top="3pt" padding-bottom="1pt">
<fo:block font-size="12pt" font-family="Helvetica">Photo
</fo:block>
</fo:table-cell>
</fo:table-row>
<!-- start of first query -->
<xsl:for-each select="ROWSET1" ><!-- start of ROWSET1 -->
<xsl:for-each select="ROWSET1_ROW" ><!-- start of ROWSET1_ROW -->
<fo:table-row>
<fo:table-cell border-right="0.5pt solid #000000" border-bottom="0.5pt solid #000000" padding-left="5pt" padding-top="3pt" padding-bottom="1pt">
<fo:block font-size="12pt" font-family="Helvetica">
<xsl:value-of select="PHOTO_ID"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border-right="0.5pt solid #000000" border-bottom="0.5pt solid #000000" padding-left="5pt" padding-top="3pt" padding-bottom="1pt">
<fo:block font-size="12pt" font-family="Helvetica">
<xsl:value-of select="MIME_TYPE"/>
</fo:block>
</fo:table-cell>
<fo:table-cell border-bottom="0.5pt solid #000000" padding-left="5pt" padding-top="3pt" padding-bottom="1pt">
<fo:block font-size="12pt" font-family="Helvetica">
<!-- start of image -->
<!-- end of image -->
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each><!-- end of ROWSET1_ROW -->
</xsl:for-each><!-- end of ROWSET1 -->
<!-- end of first query -->
<!-- start of second query -->
<xsl:for-each select="ROWSET2" ><!-- start of ROWSET2 -->
<xsl:for-each select="ROWSET2_ROW" ><!-- start of ROWSET2_ROW -->
<fo:table-row>
<fo:table-cell cell-spanding="2" border-right="0.5pt solid #000000" padding-left="5pt" padding-top="3pt" padding-bottom="1pt">
<fo:block font-size="12pt" font-family="Helvetica">Sysdate </fo:block>
</fo:table-cell>
<fo:table-cell border-bottom="0.5pt solid #000000" padding-left="5pt" padding-top="3pt" padding-bottom="1pt">
<fo:block font-size="12pt" font-family="Helvetica">
<xsl:value-of select="SYSDATE"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each><!-- end of ROWSET2_ROW -->
</xsl:for-each><!-- end of ROWSET2 -->
<!-- end of second query -->
</fo:table-body>
</fo:table>
</fo:block>
</xsl:for-each><!-- end of DATA -->
</fo:block><!-- END of MAIN BLOCK in page body -->
</fo:flow> <!-- END of PAGE BODY -->
</fo:page-sequence>
</fo:root>
</xsl:template>
</xsl:stylesheet>
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJ5SRU1o3qZzuK1p8AwnMtgehVZKc-U4CoOPqrICL_d-JwmujT-QaS4nIVv4ThqgZNG7dWmDSwxRRmc2OJt3qJLtsLIJpRunTne-74PstV1wMalH_kacJgs8TVTQmUMQlLXeMOrrigW30Q/s200/09.png)
And now add the picture for report query and layout
Shared Components -> Report Queries ->Click on first_query (which was created by us)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo1XjS_joOFJPFWM106ZwDd52gw_glktDmM9mnlKv_cNMaiVRx6ap700Rw7GO36xpX4UhwfHXUsyOo2BkWkc_3WXk4IOGyQ54fHB3Chr1wm-BuK1jsPMrpLVlwzalKXrwxGUGLDPYf-OMq/s200/10.png)
select "PHOTOS"."PHOTO_ID" as "PHOTO_ID",
"PHOTOS"."MIME_TYPE" as "MIME_TYPE" ,
'http://YOUR_WEBSERVER/DAD/USER.my_image_display?p_image_id='||PHOTO_ID as FILEPATHVALUE
from "PHOTOS" "PHOTOS"
YOUR_WEBSERVER => the server's IP or canonical name
DAD => Database Access Descriptor
USER => schema name where my_images_display procedure is located
my_image_display => see the my_image_display procedure
Add the following code your custom layout:
....
<!-- start of image -->
<fo:block font-size="10pt">
<xsl:variable name="filepathValue" select="FILEPATHVALUE" />
<fo:external-graphic >
<xsl:attribute name="src">
<xsl:value-of select="$filepathValue"/>
</xsl:attribute>
<xsl:attribute name="width">
<xsl:value-of select="'2cm'"/>
</xsl:attribute>
</fo:external-graphic>
</fo:block>
<!-- end of image -->
....
Upload your layout to APEX
Shared Components -> Report Layouts -> Click on Create button -> select Named Columns (XSL-FO)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4sv-PWMylViaSD84_DrRUhuqpPbtoxhJQ7TsM9gkvlLxRWMCJUErnUhAwFFH2p5Um7CgITuOmP6XC7jnMO2rfZlw3qA_nfH8WiG9nNEoyaMHbuuZtdgl-Dzgyj3eH8M13xKOC2fMg4-6y/s200/14.png)
Layou name: first_layout_query
Report Layout File: select your custom layout file
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT8g0ke32yB53R-vPhEHAsUiVg58wHwPPoyTUzVWbP04rrbrG32Yryuac4i-2KYPmfaa9obuhpz4tYCTq8Ja7cX6q6qwfNK6FkeIFQ6wIgbrGieh029uoyXpv3R9Nb6LNhwIRTzDaWWftG/s200/15.png)
Click on Create Layout button
Shared Components -> Report Queries ->Click on first_query (which was created by us) -> Change "Report Layout" ->select "first_layout_query"
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPOkg1yOsrl9BNKMw-z19HljPCsa3g4cRqK46ySC53EfWxEo6QTW12ljrqT3wc_uwHKWtab2_dJQbt_dSPpZKu1dhPm7OjovUFAbDHLOrlQV1aBJHg3mUB7dZDB2KGe9WGNUkm8zQQa_XF/s200/11.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6dVkIunYBdV-x0P9-dovEvs2VID2cAXmcleFK6rZWUKBIQOfEfcJcSSZJAqNFF9mCak-iIDetrf5hOxjmLYrg3x8UXw-bKXfgK52zpT6gN5WYnrTurCW9YXGD8WWcL56GdzeDjOSBAnM0/s200/12.png)
At the end you can see the picture in pdf
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLRj3AeRayZHF6DbVHOlGP6ndrJFrUiD_UOtzqke-ijWV1h3l3J88ZM7J3LyZAhn-o4inXxYbl71saxqf5Fz_9VEO4kwgA3VIT8TAk5jQJx5sLudSolePp-J8HwQ-bt191z9JuVhaMpsVR/s200/13.png)