Bug 183809 PDF emitter does not render URLs with specified target correctly
When the hyperlink has specified "_blank" target it's rendered with PdfAction(hyperlink) but when the target is "_parent" or "_top" or "_self" it's rendered with PdfAction.gotoRemotePage(hyperlink, bookmark, false, false) which causes something like "file does not exist" error in PDF viewer. The following change in PDFEmitter from: private PdfAction createPdfAction(String hyperlink, String bookmark, String target, int type) { if ("_blank".equalsIgnoreCase(target)) //$NON-NLS-1$ // Opens the target in a new window. { return new PdfAction(hyperlink); } else ... to: private PdfAction createPdfAction(String hyperlink, String bookmark, String target, int type) { if ("_top".equalsIgnoreCase(target) || //$NON-NLS-1$ "_parent".equalsIgnoreCase(target) || //$NON-NLS-1$ "_blank".equalsIgnoreCase(target) || //$NON-NLS-1$ "_self".equalsIgnoreCase(target)) //$NON-NLS-1$ // Opens the target in a new window. { return new PdfAction(hyperlink); } else ... works for me.
engine/org.eclipse.birt.report.engine.emitter.pdf/src/org/eclipse/birt/report/engine/emitter/pdf/PDFPage.java
}
	public void drawBackgroundImage( int x, int y, int width, int height,
			String repeat, String imageUrl, int absPosX, int absPosY )
			throws IOException
	{
		drawBackgroundImage( convertToPoint( x ), convertToPoint( y ),
				convertToPoint( width ), convertToPoint( height ), repeat,
				imageUrl, convertToPoint( absPosX ), convertToPoint( absPosY ) );
	}
	public void drawBackgroundImage( float x, float y, float width,
			float height, String repeat, String imageUrl, float absPosX,
			float absPosY ) throws IOException
	{
		y = transformY( y );
		cbUnder.saveState( );
		Image img = null;
		try
		{
			img = Image.getInstance( imageUrl );
			if ( "no-repeat".equalsIgnoreCase( repeat ) ) 
			{
				TplValueTriple triple = computeTplHorizontalValPair( absPosX,
						x, width, img.scaledWidth( ) );
				float tplOriginX = triple.getTplOrigin( );
				float tplWidth = triple.getTplSize( );
				float translationX = triple.getTranslation( );
				triple = computeTplVerticalValTriple( absPosY, y, height, img
						.scaledHeight( ) );
				float tplOrininY = triple.getTplOrigin( );
				float tplHeight = triple.getTplSize( );