Hi,
Difficult to tell because it isn't the full code.
After closing targetDoc you didn't assign null to it, so it will be
reused here:
// instantiate the target pdf file, if it has not been
instantiated
if (targetDoc == null) {
targetDoc = new PDDocument();
}
Similar problem with font. You cannot use the same PDFont with several
documents.
If this doesn't help, please reduce your code to a Short, Self
Contained, Correct, Example:
http://sscce.org/
https://stackoverflow.com/help/mcve .
Tilman
Am 07.06.2017 um 22:18 schrieb Leon Tian:
Hi
I met below exception when trying to generate PDF files. I use the BatangChe
TrueTypeFont to generate PDF for Korean language. I have a batch of 100 files
to process and it usually starts to giving this error towards the end.
[err] java.io.IOException: Requested page with index 1728 was not written
before.
[err] at org.apache.pdfbox.io.ScratchFile.readPage(ScratchFile.java:303)
[err] at
org.apache.pdfbox.io.ScratchFileBuffer.read(ScratchFileBuffer.java:460)
[err] at java.io.InputStream.read(Unknown Source)
[err] at
org.apache.pdfbox.filter.FlateFilter.decompress(FlateFilter.java:133)
[err] at org.apache.pdfbox.filter.FlateFilter.decode(FlateFilter.java:73)
[err] at org.apache.pdfbox.cos.COSInputStream.create(COSInputStream.java:69)
[err] at
org.apache.pdfbox.cos.COSStream.createInputStream(COSStream.java:162)
[err] at
org.apache.pdfbox.pdmodel.common.PDStream.createInputStream(PDStream.java:235)
[err] at
org.apache.pdfbox.pdmodel.common.PDStream.toByteArray(PDStream.java:499)
[err] at
org.apache.pdfbox.pdmodel.font.TrueTypeEmbedder.buildFontFile2(TrueTypeEmbedder.java:104)
[err] at
org.apache.pdfbox.pdmodel.font.TrueTypeEmbedder.subset(TrueTypeEmbedder.java:331)
[err] at
org.apache.pdfbox.pdmodel.font.PDType0Font.subset(PDType0Font.java:162)
[err] at
com.ibm.esh.bluemix.iol.pdf.PDFCreator.createPDF(IOLPDFCreator.java:227)
Here's the code that I use
public byte[] createPDF(String[] text) throws IOLPDFException{
byte[] pdfBytes = null;
PDDocument sourceDoc = null;
try {
// get the source PDF template page
sourceDoc =
PDDocument.load(IOLPDFCreator.class.getResourceAsStream(sourcePath));
PDPage templatePage = sourceDoc.getPage(0);
// instantiate the target pdf file, if it has not been instantiated
if (targetDoc == null) {
targetDoc = new PDDocument();
}
if (font == null) {
loadFont(targetDoc);
}
PDPageContentStream contents = null;
int pageNum = 0;
int rowNum = 0;
for (int i=0; i< text.length; i++) {
// Create a Pattern object based on regex for top page line
Pattern rLine = Pattern.compile("PAGE : 0\\d\\d\\d");
// Create matcher object.
Matcher mLine = rLine.matcher(text[i]);
//if page top line is found, initialize a new page
if (mLine.find()) {
//if not the first page, close the previous page content
stream
if (contents!=null) {
contents.close();
}
//get a blank template page imported
targetDoc.importPage(templatePage);
PDPage page = targetDoc.getPage(pageNum);
contents = new PDPageContentStream(targetDoc, page,
AppendMode.APPEND, true, true);
rowNum = 0;
pageNum ++;
continue;
}
// write the text line onto the page
contents.beginText();
contents.setFont(font, size);
contents.newLineAtOffset(x, y - rowNum*space);
contents.showText(text[i]);
contents.endText();
rowNum++;
}
//close the last page content stream
contents.close();
//save the document and get the bytes
ByteArrayOutputStream out = new ByteArrayOutputStream();
targetDoc.save(out);
pdfBytes = out.toByteArray();
return pdfBytes;
} catch (IOException ie){
System.out.println("IOException while creating pdf...");
ie.printStackTrace();
throw new PDFException("IOL createPDF encountered IOexception...");
} catch (Exception ex) {
ex.printStackTrace();
throw new PDFException("IOL createPDF encountered exception...");
} finally {
//close both targetDoc and sourceDoc
try {
if (targetDoc != null) {
targetDoc.close();
}
if (sourceDoc != null) {
sourceDoc.close();
}
} catch (IOException ie){
System.out.println("IOException while closing document...");
ie.printStackTrace();
throw new PDFException("IOL createPDF encountered
IOexception...");
}
}
}
Your help is appreciated!
<http://aka.ms/weboutlook>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]