Signin/Signup with: 
Welcome, Guest
Username: Password: Remember me
Questions about Android development and PDF
  • Page:
  • 1
  • 2

TOPIC:

Caching highlights outside of PDF file 8 years 6 months ago #11282

  • mrawy
  • mrawy's Avatar
  • Offline
  • Junior Member
  • Junior Member
  • Posts: 20
  • Thank you received: 0
I called them before: page.AddAnnotMarkup(m_index1, m_index2, 0);
public void OnPDFSelectEnd()
	{
		PDFPos pos = m_view.vGetPos((int)myRects[0], (int)myRects[1]);
		PDFVPage vpage = m_view.vGetPage(pos.pageno);
		Page page = vpage.GetPage();
		if( page != null )
		{
			page.ObjsStart();
			float pt[] = new float[2];
			pt[0] = pos.x;
			pt[1] = pos.y;
			int m_index1 = page.ObjsGetCharIndex(pt);
			m_index1 = page.ObjsAlignWord(m_index1, -1);
			pt[0] = vpage.ToPDFX(myRects[2], m_view.vGetX());
			pt[1] = vpage.ToPDFY(myRects[3], m_view.vGetY());
			int m_index2 = page.ObjsGetCharIndex(pt);
			m_index2 = page.ObjsAlignWord(m_index2, 1);
			page.AddAnnotMarkup(m_index1, m_index2, 0);
			m_view.vRenderSync(vpage);
			if( m_listener != null )
				m_listener.OnPageModified(vpage.GetPageNo());
		}

//		if( m_listener != null )
//			m_listener.OnSelectEnd(m_view.vGetSel());
	}
The result:

Attachments:

Please Log in or Create an account to join the conversation.

Caching highlights outside of PDF file 8 years 6 months ago #11289

  • nermeen
  • nermeen's Avatar
  • Offline
  • Platinum Member
  • Platinum Member
  • Posts: 962
  • Thank you received: 87
We have just tested your code, and it's working (the difference in only in the rect variables).

Make sure that index1 is smaller than index2:
float pt[] = new float[2];
		pt[0] = x1;
		pt[1] = y1;
		m_index1 = m_page.ObjsGetCharIndex(pt);
		pt[0] = x2;
		pt[1] = y2;
		m_index2 = m_page.ObjsGetCharIndex(pt);
		if( m_index1 > m_index2 )
		{
			int tmp = m_index1;
			m_index1 = m_index2;
			m_index2 = tmp;
		}
		m_index1 = m_page.ObjsAlignWord(m_index1, -1);
		m_index2 = m_page.ObjsAlignWord(m_index2, 1);

Did you try with other documents? if this happens with only one pdf, can you send it to us please.
The following user(s) said Thank You: mrawy

Please Log in or Create an account to join the conversation.

Last edit: by nermeen.

Caching highlights outside of PDF file 8 years 6 months ago #11317

  • mrawy
  • mrawy's Avatar
  • Offline
  • Junior Member
  • Junior Member
  • Posts: 20
  • Thank you received: 0
Hi, It's working on English content only but not working properly on Arabic content.
Please check the attached screenshots and you can test it on attached file.




File Attachment:

File Name: la_tahzan-3.pdf
File Size:143 KB

Your fast response is highly appreciated.
Attachments:

Please Log in or Create an account to join the conversation.

Caching highlights outside of PDF file 8 years 6 months ago #11319

  • nermeen
  • nermeen's Avatar
  • Offline
  • Platinum Member
  • Platinum Member
  • Posts: 962
  • Thank you received: 87
Dear Mrawy,

We couldn't reproduce the issue usinf your file, can you reproduce it using the demo project?
Can you tells us the steps used to reproduce it?

Please Log in or Create an account to join the conversation.

Caching highlights outside of PDF file 8 years 6 months ago #11320

  • mrawy
  • mrawy's Avatar
  • Offline
  • Junior Member
  • Junior Member
  • Posts: 20
  • Thank you received: 0
Hi,
Steps to reproduce this issue using the demo project:
1- Modify PDFReader.class OnPDFSelecting method to be:
public void OnPDFSelecting(Canvas canvas, int[] rect1, int[] rect2)
	{
		Paint paint = new Paint();
		paint.setARGB(0x80, 0, 0, 0x80);
		if( rect2[1] > rect1[3] )
		{
			canvas.drawCircle( rect1[0], rect1[1], 5, paint);
			canvas.drawCircle( rect2[2], rect2[3], 5, paint);
			float[] rect = new float[3];
			rect[0] = rect1[0];
			rect[1] = rect1[1];
			rect[2] = rect2[2];
			rect[3] = rect2[3];
			myRects = rect;
		}
		else
		{
			canvas.drawCircle( rect2[0], rect2[1], 5, paint);
			canvas.drawCircle( rect1[2], rect1[3], 5, paint);
			float[] rect = new float[4];
			rect[0] = rect2[0];
			rect[1] = rect2[1];
			rect[2] = rect1[2];
			rect[3] = rect1[3];
			myRects = rect;
		}
	}
2- Modify PDFReader.class OnPDFSelectEnd method to be:
public void OnPDFSelectEnd()
	{
		PDFPos pos = m_view.vGetPos((int)myRects[0], (int)myRects[1]);
		PDFVPage vpage = m_view.vGetPage(pos.pageno);
		Page page = vpage.GetPage();
		if( page != null )
		{
			page.ObjsStart();
			float pt[] = new float[2];
			pt[0] = pos.x;
			pt[1] = pos.y;
			int m_index1 = page.ObjsGetCharIndex(pt);
//			m_index1 = page.ObjsAlignWord(m_index1, -1);
			pt[0] = vpage.ToPDFX(myRects[2], m_view.vGetX());
			pt[1] = vpage.ToPDFY(myRects[3], m_view.vGetY());
			int m_index2 = page.ObjsGetCharIndex(pt);
//			m_index2 = page.ObjsAlignWord(m_index2, 1);
			page.AddAnnotMarkup(m_index1, m_index2, 0);
			m_view.vRenderSync(vpage);
			if( m_listener != null )
				m_listener.OnPageModified(vpage.GetPageNo());
		}

//		if( m_listener != null )
//			m_listener.OnSelectEnd(m_view.vGetSel());
	}
Or use attached PDFReader.class

File Attachment:

File Name: PDFReader.java
File Size:47 KB
Attachments:

Please Log in or Create an account to join the conversation.

Caching highlights outside of PDF file 8 years 6 months ago #11322

  • nermeen
  • nermeen's Avatar
  • Offline
  • Platinum Member
  • Platinum Member
  • Posts: 962
  • Thank you received: 87
Dear Mrawy,

Try the following implementation (passing directly the rect values to the select end listener):

Change the OnPDFSelectEnd in PDFViewListener to:
public void OnPDFSelectEnd(float x1, float y1, float x2, float y2);
In PDFView.motionSelect change the call to the listener to:
if( m_listener != null ) m_listener.OnPDFSelectEnd(m_holdx, m_holdy, m_movex, m_movey);
And finally change the implementation of the listener itself as:
public void OnPDFSelectEnd(float x1, float y1, float x2, float y2)
	{
		PDFPos pos = m_view.vGetPos((int)x1, (int)y1);
		PDFVPage vpage = m_view.vGetPage(pos.pageno);
		Page page = vpage.GetPage();
		if( page != null )
		{
			page.ObjsStart();
			float pt[] = new float[2];
			pt[0] = pos.x;
			pt[1] = pos.y;
			int m_index1 = page.ObjsGetCharIndex(pt);
			pt[0] = vpage.ToPDFX(x2, m_view.vGetX());
			pt[1] = vpage.ToPDFY(y2, m_view.vGetY());
			int m_index2 = page.ObjsGetCharIndex(pt);
			if( m_index1 > m_index2 )
			{
				int tmp = m_index1;
				m_index1 = m_index2;
				m_index2 = tmp;
			}
			m_index1 = page.ObjsAlignWord(m_index1, -1);
			m_index2 = page.ObjsAlignWord(m_index2, 1);
			page.AddAnnotMarkup(m_index1, m_index2, 0);
			m_view.vRenderSync(vpage);
			if( m_listener != null )
				m_listener.OnPageModified(vpage.GetPageNo());
		}

//		if( m_listener != null )
//			m_listener.OnSelectEnd(m_view.vGetSel());
	}

Note; if you do not have the source code of the jar, please check here

Please Log in or Create an account to join the conversation.

  • Page:
  • 1
  • 2
Powered by Kunena Forum