Index: pdfbox/src/test/java/org/apache/pdfbox/util/TestPDFText2HTML.java
===================================================================
--- pdfbox/src/test/java/org/apache/pdfbox/util/TestPDFText2HTML.java	(revision 0)
+++ pdfbox/src/test/java/org/apache/pdfbox/util/TestPDFText2HTML.java	(revision 0)
@@ -0,0 +1,44 @@
+package org.apache.pdfbox.util;
+
+import java.io.IOException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDPage;
+import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
+import org.apache.pdfbox.pdmodel.font.PDFont;
+import org.apache.pdfbox.pdmodel.font.PDType1Font;
+
+import junit.framework.TestCase;
+
+public class TestPDFText2HTML extends TestCase {
+    private PDDocument createDocument() throws IOException {
+        PDDocument doc = new PDDocument();
+        PDPage page = new PDPage();
+        doc.addPage(page);
+        PDFont font = PDType1Font.HELVETICA;
+        PDPageContentStream contentStream = new PDPageContentStream(doc, page);
+        contentStream.beginText();
+        contentStream.setFont(font, 12);
+        contentStream.moveTextPositionByAmount(100, 700);
+        contentStream.drawString("<foo>");
+        contentStream.endText();
+        contentStream.close();
+        return doc;
+    }
+
+    public void testEscapeTitle() throws IOException {
+        PDFTextStripper stripper = new PDFText2HTML("UTF-8");
+        PDDocument doc = createDocument();
+        doc.getDocumentInformation().setTitle("<script>\u3042");
+        String text = stripper.getText(doc);
+       
+        Matcher m = Pattern.compile("<title>(.*?)</title>").matcher(text);
+        assertTrue(m.find());
+        assertEquals("&lt;script&gt;&#12354;", m.group(1));
+        
+        assertTrue(text.indexOf("&lt;foo&gt;") >= 0);
+        
+    }
+}
Index: pdfbox/src/main/java/org/apache/pdfbox/util/PDFText2HTML.java
===================================================================
--- pdfbox/src/main/java/org/apache/pdfbox/util/PDFText2HTML.java	(revision 1075209)
+++ pdfbox/src/main/java/org/apache/pdfbox/util/PDFText2HTML.java	(working copy)
@@ -67,7 +67,7 @@
         buf.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"" + "\n" 
                 + "\"http://www.w3.org/TR/html4/loose.dtd\">\n");
         buf.append("<html><head>");
-        buf.append("<title>" + getTitle() + "</title>\n");
+        buf.append("<title>" + escape(getTitle()) + "</title>\n");
         if(outputEncoding != null)
         {
             buf.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=" 
@@ -188,6 +188,18 @@
      */
     protected void writeString(String chars) throws IOException 
     {
+        super.writeString(escape(chars));
+    }
+    
+    /**
+     * Escape some HTML characters.
+     *
+     * @param chars String to be escaped
+     * @return returns escaped String.
+     */
+    private String escape(String chars)
+    {
+    	StringBuilder builder = new StringBuilder(chars.length());
         for (int i = 0; i < chars.length(); i++) 
         {
             char c = chars.charAt(i);
@@ -195,28 +207,29 @@
             if ((c < 32) || (c > 126)) 
             {
                 int charAsInt = c;
-                super.writeString("&#" + charAsInt + ";");
+                builder.append("&#").append(charAsInt).append(";");
             } 
             else 
             {
                 switch (c) 
                 {
                 case 34:
-                    super.writeString("&quot;");
+                    builder.append("&quot;");
                     break;
                 case 38:
-                    super.writeString("&amp;");
+                    builder.append("&amp;");
                     break;
                 case 60:
-                    super.writeString("&lt;");
+                    builder.append("&lt;");
                     break;
                 case 62:
-                    super.writeString("&gt;");
+                    builder.append("&gt;");
                     break;
                 default:
-                    super.writeString(String.valueOf(c));
+                    builder.append(String.valueOf(c));
                 }
             }
         }
+        return builder.toString();
     }
 }
