Cześć,

Mam kilkaset plików pdf (zawierajacych różne tabele), przerabiam je na xml za pomocą pdftohtml:
Kod
pdftohtml filename -xml -enc "UTF-8"

Wynikiem jest plik XML o strukturze:
Kod
page (number=int, width=int, height=int)
    text (left=int,top=int,width=int,height=int)
        content

który po wizualizacji wygląda np. w ten sposób: http://imgur.com/a/3vDEg

Teraz potrzebuję algorytmu który będzie potrafił tego xml zamienić na tabele html, musi więc:
- wykryć kolumny
- wykryć wiersze
- połączyć treść wierszy (te małe kwadraciki to polskie znaki które są odłączone od reszty)

Macie jakieś fajne pomysły?
Może ktoś z Was spotkał się kiedyś z takim problemem?
Albo w ogóle ide w złym kierunku i takie narzędzie już istnieje? (szukałem, ale nic godnego uwagi nie ma)

Skrypt do wizualizacji plików wynikowych (xml) z pdftohtml, gdyby ktoś chciał sie pobawić:
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8"/>
  5. <title>xmltotable</title>
  6. </head>
  7. <body>
  8. <input type="file" name="file" />
  9. <script type="text/javascript">
  10. window.onload = function() {
  11. document.getElementsByTagName('input')[0].addEventListener('change', function(evt) {
  12. var reader = new FileReader();
  13. reader.onloadend = function(event) {
  14. var parser = new DOMParser(),
  15. xml = parser.parseFromString(event.target.result.toString(), 'text/xml'),
  16. pages = xml.getElementsByTagName('page');
  17. for(var p in pages) {
  18. if(pages.hasOwnProperty(p)) {
  19. var page = pages[p],
  20. texts = page.getElementsByTagName('text'),
  21. canvas = document.createElement('canvas'),
  22. ctx = canvas.getContext('2d');
  23. canvas.width = page.getAttribute('width');
  24. canvas.height = page.getAttribute('height');
  25. canvas.style.marginTop = '10px';
  26. ctx.strokeRect(0, 0, canvas.width, canvas.height);
  27. for(var t in texts) {
  28. if(texts.hasOwnProperty(t)) {
  29. var text = texts[t];
  30. ctx.strokeRect(
  31. parseInt(text.getAttribute('left')),
  32. parseInt(text.getAttribute('top')),
  33. parseInt(text.getAttribute('width')),
  34. parseInt(text.getAttribute('height'))
  35. );
  36. }
  37. }
  38. document.body.appendChild(canvas);
  39. }
  40. }
  41. };
  42. reader.readAsText(evt.target.files[0], 'UTF-8');
  43. }, false);
  44. };
  45. </script>
  46. </body>
  47. </html>