Advertisement
Guest User

Untitled

a guest
Jan 11th, 2020
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.63 KB | None | 0 0
  1. ;(load "~/quicklisp/quicklisp.lisp")
  2. (load "~/quicklisp/setup.lisp")
  3. ;(ql:quickload "cl-typesetting")
  4. (ql:quickload "cl-pdf")
  5. (require 'cl-pdf)
  6. (require 'cl-ppcre)
  7.  
  8. ;(declaim (optimize (safety 2) (debug 3) (speed 0)))
  9. (declaim (optimize (safety 2) (debug 3) (speed 1) (space 0) (compilation-speed 1)))
  10. (if (> (length sb-ext:*posix-argv*) 1)
  11. (progn
  12. (defparameter *leer-este-archivo* (cadr sb-ext:*posix-argv*))
  13. (defparameter *escribir-este-archivo* (caddr sb-ext:*posix-argv*)))
  14. (progn
  15. (defparameter *leer-este-archivo* "~/pdf/drogmail.txt")
  16. (defparameter *escribir-este-archivo* "~/pdf/ecc2.pdf")))
  17.  
  18. (defun datos-procesamiento-de-linea ()
  19. (let ((istream nil)
  20. (cadena-leida "")
  21. (cadenas-extraidas nil))
  22. (break)
  23. (values
  24. (lambda (x) (setf istream x))
  25. (lambda (x) (setf cadena-leida x))
  26. (lambda (x) (setf cadenas-extraidas x))
  27. (lambda () istream)
  28. (lambda () cadena-leida)
  29. (lambda () cadenas-extraidas))))
  30.  
  31. (defun procesar-la-linea (cadena-leida-setter
  32. cadenas-extraidas-setter
  33. istream-setter
  34. cadena-leida-getter
  35. cadenas-extraidas-getter
  36. istream-getter)
  37.  
  38.  
  39. (let* ((cadena-leida (funcall cadena-leida-getter))
  40. (cadenas-extraidas (funcall cadenas-extraidas-getter))
  41. (istream (funcall istream-getter)))
  42. (if (eql (length cadenas-extraidas) 0)
  43. (progn
  44. (setf cadena-leida (read-line istream nil 'fin))
  45. (funcall cadena-leida-setter cadena-leida)
  46. (if (eq cadena-leida 'fin)
  47. (setf cadenas-extraidas 'nil)
  48. (setf cadenas-extraidas (cl-ppcre:split (string #\Page) cadena-leida)))
  49. (funcall cadenas-extraidas-setter cadenas-extraidas))
  50. (funcall cadenas-extraidas-setter (cdr cadenas-extraidas )))))
  51.  
  52. (defun imprimir-el-texto (x y font size text)
  53. (break)
  54. (pdf:in-text-mode
  55. (pdf:set-font font size)
  56. (pdf:move-text x y)
  57. (pdf:draw-text (format nil "~A" text))))
  58.  
  59. (defun ajustar-rectangulo (coordenadas ajustes)
  60. (break)
  61. (loop
  62. for i in coordenadas
  63. for j in ajustes
  64. collect (+ i j)))
  65.  
  66. (defun imprimir-lineas (margenx topy font size)
  67. (break)
  68. (let ((nombre-de-archivo-pasado-por-parametro *leer-este-archivo*))
  69. (multiple-value-bind (istream-setter cadena-leida-setter cadenas-extraidas-setter istream-getter cadena-leida-getter cadenas-extraidas-getter)
  70. (datos-procesamiento-de-linea)
  71. (with-open-file (s nombre-de-archivo-pasado-por-parametro :direction :input :external-format :iso-8859-1)
  72. (funcall istream-setter s)
  73. (procesar-la-linea cadena-leida-setter cadenas-extraidas-setter istream-setter
  74. cadena-leida-getter cadenas-extraidas-getter istream-getter)
  75. (do ((mypage 1 (setf mypage (+ 1 mypage)))
  76. (hallada-primera-linea-no-en-blanco nil nil)
  77. (m-imprimir-en-esta-linea-del-pdf 3 3))
  78. ((or (eq (funcall cadena-leida-getter) 'fin)
  79. (eql (length (funcall cadenas-extraidas-getter)) 0)))
  80. (pdf:with-page ()
  81. (pdf:add-font-to-page font)
  82. (let* ((coords
  83. (ajustar-rectangulo (coerce pdf:*a4-portrait-page-bounds* 'list)
  84. '(+1 +1 -2 -2)))
  85. (coords-inner
  86. (ajustar-rectangulo coords
  87. '(+0.5 +0.5 -1 -1))))
  88. (apply #'pdf:rectangle coords)
  89. (pdf:close-fill-and-stroke)
  90. (pdf:set-rgb-fill 255.0 255.0 255.0)
  91. (apply #'pdf:rectangle coords-inner )
  92. (pdf:close-fill-and-stroke)
  93. (pdf:set-rgb-fill 0 0 0)
  94. (imprimir-el-texto 300 4 font 6 (format nil "Página ~A" mypage)))
  95. (block control-L
  96. (do* ((n 0 (setf n (+ 1 n)))
  97. (m m-imprimir-en-esta-linea-del-pdf m-imprimir-en-esta-linea-del-pdf)
  98. (posy (- topy (* size m)) (- topy (* size m))))
  99. ((or
  100. (eq (funcall cadena-leida-getter) 'fin)
  101. (eql (length (funcall cadenas-extraidas-getter)) 0)
  102. (< posy size)))
  103. (if hallada-primera-linea-no-en-blanco
  104. (progn
  105. (imprimir-el-texto margenx posy font size (car (funcall cadenas-extraidas-getter)))
  106. (incf m-imprimir-en-esta-linea-del-pdf)
  107. (when (length (funcall cadenas-extraidas-getter))
  108. (return-from control-L)))
  109. (when (> (length (car (funcall cadenas-extraidas-getter))) 2)
  110. (setf hallada-primera-linea-no-en-blanco t)))))))))))
  111.  
  112.  
  113. (defun imprimir-documento ()
  114. (pdf:with-document ()
  115. (pdf:load-ttu-font "~/quicklisp/dists/quicklisp/software/cl-pdf-20191007-git/contrib/FreeMono.ufm" "~/quicklisp/dists/quicklisp/software/cl-pdf-20191007-git/contrib/FreeMono.ttf")
  116. (let ((margenx 20)
  117. (topy 800)
  118. (font (pdf:get-font "FreeMono"))
  119. (size 11))
  120. (imprimir-lineas margenx topy font size))
  121. (pdf:write-document *escribir-este-archivo*)))
  122.  
  123. (imprimir-documento)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement