Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 38654ac

Browse files
author
Simon Kapl
committedApr 12, 2022
ANDROID-45 - added BareXmlParserFactory as a workaround for UnsupportedOperationException
1 parent 74083d3 commit 38654ac

File tree

4 files changed

+43
-2
lines changed

4 files changed

+43
-2
lines changed
 

‎app/src/main/java/com/itextpdf/android/app/ui/PdfViewerActivity.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ class PdfViewerActivity : AppCompatActivity() {
4747
this.fileName = fileName
4848
displayFileName = true
4949
pageSpacing = 100
50-
enableAnnotationRendering = false
5150
enableDoubleTapZoom = false
5251
primaryColor = "#295819"
5352
secondaryColor = "#950178"

‎library/src/main/java/com/itextpdf/android/library/PdfActivity.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.itextpdf.android.library
22

33
import android.os.Bundle
44
import androidx.appcompat.app.AppCompatActivity
5-
import com.itextpdf.android.library.R
65
import com.itextpdf.android.library.util.FileUtil
76

87

‎library/src/main/java/com/itextpdf/android/library/util/PdfManipulatorImpl.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import androidx.core.net.toUri
77
import com.itextpdf.android.library.R
88
import com.itextpdf.android.library.extensions.getPageIndex
99
import com.itextpdf.android.library.extensions.isSameAs
10+
import com.itextpdf.android.library.xmlparser.BareXmlParserFactory
1011
import com.itextpdf.io.image.ImageDataFactory
1112
import com.itextpdf.kernel.colors.Color
1213
import com.itextpdf.kernel.geom.Rectangle
@@ -19,6 +20,7 @@ import com.itextpdf.kernel.pdf.extgstate.PdfExtGState
1920
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject
2021
import com.itextpdf.kernel.utils.PageRange
2122
import com.itextpdf.kernel.utils.PdfSplitter
23+
import com.itextpdf.kernel.utils.XmlProcessorCreator
2224
import java.io.File
2325
import java.io.FileNotFoundException
2426
import java.io.FileOutputStream
@@ -31,6 +33,11 @@ internal class PdfManipulatorImpl constructor(private val context: Context, orig
3133
override val workingCopy: File = fileUtil.createTempCopyIfNotExists(context, originalFileUri = originalFileUri)
3234
private val workingCopyUri: Uri = workingCopy.toUri()
3335

36+
init {
37+
// Workaround to fix the error: java.lang.UnsupportedOperationException: This parser does not support specification "Unknown" version "0.0"
38+
XmlProcessorCreator.setXmlParserFactory(BareXmlParserFactory())
39+
}
40+
3441
/**
3542
* Splits the pdf file at the given uri and creates a new document with the selected page indices and another one for the unselected indices.
3643
* If selected page indices are empty or contains all the pages, there will only be one document with all pages.
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.itextpdf.android.library.xmlparser
2+
3+
import com.itextpdf.kernel.exceptions.PdfException
4+
import com.itextpdf.kernel.utils.IXmlParserFactory
5+
import org.xml.sax.SAXException
6+
import org.xml.sax.XMLReader
7+
import javax.xml.parsers.DocumentBuilder
8+
import javax.xml.parsers.DocumentBuilderFactory
9+
import javax.xml.parsers.ParserConfigurationException
10+
import javax.xml.parsers.SAXParserFactory
11+
12+
13+
class BareXmlParserFactory : IXmlParserFactory {
14+
override fun createDocumentBuilderInstance(namespaceAware: Boolean, ignoringComments: Boolean): DocumentBuilder {
15+
val factory = DocumentBuilderFactory.newInstance()
16+
val db: DocumentBuilder = try {
17+
factory.newDocumentBuilder()
18+
} catch (e: ParserConfigurationException) {
19+
throw PdfException(e.message, e)
20+
}
21+
return db
22+
}
23+
24+
override fun createXMLReaderInstance(namespaceAware: Boolean, validating: Boolean): XMLReader {
25+
val factory = SAXParserFactory.newInstance()
26+
val xmlReader: XMLReader = try {
27+
val saxParser = factory.newSAXParser()
28+
saxParser.xmlReader
29+
} catch (e: ParserConfigurationException) {
30+
throw PdfException(e.message, e)
31+
} catch (e: SAXException) {
32+
throw PdfException(e.message, e)
33+
}
34+
return xmlReader
35+
}
36+
}

0 commit comments

Comments
 (0)
Please sign in to comment.