Skip to content

Instantly share code, notes, and snippets.

@dizzi
Created April 29, 2011 16:35
Show Gist options
  • Save dizzi/948588 to your computer and use it in GitHub Desktop.
Save dizzi/948588 to your computer and use it in GitHub Desktop.
package cz.dizzi
import com.itextpdf.text.pdf.PRTokeniser
import com.itextpdf.text.pdf.PdfName
import com.itextpdf.text.pdf.PdfReader
import com.itextpdf.text.pdf.parser.ImageRenderInfo
import com.itextpdf.text.pdf.parser.PdfImageObject
import com.itextpdf.text.pdf.parser.PdfReaderContentParser
import com.itextpdf.text.pdf.parser.RenderListener
import com.itextpdf.text.pdf.parser.TextRenderInfo
import java.awt.image.BufferedImage
import javax.imageio.ImageIO
class PDF2Text {
public static void main(String[] args) {
PdfReader reader = new PdfReader("d:\\autoskola\\vestnik20110426.pdf");
def pages = reader.getNumberOfPages()
println "Pages: " + pages
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
for (i in 3..pages) {
print "."
if(((i-2)%20)==0)
println ""
parser.processContent(i, new RenderListener(){
def textFile
{
this.textFile = new File("D:\\autoskola\\text.txt")
}
public void beginTextBlock() { }
public void endTextBlock() { }
public void renderImage(ImageRenderInfo renderInfo) {
def imgPlaceholder = "<Image>-"+renderInfo.getRef().getNumber()
//println imgPlaceholder
this.textFile.append(imgPlaceholder+"\n")
saveJPG(renderInfo, "D:\\autoskola\\img%s.%s")
}
public void renderText(TextRenderInfo renderInfo) {
def text = renderInfo.getText()
if(text ==~ /\d{1,2}\.\d{1,2}\.\d{4}/) // remove dates
return
if(text ==~ /\d{1,3}/) // remove page number
return
if(text ==~ /V.stn.k dopravy/) //remove header/footer
return
if(text ==~ /Zkou.ka z p.edpis. o provozu na pozemn.ch komunikac.ch a zdravotnick. p..pravy/) //remove header/footer
return
if(text ==~ /Zkou.ka profesn. zp.sobilosti/) //remove header/footer
return
if(text ==~ /P..loha/) //remove header/footer
return
if(text ==~ /\d{8}/) // new line before new question
text="\n"+text
//println text
this.textFile.append(text+"\n")
}
public void saveJPG(renderInfo, path){
String filename;
FileOutputStream os;
PdfImageObject image = renderInfo.getImage();
PdfName filter = (PdfName)image.get(PdfName.FILTER);
if (PdfName.DCTDECODE.equals(filter)) {
filename = String.format(path, renderInfo.getRef().getNumber(), "jpg");
os = new FileOutputStream(filename);
os.write(image.getStreamBytes());
os.flush();
os.close();
} else {
BufferedImage awtimage = renderInfo.getImage().getBufferedImage();
if (awtimage != null) {
filename = String.format(path, renderInfo.getRef().getNumber(), "png");
ImageIO.write(awtimage, "png", new FileOutputStream(filename));
}
}
}
});
}
}
}
10110045
Na této křižovatce
<Image>-835
a) je přednost v jízdě upravena svislými dopravními značkami.
b) není přednost v jízdě upravena svislými dopravními značkami.
c) má přednost v jízdě vozidlo z výhledu.
06050556
Lhůta pro přistavení silničního vozidla k pravidelnému měření emisí se počítá ode dne:
a) Prodeje vozidla a potom vždy ode dne provedení pravidelného měření emisí zapsaného v osvědčení o
měření emisí.
b) Prvního zaregistrování vozidla a potom vždy ode dne provedení pravidelného měření emisí zapsaného
v osvědčení o měření emisí.
c) Vyrobení vozidla a potom vždy v pravidelných pětiletých lhůtách.
06060086
Zjistíme-li závady na brzdovém systému, které zjevně znemožňují účinně zastavit vozidlo a tím
ohrožují bezpečnost provozu na pozemních komunikacích:
a) Vozidlo lze provozovat na pozemních komunikacích na základě jednorázového povolení policie.
b) S vozidlem lze přiměřenou rychlostí dojet jen do nejbližšího místa, kde lze závadu odstranit.
c) Vozidlo nesmí být užito k provozu na pozemních komunikacích, smí však být vlečeno na tyči.
06060087
Lhůta pro přistavení silničního vozidla k pravidelné technické prohlídce se počítá ode dne:
a) Prvního zaregistrování silničního vozidla a potom vždy ode dne provedení pravidelné technické
prohlídky.
b) Prodeje silničního vozidla a potom vždy ode dne úspěšného provedení pravidelné technické prohlídky.
c) Vyrobení silničního vozidla a potom vždy v pravidelných pětiletých lhůtách.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment