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
{
		startY = transformY( startY );
		endY = transformY( endY );
		contentByte.moveTo( startX, startY );
		contentByte.setLineWidth( width );
		contentByte.lineTo( endX, endY );
		contentByte.setColorStroke( color );
		contentByte.stroke( );
	}
	private void drawText( String text, float textX, float textY,
			FontInfo fontInfo, float characterSpacing, float wordSpacing,
			Color color, CSSValue align, boolean isTotalPage )
	{
		PdfContentByte currentContentByte = isTotalPage
				? totalPageTemplate
				: contentByte;
		float containerHeight = isTotalPage
				? totalPageTemplate.getHeight( )
				: pageHeight;
		currentContentByte.saveState( );
		
		currentContentByte.beginText( );
		if ( null != color )
		{
			currentContentByte.setColorFill( color );
			currentContentByte.setColorStroke( color );
		}
		BaseFont font = fontInfo.getBaseFont( );
		float fontSize = fontInfo.getFontSize( );
		currentContentByte.setFontAndSize( font, fontSize );