如何在多线程document.close()性能下构建PDF文件?

时间:2017-08-18 08:13:55

标签: java itext

我在多个线程下构建PDF文件并添加一些带有嵌入字体的文本(字体为True Type,带有Unicode编码)。 我的代码段如下:

BaseFont basefont = BaseFont.createFont("/pathto/font.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
Font chineseFont = new Font(basefont, 14, Font.BOLD);
PdfReader pdfReader = new PdfReader(tmpfile);
Document doc = new Document(pdfReader.getPageSize(1), 50, 50, 50, 50);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter pdfWriter = PdfWriter.getInstance(doc, baos);
pdfWriter.setEncryption(null, null, PdfWriter.ALLOW_COPY, PdfWriter.STANDARD_ENCRYPTION_128);           
doc.open();
PdfImportedPage importPage = pdfWriter.getImportedPage(pdfReader, 1);
doc.newPage();
pdfContent.addTemplate(importPage, 0, 0);           
doc.add(new Paragraph("測試", chineseFont)); //chinese-characters
doc.close();            //**takes very long time**  

但doc.close()需要很长时间。 有什么问题?

at java/io/FileDescriptor.read(Native Method)
at java/io/FileDescriptor.read(FileDescriptor.java:73(Compiled Code))
at java/io/RandomAccessFile.read(RandomAccessFile.java:319(Compiled Code))
at com/lowagie/text/pdf/RandomAccessFileOrArray.read(RandomAccessFileOrArray.java:183(Compiled Code))
at com/lowagie/text/pdf/RandomAccessFileOrArray.readInt(RandomAccessFileOrArray.java:482(Compiled Code))
at com/lowagie/text/pdf/TrueTypeFontSubSet.readLoca(TrueTypeFontSubSet.java:276(Compiled Code))
at com/lowagie/text/pdf/TrueTypeFontSubSet.process(TrueTypeFontSubSet.java:139(Compiled Code))
at com/lowagie/text/pdf/TrueTypeFontUnicode.writeFont(TrueTypeFontUnicode.java:379(Compiled Code))
at com/lowagie/text/pdf/FontDetails.writeFont(FontDetails.java:280(Compiled Code))
at com/lowagie/text/pdf/PdfWriter.addSharedObjectsToBody(PdfWriter.java:1251(Compiled Code))
at com/lowagie/text/pdf/PdfWriter.close(PdfWriter.java:1173(Compiled Code))
at com/lowagie/text/pdf/PdfDocument.close(PdfDocument.java:830(Compiled Code))
at com/lowagie/text/Document.close(Document.java:495(Compiled Code))

0 个答案:

没有答案
相关问题