|
View:
New views
1 Messages
—
Rating Filter:
Alert me
|
|
|
SVG2PDF Some characters not recognised when transforming to PDFHi there, I have a Java Stored Procedure in Oracle that converts a
CLOB feed of SVG based XML into a PDF file and stores it as a BFILE. The following code works. Code: CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED
DMG."com/aca/pdfwriter" AS package com.aca.pdfwriter; //import Java import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.OutputStream; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.sql.PreparedStatement; import java.sql.Blob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; //import oracle import oracle.jdbc.pool.OracleDataSource; import oracle.jdbc.OracleResultSet; import oracle.sql.BFILE; import oracle.sql.BLOB; import oracle.sql.CLOB; //import Batik import org.apache.batik.transcoder.Transcoder; import org.apache.batik.transcoder.TranscoderException; import org.apache.batik.transcoder.TranscoderInput; import org.apache.batik.transcoder.TranscoderOutput; import org.apache.batik.gvt.font.GVTGlyphVector; import
org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder; import org.apache.fop.svg.PDFTranscoder; import org.apache.fop.fonts.apps.PFMReader; public class svg2pdf{ public static int
convertSVG2PDF(oracle.sql.CLOB svg) throws IOException,
TranscoderException,SQLException {
InputStream in = null; int seq =0; Transcoder
transcoder = new org.apache.fop.svg.PDFTranscoder(); //Setup input //InputStream in
= new java.io.FileInputStream(svg); //svg.open(); //in =
svg.getBinaryStream(); in =
svg.getAsciiStream(); try {
TranscoderInput input = new TranscoderInput(in);
//get the current connection
Connection conn = DriverManager.getConnection("jdbc:default:connection");
conn.setAutoCommit(false); //must be set to false
//Get unique sequence number
Statement stmt = conn.createStatement();
ResultSet rset = stmt.executeQuery("select TEMP_BLOB_SEQ.nextval from
dual");
while (rset.next()) {
seq = ((OracleResultSet)rset).getInt(1);
}
stmt.close();
//Prepare the new blob
PreparedStatement pstmt = conn.prepareStatement("insert into temp_blob
(unique_id,blobby) values (" + seq + ", ?)");
oracle.sql.BLOB myBlob = oracle.sql.BLOB.createTemporary(conn, true,
oracle.sql.BLOB.DURATION_SESSION);
//Setup the outputstream
OutputStream out = null;
out = myBlob.setBinaryStream(0);
try {
System.out.println("start PDF" );
TranscoderOutput output = new TranscoderOutput(out);
//Do the transformation
transcoder.transcode(input, output);
System.out.println("Generated PDF" );
pstmt.setBlob(1,myBlob);
pstmt.execute();
pstmt.close();
} catch (Exception e){
System.out.println(e.getMessage() );
e.printStackTrace();
PreparedStatement xxx = conn.prepareStatement("insert into z (z) values
(" + e.getMessage() + ")");
xxx.execute();
xxx.close();
} finally {
out.close();
conn.commit();
conn.close();
} } finally {
in.close();
//svg.closeFile();
} return seq;
} } / ********************************** If I use the following code as my input CLOB the source is
successfully transformed to PDF output. Source: <?xml version="1.0"
encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="1320px" height="360px" viewBox="0 0
1320 360">
<script
type="text/javascript">
<![CDATA[
function ToggleRptValues(){
var div = svgDocument.getElementById('Planned');
if (div != null){
var obj = svgDocument.getElementById('Planned');
vis = obj.getAttribute("style");
if (vis == "visibility:visible")
obj.setAttribute("style","visibility:hidden");
else
obj.setAttribute("style","visibility:visible");
}
div = svgDocument.getElementById('Forecast');
if (div != null){
var obj = svgDocument.getElementById('Forecast');
vis = obj.getAttribute("style");
if (vis == "visibility:visible")
obj.setAttribute("style","visibility:hidden");
else
obj.setAttribute("style","visibility:visible");
}
div = svgDocument.getElementById('Actual');
if (div != null){
var obj = svgDocument.getElementById('Actual');
vis = obj.getAttribute("style");
if (vis == "visibility:visible")
obj.setAttribute("style","visibility:hidden");
else
obj.setAttribute("style","visibility:visible");
}
div = svgDocument.getElementById('Conformant');
if (div != null){
var obj = svgDocument.getElementById('Conformant');
vis = obj.getAttribute("style");
if (vis == "visibility:visible")
obj.setAttribute("style","visibility:hidden");
else
obj.setAttribute("style","visibility:visible");
}
}
//]]>
</script> <text x="528"
y="26"
style="text-anchor: middle; font-family:Courier;font-size:12pt;">
CDRL Delivery Performance Report </text> <line
x1="267.384615384615384615384615384615384615" y1="36"
x2="267.384615384615384615384615384615384615" y2="306"
style="stroke: black;" /> <text
x="272.384615384615384615384615384615384615" y="46"
style="fill:black; stroke-width: 1;
font-family:Courier;font-size:10pt;">Today</text> <line x1="100"
y1="302.599646486964206805125939019001325674" x2="100" y2="302.599646486964206805125939019001325674"
style=" stroke: blue;" /> <line x1="100"
y1="302.599646486964206805125939019001325674"
x2="165.415384615384615384615384615384615385"
y2="218.72425983208130799823243482103402563" style=" stroke:
blue;" /> <line
x1="165.415384615384615384615384615384615385"
y1="218.72425983208130799823243482103402563"
x2="230.830769230769230769230769230769230769"
y2="117.966416261599646486964206805125939019" style=" stroke:
blue;" /> <line
x1="230.830769230769230769230769230769230769"
y1="117.966416261599646486964206805125939019"
x2="296.246153846153846153846153846153846154"
y2="93.269111798497569597878921785240830756" style=" stroke:
blue;" /> <line
x1="296.246153846153846153846153846153846154" y1="93.269111798497569597878921785240830756"
x2="361.661538461538461538461538461538461538"
y2="79.488731771984091913389306230667255855" style=" stroke:
blue;" /> <line
x1="361.661538461538461538461538461538461538"
y1="79.488731771984091913389306230667255855" x2="427.076923076923076923076923076923076923"
y2="67.61732213875386654882898806893504198" style=" stroke:
blue;" /> <line
x1="427.076923076923076923076923076923076923"
y1="67.61732213875386654882898806893504198"
x2="492.492307692307692307692307692307692308"
y2="58.430402121078214759169244365885992046" style=" stroke:
blue;" /> <line
x1="492.492307692307692307692307692307692308"
y1="58.430402121078214759169244365885992046"
x2="557.907692307692307692307692307692307692"
y2="49.064516129032258064516129032258064516" style=" stroke:
blue;" /> <line
x1="557.907692307692307692307692307692307692"
y1="49.064516129032258064516129032258064516"
x2="623.323076923076923076923076923076923077"
y2="40.653115333627927529827662395050817499" style=" stroke:
blue;" /> <line
x1="623.323076923076923076923076923076923077"
y1="40.653115333627927529827662395050817499"
x2="688.738461538461538461538461538461538462"
y2="36.656208572691117984975695978789217852" style=" stroke:
blue;" /> <line
x1="688.738461538461538461538461538461538462"
y1="36.656208572691117984975695978789217852"
x2="754.153846153846153846153846153846153846"
y2="36.417587273530711444984533804684047724" style=" stroke:
blue;" /> <g id="Planned"
style="visibility:visible">
<circle cx="100"
cy="302.599646486964206805125939019001325674" r="2"
style="stroke: black; fill:blue;" />
<text x="90"
y="302.599646486964206805125939019001325674" style="fill:blue;
stroke-width: 1; font-family:Courier; font-size:10pt;">57</text>
<circle
cx="165.415384615384615384615384615384615385"
cy="218.72425983208130799823243482103402563" r="2"
style="stroke: black; fill:blue;" />
<text
x="90" y="302.599646486964206805125939019001325674"
style="fill:blue; stroke-width: 1; font-family:Courier;
font-size:10pt;">123567890 abcdefg</text> </g>
</svg> *************************** However, if I change the hi-lighted bit to output the
character 4 or x it throws an error: <text x="90"
y="302.599646486964206805125939019001325674" style="fill:blue;
stroke-width: 1; font-family:Courier; font-size:10pt;">44123567890 abcdefg</text> ************************* Here is the error java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(System.java) at
java.awt.geom.GeneralPathIterator.currentSegment(GeneralPathIterator.java:104) at
java.awt.geom.GeneralPath.append(GeneralPath.java:309) at
java.awt.geom.GeneralPath.append(GeneralPath.java:282) at
org.apache.batik.gvt.font.AWTGVTGlyphVector.getOutline(Unknown Source) at
org.apache.batik.gvt.font.AWTGVTGlyphVector.getBounds2D(Unknown Source) at
org.apache.batik.gvt.text.GlyphLayout.getBounds2D(Unknown Source) at org.apache.batik.gvt.renderer.StrokingTextPainter.getBounds2D(Unknown
Source) at
org.apache.batik.gvt.TextNode.getPrimitiveBounds(Unknown Source) at
org.apache.batik.gvt.AbstractGraphicsNode.getTransformedPrimitiveBounds(Unknown
Source) at org.apache.batik.gvt.AbstractGraphicsNode.getTransformedBounds(Unknown
Source) at
org.apache.batik.gvt.CompositeGraphicsNode.getPrimitiveBounds(Unknown Source) at
org.apache.batik.gvt.CompositeGraphicsNode.getTransformedPrimitiveBounds(Unknown
Source) at
org.apache.batik.gvt.AbstractGraphicsNode.getTransformedBounds(Unknown Source) at
org.apache.batik.gvt.CompositeGraphicsNode.getPrimitiveBounds(Unknown Source) at org.apache.batik.gvt.CompositeGraphicsNode.getTransformedPrimitiveBounds(Unknown
Source) at
org.apache.batik.gvt.AbstractGraphicsNode.getTransformedBounds(Unknown Source) at
org.apache.batik.gvt.CompositeGraphicsNode.getPrimitiveBounds(Unknown Source) at
org.apache.batik.gvt.AbstractGraphicsNode.getBounds(Unknown Source) at
org.apache.batik.gvt.AbstractGraphicsNode.paint(Unknown Source) at
org.apache.fop.svg.PDFTranscoder.transcode(PDFTranscoder.java:237) at org.apache.batik.transcoder.XMLAbstractTranscoder.transcode(Unknown
Source) at
org.apache.batik.transcoder.SVGAbstractTranscoder.transcode(Unknown Source) at
com.aca.pdfwriter.svg2pdf.convertSVG2PDF(pdfwriter:84) ********************* I am quite baffled as to how I resolve this. I tried naming standard fonts e.g. Courier, Arial Times Helvitica. But it came
down to the same issue each time, it is only when the character 4 or x is
displayed as text that the error occurs. Any ideas would be appreciated. Regards Mark
Jones Senior Developer 0117 9186327 BVT
Surface Fleet Ltd
Building 20x, Filton, www.bvtsurfacefleet.com A BAE
Systems and VT Group joint venture Registered
No. 06160534
******************************************************************** |
| Free embeddable forum powered by Nabble | Forum Help |