Message 1 of 2
join text paragraph after PDFIMPORT
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
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 PDF
The result what I am looking for
Thanks for you help in advance.