forked from spinfo/upcase
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPdfExport.java
More file actions
128 lines (95 loc) · 3.54 KB
/
PdfExport.java
File metadata and controls
128 lines (95 loc) · 3.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package de.uni_koeln.spinfo.upcase.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;
import de.uni_koeln.spinfo.upcase.mongodb.data.document.future.Box;
import de.uni_koeln.spinfo.upcase.mongodb.data.document.future.Page;
import de.uni_koeln.spinfo.upcase.mongodb.data.document.future.Word;
import de.uni_koeln.spinfo.upcase.mongodb.repository.future.PageRepository;
@Component
public class PdfExport {
Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private HOCRParser hocrParser;
@Autowired
private PageRepository pageRepository;
private Page page;
private String token;
int x1;
int x2;
int y1;
int y2;
float boxWidth;
float boxHeight;
private String src = "OCR/PPN345572629_0004-0007.png";
float pointsPerInch = 72.0f;
float lineWidth=0;
public void exportToPDF() throws DocumentException, IOException {
Image pageImage = Image.getInstance(src);
// Image pageImage = Image.g;
float dotsPerPointX = pageImage.getDpiX() / pointsPerInch;
float dotsPerPointY = pageImage.getDpiY() / pointsPerInch;
float pageImagePixelHeight = pageImage.getHeight();
Rectangle whitePage = new Rectangle(pageImage.getWidth() / dotsPerPointX,
pageImage.getHeight() / dotsPerPointY);
com.itextpdf.text.Document pdfDocument = new com.itextpdf.text.Document(whitePage);
PdfWriter pdfWriter = PdfWriter.getInstance(pdfDocument, new FileOutputStream("sample.pdf"));
pdfDocument.open();
PdfContentByte cb = pdfWriter.getDirectContent();
pageImage.scaleToFit(pageImage.getWidth() / dotsPerPointX, pageImage.getHeight() / dotsPerPointY);
pageImage.setAbsolutePosition(0, 0);
pdfWriter.getDirectContent().addImage(pageImage);
whitePage.setBackgroundColor(BaseColor.WHITE);
cb.rectangle(whitePage);
BaseFont font = BaseFont.createFont("src/main/webapp/bootstrap/fonts/OldNewspaperTypes.ttf", "UTF-8", BaseFont.EMBEDDED);
List<Word> words = page.getWords();
for (Word word : words) {
token = word.getToken();
Box box = word.getBox();
x1 = box.getX1();
y1 = box.getY1();
x2 = box.getX2();
y2 = box.getY2();
boxWidth = (x2 - x1) / dotsPerPointX;
boxHeight = (y2 - y1) / dotsPerPointY;
System.out.println(token + "-->" + box);
cb.beginText();
boolean textScaled = false;
do {
lineWidth = font.getWidthPoint(token,boxHeight);
if(lineWidth < boxWidth){
textScaled = true;
} else {
boxHeight-=0.1f;
}
} while (textScaled==false);
cb.setFontAndSize(font, boxHeight);
cb.moveText((float) ((x1) / dotsPerPointX), (float) ((pageImagePixelHeight
- y2) / dotsPerPointY));
cb.showText(token);
System.out.println(cb);
cb.endText();
}
pdfDocument.close();
}
}