join text paragraph after PDFIMPORT

join text paragraph after PDFIMPORT

Prashanthr
Enthusiast Enthusiast
193 Views
1 Reply
Message 1 of 2

join text paragraph after PDFIMPORT

Prashanthr
Enthusiast
Enthusiast

Hello,

 

After PDFIMPORT the text in paragraph in pdf turn into separate text. I could use the TXT2MTXT, but if I select all the text it will combine everything into single mtext which is not what I am looking for. I had used the below lisp which I had got from this forum and it used to work, but not sure now it doesn't recognize the text when selected.

 

defun C:TxtConcat (/ isAlreadyExist formatX  formatY Y&Align X&Object ; local functions
		      ss i data^ ename0 elist0 elist1 c72 item0 item1 text1 lst0 lst1)
  
 (defun isAlreadyExist (item1)
  (vl-some
    '(lambda (item0)
      (if (and
	    (equal (car  item0) (car  item1) 0.01)
	    (=     (cadr item0) (cadr item1))
	  )
       item0
      )
     )
   data^
  )
 ); isAlreadyExist

  
 ; return formated X coords
 (defun formatX ()
  (atof (rtos (car p0) 2 2))
 )
  
 ; return formated Y coords
 (defun formatY ()
  (atof (rtos (cadr p0) 2 2))
 )

 ; return formated X coords + text entity name
 (defun X&Object ()
  (list (formatX) ename)
 )
  
 ; return formated Y coords + text alignment
 (defun Y&Align ()
  (list (formatY) c72)
 )

  
 ; here starts C:TxtConcat
 (setvar "cmdecho" 0)
 (command "._undo" "_begin")
  
 (if (setq ss (ssget ":L" '((0 . "text"))))
  (progn
  (setq i -1 data^ '())
   (repeat (sslength ss)
    (setq i (1+ i) elist0 (entget (setq ename (ssname ss i))))

    (setq c72 (cdr (assoc '72 elist0)))
    (if (or (= c72 0) (= c72 3))
     (setq p0 (cdr (assoc '10 elist0)))
     (setq p0 (cdr (assoc '11 elist0)))
    ) 
      
    ; Build database
    (if (setq item0 (isAlreadyExist (Y&Align)))
     (setq data^ (cons (append item0 (list (X&Object))) (vl-remove item0 data^)))
     (setq data^ (cons (list (formatY) c72 (X&Object)) data^))
    )       
   ); repeat

   
   ; Concatenate texts from left to right
   ; base on text Alignment and Y coords
   (foreach item0 data^
    (if (> (vl-list-length (setq lst0 (cddr item0))) 1)
     (progn
      ; sort list base on X coords, from left to right
      (setq lst1 (vl-sort lst0 (function (lambda (x0 x1) (< (car x0) (car x1))))))

      (setq elist1 (entget (cadr (car lst1)))); get first text	    
      (setq text1 (cdr (assoc '1 elist1)))
	     
      (foreach item1 (cdr lst1)
       (setq text1 (strcat text1 (cdr (assoc '1 (entget (cadr item1)))))) ; concatenate texts
       (entdel (cadr item1))       	
      )

      (entmod (subst (cons '1 text1) (assoc '1 elist1) elist1)); update database
     ); progn
    ); if
   ); foreach
  ); progn
 ); if

 (command "._undo" "_end")
 (setvar "cmdecho" 1)

 (princ)
)

 

Text are separate when imported from PDFText are separate when imported from PDF

 

The result what I am looking forThe result what I am looking for

 

Thanks for you help in advance.

0 Likes
194 Views
1 Reply
Reply (1)
Message 2 of 2

Prashanthr
Enthusiast
Enthusiast

Bump. Any help please?

0 Likes