gnujpdf - use UTF-8 in string.getBytes() everywhere

This commit is contained in:
Jindra Petřík
2022-10-22 21:15:20 +02:00
parent ef2ccab594
commit 31a461ca96
19 changed files with 304 additions and 305 deletions

Binary file not shown.

View File

@@ -226,52 +226,52 @@ public class PDFAnnot extends PDFObject implements Serializable {
writeStart(os);
// now the objects body
os.write("/Subtype ".getBytes());
os.write(subtype.getBytes());
os.write("\n/Rect [".getBytes());
os.write(Integer.toString(l).getBytes());
os.write(" ".getBytes());
os.write(Integer.toString(b).getBytes());
os.write(" ".getBytes());
os.write(Integer.toString(r).getBytes());
os.write(" ".getBytes());
os.write(Integer.toString(t).getBytes());
os.write("]\n".getBytes());
os.write("/Subtype ".getBytes("UTF-8"));
os.write(subtype.getBytes("UTF-8"));
os.write("\n/Rect [".getBytes("UTF-8"));
os.write(Integer.toString(l).getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
os.write(Integer.toString(b).getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
os.write(Integer.toString(r).getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
os.write(Integer.toString(t).getBytes("UTF-8"));
os.write("]\n".getBytes("UTF-8"));
// handle the border
if (border == null) {
os.write("/Border [0 0 0]\n".getBytes());
os.write("/Border [0 0 0]\n".getBytes("UTF-8"));
//if(pdf.defaultOutlineBorder==null)
//pdf.add(pdf.defaultOutlineBorder = new border(SOLID,0.0));
//os.write(pdf.defaultOutlineBorder.toString().getBytes());
//os.write(pdf.defaultOutlineBorder.toString().getBytes("UTF-8"));
} else {
os.write("/BS ".getBytes());
os.write(border.toString().getBytes());
os.write("\n".getBytes());
os.write("/BS ".getBytes("UTF-8"));
os.write(border.toString().getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
}
// Now the annotation subtypes
if (subtype.equals("/Text")) {
os.write("/Contents ".getBytes());
os.write(PDFStringHelper.makePDFString(s).getBytes());
os.write("\n".getBytes());
os.write("/Contents ".getBytes("UTF-8"));
os.write(PDFStringHelper.makePDFString(s).getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
} else if (subtype.equals("/Link")) {
os.write("/Dest [".getBytes());
os.write(dest.toString().getBytes());
os.write("/Dest [".getBytes("UTF-8"));
os.write(dest.toString().getBytes("UTF-8"));
if (fl == FULL_PAGE) {
os.write(" /Fit]".getBytes());
os.write(" /Fit]".getBytes("UTF-8"));
} else {
os.write(" /FitR ".getBytes());
os.write(Integer.toString(fl).getBytes());
os.write(" ".getBytes());
os.write(Integer.toString(fb).getBytes());
os.write(" ".getBytes());
os.write(Integer.toString(fr).getBytes());
os.write(" ".getBytes());
os.write(Integer.toString(ft).getBytes());
os.write("]".getBytes());
os.write(" /FitR ".getBytes("UTF-8"));
os.write(Integer.toString(fl).getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
os.write(Integer.toString(fb).getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
os.write(Integer.toString(fr).getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
os.write(Integer.toString(ft).getBytes("UTF-8"));
os.write("]".getBytes("UTF-8"));
}
os.write("\n".getBytes());
os.write("\n".getBytes("UTF-8"));
}
// finish off with its footer

View File

@@ -90,25 +90,25 @@ public class PDFBorder extends PDFObject {
@Override
public void write(OutputStream os) throws IOException {
//writeStart(os);
os.write(Integer.toString(objser).getBytes());
os.write(" 0 obj\n".getBytes());
os.write(Integer.toString(objser).getBytes("UTF-8"));
os.write(" 0 obj\n".getBytes("UTF-8"));
os.write("[/S /".getBytes());
os.write("SDBIU".substring(style, style + 1).getBytes());
os.write(" /W ".getBytes());
os.write(Double.toString(width).getBytes());
os.write("[/S /".getBytes("UTF-8"));
os.write("SDBIU".substring(style, style + 1).getBytes("UTF-8"));
os.write(" /W ".getBytes("UTF-8"));
os.write(Double.toString(width).getBytes("UTF-8"));
if (dash != null) {
os.write(" /D [".getBytes());
os.write(Double.toString(dash[0]).getBytes());
os.write(" /D [".getBytes("UTF-8"));
os.write(Double.toString(dash[0]).getBytes("UTF-8"));
for (int i = 1; i < dash.length; i++) {
os.write(" ".getBytes());
os.write(Double.toString(dash[i]).getBytes());
os.write(" ".getBytes("UTF-8"));
os.write(Double.toString(dash[i]).getBytes("UTF-8"));
}
os.write("] ".getBytes());
os.write("] ".getBytes("UTF-8"));
}
os.write("]\n".getBytes());
os.write("]\n".getBytes("UTF-8"));
//writeEnd(os);
os.write("endobj\n".getBytes());
os.write("endobj\n".getBytes("UTF-8"));
}
} // end class PDFBorder

View File

@@ -80,26 +80,26 @@ public class PDFCatalog extends PDFObject {
writeStart(os);
// now the objects body
os.write("/Version /1.7\n".getBytes());
os.write("/Version /1.7\n".getBytes("UTF-8"));
// the /Pages object
os.write("/Pages ".getBytes());
os.write(pdfPageList.toString().getBytes());
os.write("\n".getBytes());
os.write("/Pages ".getBytes("UTF-8"));
os.write(pdfPageList.toString().getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
// the Outlines object
if (outlines != null) {
//if(outlines.getLast()>-1) {
os.write("/Outlines ".getBytes());
os.write(outlines.toString().getBytes());
os.write("\n".getBytes());
os.write("/Outlines ".getBytes("UTF-8"));
os.write(outlines.toString().getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
//}
}
// the /PageMode setting
os.write("/PageMode ".getBytes());
os.write(PDFDocument.PDF_PAGE_MODES[pagemode].getBytes());
os.write("\n".getBytes());
os.write("/PageMode ".getBytes("UTF-8"));
os.write(PDFDocument.PDF_PAGE_MODES[pagemode].getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
// finish off with its footer
writeEnd(os);

File diff suppressed because one or more lines are too long

View File

@@ -25,12 +25,12 @@ public class PDFEmbeddedFont extends PDFFont {
@Override
public void write(OutputStream os) throws IOException {
writeStart(os);
os.write("/Subtype /Type0\n".getBytes());
os.write(("/BaseFont " + font + "\n").getBytes());
os.write(("/Name " + name + "\n").getBytes());
os.write("/Encoding /Identity-H\n".getBytes());
os.write(("/ToUnicode " + toUnicode + "\n").getBytes());
os.write(("/DescendantFonts [" + descendantFont + "]\n").getBytes());
os.write("/Subtype /Type0\n".getBytes("UTF-8"));
os.write(("/BaseFont " + font + "\n").getBytes("UTF-8"));
os.write(("/Name " + name + "\n").getBytes("UTF-8"));
os.write("/Encoding /Identity-H\n".getBytes("UTF-8"));
os.write(("/ToUnicode " + toUnicode + "\n").getBytes("UTF-8"));
os.write(("/DescendantFonts [" + descendantFont + "]\n").getBytes("UTF-8"));
writeEnd(os);
}

View File

@@ -150,19 +150,19 @@ public class PDFFont extends PDFObject implements Serializable {
writeStart(os);
// now the objects body
os.write("/Subtype ".getBytes());
os.write(type.getBytes());
os.write("\n/Name ".getBytes());
os.write(name.getBytes());
os.write("\n/BaseFont ".getBytes());
os.write(font.getBytes());
os.write("/Subtype ".getBytes("UTF-8"));
os.write(type.getBytes("UTF-8"));
os.write("\n/Name ".getBytes("UTF-8"));
os.write(name.getBytes("UTF-8"));
os.write("\n/BaseFont ".getBytes("UTF-8"));
os.write(font.getBytes("UTF-8"));
// The performance problem in Bug#106693 comments out the
// encoding line, and removes the /WinAnsiEncoding. I'm going
// to leave them in, as the Encoding fixes another problem.
os.write("\n/Encoding ".getBytes());
os.write("/WinAnsiEncoding".getBytes());
//os.write(encoding.getBytes());
os.write("\n".getBytes());
os.write("\n/Encoding ".getBytes("UTF-8"));
os.write("/WinAnsiEncoding".getBytes("UTF-8"));
//os.write(encoding.getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
// finish off with its footer
writeEnd(os);

View File

@@ -25,7 +25,7 @@ public class PDFGradientFunction3 extends PDFObject {
@Override
public void write(OutputStream os) throws IOException {
writeStart(os);
os.write(("/FunctionType 3 /Domain [0 1] /Functions [" + String.join(" ", functions2Refs) + "] ").getBytes());
os.write(("/FunctionType 3 /Domain [0 1] /Functions [" + String.join(" ", functions2Refs) + "] ").getBytes("UTF-8"));
int lastcols = fgrad.getColors().length - 1;
List<String> bounds = new ArrayList<>();
List<String> encode = new ArrayList<>();
@@ -35,8 +35,8 @@ public class PDFGradientFunction3 extends PDFObject {
}
encode.add("0 1");
}
os.write(("/Bounds [" + String.join(" ", bounds) + "] ").getBytes());
os.write(("/Encode [" + String.join(" ", encode) + "]\n").getBytes());
os.write(("/Bounds [" + String.join(" ", bounds) + "] ").getBytes("UTF-8"));
os.write(("/Encode [" + String.join(" ", encode) + "]\n").getBytes("UTF-8"));
writeEnd(os);
}

File diff suppressed because one or more lines are too long

View File

@@ -269,13 +269,13 @@ public class PDFImage extends PDFStream implements ImageObserver, Serializable {
public void writeStream(OutputStream os) throws IOException {
// This is a non-deflated stream
/*
os.write("/Length ".getBytes());
os.write("/Length ".getBytes("UTF-8"));
// Accout for stream\n ... >\nendstream
os.write(Integer.toString(buf.size() + 18).getBytes());
os.write("\n/Filter /ASCII85Decode".getBytes());
os.write("\n>>\nstream\n".getBytes());
os.write(Integer.toString(buf.size() + 18).getBytes("UTF-8"));
os.write("\n/Filter /ASCII85Decode".getBytes("UTF-8"));
os.write("\n>>\nstream\n".getBytes("UTF-8"));
buf.writeTo(os);
os.write(">\nendstream\nendobj\n\n".getBytes());
os.write(">\nendstream\nendobj\n\n".getBytes("UTF-8"));
*/
ByteArrayOutputStream b = new ByteArrayOutputStream();
DeflaterOutputStream dos = new DeflaterOutputStream(b);
@@ -284,13 +284,13 @@ public class PDFImage extends PDFStream implements ImageObserver, Serializable {
dos.close();
// FlatDecode is compatible with the java.util.zip.Deflater class
//os.write("/Filter [/FlateDecode /ASCIIHexDecode]\n".getBytes());
os.write("/Filter [/FlateDecode /ASCII85Decode]\n".getBytes());
os.write("/Length ".getBytes());
os.write(Integer.toString(b.size()).getBytes());
os.write("\n>>\nstream\n".getBytes());
//os.write("/Filter [/FlateDecode /ASCIIHexDecode]\n".getBytes("UTF-8"));
os.write("/Filter [/FlateDecode /ASCII85Decode]\n".getBytes("UTF-8"));
os.write("/Length ".getBytes("UTF-8"));
os.write(Integer.toString(b.size()).getBytes("UTF-8"));
os.write("\n>>\nstream\n".getBytes("UTF-8"));
b.writeTo(os);
os.write("\nendstream\nendobj\n".getBytes());
os.write("\nendstream\nendobj\n".getBytes("UTF-8"));
} // end writeStream
@@ -306,18 +306,18 @@ public class PDFImage extends PDFStream implements ImageObserver, Serializable {
writeStart(os);
// write the extra details
os.write("/Subtype /Image\n/Name ".getBytes());
os.write(name.getBytes());
os.write("\n/Width ".getBytes());
os.write(Integer.toString(width).getBytes());
os.write("\n/Height ".getBytes());
os.write(Integer.toString(height).getBytes());
os.write("\n/BitsPerComponent 8\n/ColorSpace /DeviceRGB\n".getBytes());
os.write("/Subtype /Image\n/Name ".getBytes("UTF-8"));
os.write(name.getBytes("UTF-8"));
os.write("\n/Width ".getBytes("UTF-8"));
os.write(Integer.toString(width).getBytes("UTF-8"));
os.write("\n/Height ".getBytes("UTF-8"));
os.write(Integer.toString(height).getBytes("UTF-8"));
os.write("\n/BitsPerComponent 8\n/ColorSpace /DeviceRGB\n".getBytes("UTF-8"));
if (mask != null) {
os.write(("/SMask " + mask + "\n").getBytes());
os.write(("/SMask " + mask + "\n").getBytes("UTF-8"));
}
if (interpolate) {
os.write("/Interpolate true\n".getBytes());
os.write("/Interpolate true\n".getBytes("UTF-8"));
}
// write the pixels to the stream
@@ -353,7 +353,7 @@ public class PDFImage extends PDFStream implements ImageObserver, Serializable {
if (encTuple.equals("!!!!!")) {
encTuple = "z";
}
bos.write(encTuple.getBytes());
bos.write(encTuple.getBytes("UTF-8"));
}
}
}
@@ -361,8 +361,8 @@ public class PDFImage extends PDFStream implements ImageObserver, Serializable {
String lastTuple = base85Encoding(out.toString());
//System.out.println("lastTuple: " + lastTuple);
bos.write(lastTuple.getBytes());
bos.write("~".getBytes());
bos.write(lastTuple.getBytes("UTF-8"));
bos.write("~".getBytes("UTF-8"));
//System.out.println("Processing done");
// this will write the actual stream

View File

@@ -159,38 +159,38 @@ public class PDFInfo extends PDFObject {
// now the objects body
if (author != null) {
os.write("/Author (".getBytes());
os.write(PDFStringHelper.makePDFString(author).getBytes());
os.write(")\n".getBytes());
os.write("/Author (".getBytes("UTF-8"));
os.write(PDFStringHelper.makePDFString(author).getBytes("UTF-8"));
os.write(")\n".getBytes("UTF-8"));
}
if (creator != null) {
os.write("/Creator (".getBytes());
os.write(PDFStringHelper.makePDFString(creator).getBytes());
os.write(")\n".getBytes());
os.write("/Creator (".getBytes("UTF-8"));
os.write(PDFStringHelper.makePDFString(creator).getBytes("UTF-8"));
os.write(")\n".getBytes("UTF-8"));
}
os.write("/Producer ".getBytes());
os.write("/Producer ".getBytes("UTF-8"));
os.write(PDFStringHelper.makePDFString("gnujpdf - gnujpdf.sourceforge.net")
.getBytes());
os.write("\n".getBytes());
.getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
if (title != null) {
os.write("/Title ".getBytes());
os.write(PDFStringHelper.makePDFString(title).getBytes());
os.write("\n".getBytes());
os.write("/Title ".getBytes("UTF-8"));
os.write(PDFStringHelper.makePDFString(title).getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
}
if (subject != null) {
os.write("/Subject (".getBytes());
os.write(PDFStringHelper.makePDFString(subject).getBytes());
os.write(")\n".getBytes());
os.write("/Subject (".getBytes("UTF-8"));
os.write(PDFStringHelper.makePDFString(subject).getBytes("UTF-8"));
os.write(")\n".getBytes("UTF-8"));
}
if (keywords != null) {
os.write("/Keywords (".getBytes());
os.write(PDFStringHelper.makePDFString(keywords).getBytes());
os.write(")\n".getBytes());
os.write("/Keywords (".getBytes("UTF-8"));
os.write(PDFStringHelper.makePDFString(keywords).getBytes("UTF-8"));
os.write(")\n".getBytes("UTF-8"));
}
// finish off with its footer

View File

@@ -74,23 +74,22 @@ public class PDFMask extends PDFStream implements ImageObserver {
dos.finish();
dos.close();
os.write("/Subtype /Image\n".getBytes());
os.write(("/Width " + width + "\n").getBytes());
os.write(("/Height " + height + "\n").getBytes());
os.write(("/BitsPerComponent 8\n").getBytes());
os.write(("/ColorSpace /DeviceGray\n").getBytes());
os.write(("/Decode [1 0]\n").getBytes());
os.write("/Subtype /Image\n".getBytes("UTF-8"));
os.write(("/Width " + width + "\n").getBytes("UTF-8"));
os.write(("/Height " + height + "\n").getBytes("UTF-8"));
os.write(("/BitsPerComponent 8\n").getBytes("UTF-8"));
os.write(("/ColorSpace /DeviceGray\n").getBytes("UTF-8"));
os.write(("/Decode [1 0]\n").getBytes("UTF-8"));
// FlatDecode is compatible with the java.util.zip.Deflater class
os.write("/Filter /FlateDecode\n".getBytes());
os.write("/Length ".getBytes());
os.write(Integer.toString(b.size() + 1).getBytes());
os.write("\n>>\nstream\n".getBytes());
os.write("/Filter /FlateDecode\n".getBytes("UTF-8"));
os.write("/Length ".getBytes("UTF-8"));
os.write(Integer.toString(b.size() + 1).getBytes("UTF-8"));
os.write("\n>>\nstream\n".getBytes("UTF-8"));
b.writeTo(os);
os.write("\n".getBytes());
os.write("\n".getBytes("UTF-8"));
os.write("endstream\nendobj\n".getBytes());
os.write("endstream\nendobj\n".getBytes("UTF-8"));
// Unlike most PDF objects, we dont call writeEnd(os) because we
// contain a stream

View File

@@ -117,12 +117,12 @@ public abstract class PDFObject implements Serializable {
* @exception IOException on error
*/
public final void writeStart(OutputStream os) throws IOException {
os.write(Integer.toString(objser).getBytes());
os.write(" 0 obj\n<<\n".getBytes());
os.write(Integer.toString(objser).getBytes("UTF-8"));
os.write(" 0 obj\n<<\n".getBytes("UTF-8"));
if (type != null) {
os.write("/Type ".getBytes());
os.write(type.getBytes());
os.write("\n".getBytes());
os.write("/Type ".getBytes("UTF-8"));
os.write(type.getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
}
}
@@ -137,7 +137,7 @@ public abstract class PDFObject implements Serializable {
* @exception IOException on error
*/
public final void writeEnd(OutputStream os) throws IOException {
os.write(">>\nendobj\n".getBytes());
os.write(">>\nendobj\n".getBytes("UTF-8"));
}
/**

View File

@@ -203,74 +203,74 @@ public class PDFOutline extends PDFObject implements Serializable {
// now the objects body
// These are for kids only
if (parent != null) {
os.write("/Title ".getBytes());
os.write(PDFStringHelper.makePDFString(title).getBytes());
os.write("\n/Dest [".getBytes());
os.write(dest.toString().getBytes());
os.write("/Title ".getBytes("UTF-8"));
os.write(PDFStringHelper.makePDFString(title).getBytes("UTF-8"));
os.write("\n/Dest [".getBytes("UTF-8"));
os.write(dest.toString().getBytes("UTF-8"));
if (destMode == FITPAGE) {
//os.write(" null null null]\n/Parent ".getBytes());
os.write(" /Fit]\n/Parent ".getBytes());
//os.write(" null null null]\n/Parent ".getBytes("UTF-8"));
os.write(" /Fit]\n/Parent ".getBytes("UTF-8"));
} else {
os.write(" /FitR ".getBytes());
os.write(Integer.toString(l).getBytes());
os.write(" ".getBytes());
os.write(Integer.toString(b).getBytes());
os.write(" ".getBytes());
os.write(Integer.toString(r).getBytes());
os.write(" ".getBytes());
os.write(Integer.toString(t).getBytes());
os.write("]\n/Parent ".getBytes());
os.write(" /FitR ".getBytes("UTF-8"));
os.write(Integer.toString(l).getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
os.write(Integer.toString(b).getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
os.write(Integer.toString(r).getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
os.write(Integer.toString(t).getBytes("UTF-8"));
os.write("]\n/Parent ".getBytes("UTF-8"));
}
os.write(parent.toString().getBytes());
os.write("\n".getBytes());
os.write(parent.toString().getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
}
// the number of outlines in this document
if (parent == null) {
// were the top level node, so all are open by default
if (outlines.size() > 0) {
os.write("/Count ".getBytes());
os.write(Integer.toString(outlines.size()).getBytes());
os.write("\n".getBytes());
os.write("/Count ".getBytes("UTF-8"));
os.write(Integer.toString(outlines.size()).getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
}
} else {
// were a decendent, so by default we are closed. Find out how many
// entries are below us
int c = descendants();
if (c > 0) {
os.write("/Count ".getBytes());
os.write(Integer.toString(-c).getBytes());
os.write("\n".getBytes());
os.write("/Count ".getBytes("UTF-8"));
os.write(Integer.toString(-c).getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
}
}
// These only valid if we have children
if (outlines.size() > 0) {
// the number of the first outline in list
os.write("/First ".getBytes());
os.write(outlines.elementAt(0).toString().getBytes());
os.write("\n".getBytes());
os.write("/First ".getBytes("UTF-8"));
os.write(outlines.elementAt(0).toString().getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
// the number of the last outline in list
os.write("/Last ".getBytes());
os.write(outlines.elementAt(outlines.size() - 1).toString().getBytes());
os.write("\n".getBytes());
os.write("/Last ".getBytes("UTF-8"));
os.write(outlines.elementAt(outlines.size() - 1).toString().getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
}
if (parent != null) {
int index = parent.getIndex(this);
if (index > 0) {
// Now if were not the first, then we have a /Prev node
os.write("/Prev ".getBytes());
os.write(parent.getNode(index - 1).toString().getBytes());
os.write("\n".getBytes());
os.write("/Prev ".getBytes("UTF-8"));
os.write(parent.getNode(index - 1).toString().getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
}
if (index < parent.getLast()) {
// We have a /Next node
os.write("/Next ".getBytes());
os.write(parent.getNode(index + 1).toString().getBytes());
os.write("\n".getBytes());
os.write("/Next ".getBytes("UTF-8"));
os.write(parent.getNode(index + 1).toString().getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
}
}

View File

@@ -85,11 +85,11 @@ public class PDFOutput {
//
// Note: As the encoding is fixed here, we use getBytes().
//
baos.write("%PDF-1.2\n".getBytes());
baos.write("%PDF-1.2\n".getBytes("UTF-8"));
// This second comment is advised in the PDF Reference manual
// page 61
baos.write("%\342\343\317\323\n".getBytes());
baos.write("%\342\343\317\323\n".getBytes("UTF-8"));
offset = baos.size();
baos.writeTo(os);
@@ -129,10 +129,10 @@ public class PDFOutput {
// Also, offset is preserved, and marks the begining of this block.
// This is required by PDF at the end of the PDF file.
baos.reset();
baos.write("xref\n".getBytes());
baos.write("xref\n".getBytes("UTF-8"));
// Now a single subsection for object 0
//baos.write("0 1\n0000000000 65535 f \n".getBytes());
//baos.write("0 1\n0000000000 65535 f \n".getBytes("UTF-8"));
// Now scan through the offsets list. The should be in sequence,
// but just in case:
int firstid = 0; // First id in block
@@ -167,33 +167,33 @@ public class PDFOutput {
}
// now the trailer object
baos.write("trailer\n<<\n".getBytes());
baos.write("trailer\n<<\n".getBytes("UTF-8"));
// the number of entries (REQUIRED)
baos.write("/Size ".getBytes());
baos.write(Integer.toString(offsets.size() + 1).getBytes());
baos.write("\n".getBytes());
baos.write("/Size ".getBytes("UTF-8"));
baos.write(Integer.toString(offsets.size() + 1).getBytes("UTF-8"));
baos.write("\n".getBytes("UTF-8"));
// the /Root catalog indirect reference (REQUIRED)
if (rootID != null) {
baos.write("/Root ".getBytes());
baos.write(rootID.toString().getBytes());
baos.write("\n".getBytes());
baos.write("/Root ".getBytes("UTF-8"));
baos.write(rootID.toString().getBytes("UTF-8"));
baos.write("\n".getBytes("UTF-8"));
} else {
throw new IOException("Root object is not present in document");
}
// the /Info reference (OPTIONAL)
if (infoID != null) {
baos.write("/Info ".getBytes());
baos.write(infoID.toString().getBytes());
baos.write("\n".getBytes());
baos.write("/Info ".getBytes("UTF-8"));
baos.write(infoID.toString().getBytes("UTF-8"));
baos.write("\n".getBytes("UTF-8"));
}
// end the trailer object
baos.write(">>\nstartxref\n".getBytes());
baos.write(Integer.toString(offset).getBytes());
baos.write("\n%%EOF\n".getBytes());
baos.write(">>\nstartxref\n".getBytes("UTF-8"));
baos.write(Integer.toString(offset).getBytes("UTF-8"));
baos.write("\n%%EOF\n".getBytes("UTF-8"));
// now flush the stream
baos.writeTo(os);
@@ -208,15 +208,15 @@ public class PDFOutput {
* @exception IOException on write error
*/
protected void writeblock(int firstid, Vector<PDFXref> block) throws IOException {
baos.write(Integer.toString(firstid).getBytes());
baos.write(" ".getBytes());
baos.write(Integer.toString(block.size()).getBytes());
baos.write("\n".getBytes());
//baos.write("\n0000000000 65535 f\n".getBytes());
baos.write(Integer.toString(firstid).getBytes("UTF-8"));
baos.write(" ".getBytes("UTF-8"));
baos.write(Integer.toString(block.size()).getBytes("UTF-8"));
baos.write("\n".getBytes("UTF-8"));
//baos.write("\n0000000000 65535 f\n".getBytes("UTF-8"));
for (PDFXref x : block) {
baos.write(x.toString().getBytes());
baos.write("\n".getBytes());
baos.write(x.toString().getBytes("UTF-8"));
baos.write("\n".getBytes("UTF-8"));
}
}
} // end class PDFOutput

View File

@@ -520,55 +520,55 @@ public class PDFPage extends PDFObject implements Serializable {
// now the objects body
// the /Parent pages object
os.write("/Parent ".getBytes());
os.write(pdfPageList.toString().getBytes());
os.write("\n".getBytes());
os.write("/Parent ".getBytes("UTF-8"));
os.write(pdfPageList.toString().getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
// the /MediaBox for the page size
os.write("/MediaBox [".getBytes());
os.write(Integer.toString(0).getBytes());
os.write(" ".getBytes());
os.write(Integer.toString(0).getBytes());
os.write(" ".getBytes());
os.write(Integer.toString((int) pageFormat.getWidth()).getBytes());
os.write(" ".getBytes());
os.write(Integer.toString((int) pageFormat.getHeight()).getBytes());
os.write("]\n".getBytes());
os.write("/MediaBox [".getBytes("UTF-8"));
os.write(Integer.toString(0).getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
os.write(Integer.toString(0).getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
os.write(Integer.toString((int) pageFormat.getWidth()).getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
os.write(Integer.toString((int) pageFormat.getHeight()).getBytes("UTF-8"));
os.write("]\n".getBytes("UTF-8"));
// Rotation (if not zero)
// if(rotate!=0) {
// os.write("/Rotate ".getBytes());
// os.write(Integer.toString(rotate).getBytes());
// os.write("\n".getBytes());
// os.write("/Rotate ".getBytes("UTF-8"));
// os.write(Integer.toString(rotate).getBytes("UTF-8"));
// os.write("\n".getBytes("UTF-8"));
// }
writeResources(os);
// The thumbnail
if (thumbnail != null) {
os.write("/Thumb ".getBytes());
os.write(thumbnail.toString().getBytes());
os.write("\n".getBytes());
os.write("/Thumb ".getBytes("UTF-8"));
os.write(thumbnail.toString().getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
}
// the /Contents pages object
if (contents.size() > 0) {
if (contents.size() == 1) {
PDFObject ob = (PDFObject) contents.elementAt(0);
os.write("/Contents ".getBytes());
os.write(ob.toString().getBytes());
os.write("\n".getBytes());
os.write("/Contents ".getBytes("UTF-8"));
os.write(ob.toString().getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
} else {
os.write("/Contents [".getBytes());
os.write(PDFObject.toArray(contents).getBytes());
os.write("\n".getBytes());
os.write("/Contents [".getBytes("UTF-8"));
os.write(PDFObject.toArray(contents).getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
}
}
// The /Annots object
if (annotations.size() > 0) {
os.write("/Annots ".getBytes());
os.write(PDFObject.toArray(annotations).getBytes());
os.write("\n".getBytes());
os.write("/Annots ".getBytes("UTF-8"));
os.write(PDFObject.toArray(annotations).getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
}
// finish off with its footer
@@ -577,70 +577,70 @@ public class PDFPage extends PDFObject implements Serializable {
public void writeResources(OutputStream os) throws IOException {
// Now the resources
os.write("/Resources << ".getBytes());
os.write("/Resources << ".getBytes("UTF-8"));
// fonts
if (fonts.size() > 0) {
//os.write("/Font << ".getBytes());
os.write("\n/Font << ".getBytes());
//os.write("/Font << ".getBytes("UTF-8"));
os.write("\n/Font << ".getBytes("UTF-8"));
for (PDFFont font : fonts) {
os.write(font.getName().getBytes());
os.write(" ".getBytes());
os.write(font.toString().getBytes());
os.write(" ".getBytes());
os.write(font.getName().getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
os.write(font.toString().getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
}
os.write(">> ".getBytes());
os.write(">> ".getBytes("UTF-8"));
}
// Now the XObjects
if (xobjects.size() > 0) {
os.write("\n/XObject << ".getBytes());
os.write("\n/XObject << ".getBytes("UTF-8"));
for (String str : xobjects) {
os.write(str.getBytes());
os.write(" ".getBytes());
os.write(str.getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
}
os.write(">> ".getBytes());
os.write(">> ".getBytes("UTF-8"));
}
// Any other resources
for (String str : resources) {
os.write(str.getBytes());
os.write(" ".getBytes());
os.write(str.getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
}
// JM
if (imageResources.size() > 0) {
os.write("/XObject << ".getBytes());
os.write("/XObject << ".getBytes("UTF-8"));
for (String str : imageResources) {
os.write(str.getBytes());
os.write(" ".getBytes());
os.write(str.getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
}
os.write(" >> ".getBytes());
os.write(" >> ".getBytes("UTF-8"));
}
if (patternResources.size() > 0) {
os.write("/Pattern << ".getBytes());
os.write("/Pattern << ".getBytes("UTF-8"));
for (String str : patternResources) {
os.write(str.getBytes());
os.write(" ".getBytes());
os.write(str.getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
}
os.write(" >> ".getBytes());
os.write(" >> ".getBytes("UTF-8"));
}
if (shadingResources.size() > 0) {
os.write("/Shading << ".getBytes());
os.write("/Shading << ".getBytes("UTF-8"));
for (String str : shadingResources) {
os.write(str.getBytes());
os.write(" ".getBytes());
os.write(str.getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
}
os.write(" >> ".getBytes());
os.write(" >> ".getBytes("UTF-8"));
}
if (extGStateResources.size() > 0) {
os.write("/ExtGState << ".getBytes());
os.write("/ExtGState << ".getBytes("UTF-8"));
for (String str : extGStateResources) {
os.write(str.getBytes());
os.write(" ".getBytes());
os.write(str.getBytes("UTF-8"));
os.write(" ".getBytes("UTF-8"));
}
os.write(" >> ".getBytes());
os.write(" >> ".getBytes("UTF-8"));
}
os.write(">>\n".getBytes());
os.write(">>\n".getBytes("UTF-8"));
}
/**
@@ -688,19 +688,19 @@ public class PDFPage extends PDFObject implements Serializable {
// Write the object header
//writeStart(os);
os.write(Integer.toString(objser).getBytes());
os.write(" 0 obj\n".getBytes());
os.write(Integer.toString(objser).getBytes("UTF-8"));
os.write(" 0 obj\n".getBytes("UTF-8"));
// now the objects body
os.write("[".getBytes());
os.write("[".getBytes("UTF-8"));
for (String str : set) {
os.write(str.getBytes());
os.write(str.getBytes("UTF-8"));
}
os.write("]\n".getBytes());
os.write("]\n".getBytes("UTF-8"));
// finish off with its footer
//writeEnd(os);
os.write("endobj\n".getBytes());
os.write("endobj\n".getBytes("UTF-8"));
}
}

View File

@@ -79,14 +79,14 @@ public class PDFPageList extends PDFObject {
// now the objects body
// the Kids array
os.write("/Kids ".getBytes());
os.write(PDFObject.toArray(pages).getBytes());
os.write("\n".getBytes());
os.write("/Kids ".getBytes("UTF-8"));
os.write(PDFObject.toArray(pages).getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
// the number of Kids in this document
os.write("/Count ".getBytes());
os.write(Integer.toString(pages.size()).getBytes());
os.write("\n".getBytes());
os.write("/Count ".getBytes("UTF-8"));
os.write(Integer.toString(pages.size()).getBytes("UTF-8"));
os.write("\n".getBytes("UTF-8"));
// finish off with its footer
writeEnd(os);

View File

@@ -166,21 +166,21 @@ public class PDFStream extends PDFObject implements Serializable {
dos.close();
// FlatDecode is compatible with the java.util.zip.Deflater class
os.write("/Filter /FlateDecode\n".getBytes());
os.write("/Length ".getBytes());
os.write(Integer.toString(b.size() + 1).getBytes());
os.write("\n>>\nstream\n".getBytes());
os.write("/Filter /FlateDecode\n".getBytes("UTF-8"));
os.write("/Length ".getBytes("UTF-8"));
os.write(Integer.toString(b.size() + 1).getBytes("UTF-8"));
os.write("\n>>\nstream\n".getBytes("UTF-8"));
b.writeTo(os);
os.write("\n".getBytes());
os.write("\n".getBytes("UTF-8"));
} else {
// This is a non-deflated stream
os.write("/Length ".getBytes());
os.write(Integer.toString(buf.size()).getBytes());
os.write("\n>>\nstream\n".getBytes());
os.write("/Length ".getBytes("UTF-8"));
os.write(Integer.toString(buf.size()).getBytes("UTF-8"));
os.write("\n>>\nstream\n".getBytes("UTF-8"));
buf.writeTo(os);
}
os.write("endstream\nendobj\n".getBytes());
os.write("endstream\nendobj\n".getBytes("UTF-8"));
// Unlike most PDF objects, we dont call writeEnd(os) because we
// contain a stream

View File

@@ -65,15 +65,15 @@ public class PdfGradientShading extends PDFObject {
os.write(("/ShadingType 2 /ColorSpace /DeviceRGB "
+ "/Coords [" + matDf.format(coords.xMin) + " " + matDf.format(coords.yMin) + " " + matDf.format(coords.xMax) + " " + matDf.format(coords.yMax) + "] "
+ "/Domain [0 1] "
+ "/Function " + function3.getSerialID() + " 0 R /Extend [true true]\n").getBytes());
+ "/Function " + function3.getSerialID() + " 0 R /Extend [true true]\n").getBytes("UTF-8"));
writeEnd(os);
}
if (fgrad instanceof RadialGradientPaint) {
if (useFunctionShading) {
os.write("/ShadingType 1\n".getBytes());
os.write("/ColorSpace /DeviceRGB\n".getBytes());
os.write(("/Function " + radialFunction.getSerialID() + " 0 R\n").getBytes());
os.write("/ShadingType 1\n".getBytes("UTF-8"));
os.write("/ColorSpace /DeviceRGB\n".getBytes("UTF-8"));
os.write(("/Function " + radialFunction.getSerialID() + " 0 R\n").getBytes("UTF-8"));
} else {
RadialGradientPaint radGrad = (RadialGradientPaint) fgrad;
os.write(("/ShadingType 3 /ColorSpace /DeviceRGB "
@@ -86,7 +86,7 @@ public class PdfGradientShading extends PDFObject {
+ radGrad.getRadius()
+ "] "
+ "/Domain [0 1] "
+ "/Function " + function3.getSerialID() + " 0 R /Extend [true true]\n").getBytes());
+ "/Function " + function3.getSerialID() + " 0 R /Extend [true true]\n").getBytes("UTF-8"));
}
writeEnd(os);
}