Skip to content

Commit b3e20dc

Browse files
committed
Fix work with Unicode strings for DocumentInfo and Outline titles
IEA-36
1 parent 44deca5 commit b3e20dc

19 files changed

+67
-8
lines changed

kernel/src/main/java/com/itextpdf/kernel/pdf/PdfDocumentInfo.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,28 +68,29 @@ public PdfDocumentInfo(PdfDocument pdfDocument) {
6868
this(new PdfDictionary(), pdfDocument);
6969
}
7070

71+
7172
public PdfDocumentInfo setTitle(String title) {
72-
getPdfObject().put(PdfName.Title, new PdfString(title));
73+
getPdfObject().put(PdfName.Title, new PdfString(title, PdfEncodings.UNICODE_BIG));
7374
return this;
7475
}
7576

7677
public PdfDocumentInfo setAuthor(String author) {
77-
getPdfObject().put(PdfName.Author, new PdfString(author));
78+
getPdfObject().put(PdfName.Author, new PdfString(author, PdfEncodings.UNICODE_BIG));
7879
return this;
7980
}
8081

8182
public PdfDocumentInfo setSubject(String subject) {
82-
getPdfObject().put(PdfName.Subject, new PdfString(subject));
83+
getPdfObject().put(PdfName.Subject, new PdfString(subject, PdfEncodings.UNICODE_BIG));
8384
return this;
8485
}
8586

8687
public PdfDocumentInfo setKeywords(String keywords) {
87-
getPdfObject().put(PdfName.Keywords, new PdfString(keywords));
88+
getPdfObject().put(PdfName.Keywords, new PdfString(keywords, PdfEncodings.UNICODE_BIG));
8889
return this;
8990
}
9091

9192
public PdfDocumentInfo setCreator(String creator) {
92-
getPdfObject().put(PdfName.Creator, new PdfString(creator));
93+
getPdfObject().put(PdfName.Creator, new PdfString(creator, PdfEncodings.UNICODE_BIG));
9394
return this;
9495
}
9596

@@ -158,6 +159,6 @@ protected boolean isWrappedObjectMustBeIndirect() {
158159

159160
private String getStringValue(PdfName name) {
160161
PdfString pdfString = getPdfObject().getAsString(name);
161-
return pdfString != null ? pdfString.getValue() : null;
162+
return pdfString != null ? pdfString.toUnicodeString() : null;
162163
}
163164
}

kernel/src/main/java/com/itextpdf/kernel/pdf/PdfOutline.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ This file is part of the iText (R) project.
4444
*/
4545
package com.itextpdf.kernel.pdf;
4646

47+
import com.itextpdf.io.font.PdfEncodings;
4748
import com.itextpdf.kernel.PdfException;
4849
import com.itextpdf.kernel.color.Color;
4950
import com.itextpdf.kernel.pdf.action.PdfAction;
@@ -97,7 +98,7 @@ public String getTitle() {
9798

9899
public void setTitle(String title){
99100
this.title = title;
100-
this.content.put(PdfName.Title, new PdfString(title));
101+
this.content.put(PdfName.Title, new PdfString(title, PdfEncodings.UNICODE_BIG));
101102
}
102103

103104
public void setColor(Color color) {
@@ -160,7 +161,7 @@ public PdfOutline addOutline(String title, int position) {
160161
position = children.size();
161162
PdfDictionary dictionary = new PdfDictionary();
162163
PdfOutline outline = new PdfOutline(title, dictionary, this);
163-
dictionary.put(PdfName.Title, new PdfString(title));
164+
dictionary.put(PdfName.Title, new PdfString(title, PdfEncodings.UNICODE_BIG));
164165
dictionary.put(PdfName.Parent, content);
165166
if (!children.isEmpty()){
166167
if (position != 0){
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package com.itextpdf.kernel.pdf;
2+
3+
import com.itextpdf.kernel.utils.CompareTool;
4+
import com.itextpdf.test.ExtendedITextTest;
5+
import com.itextpdf.test.annotations.type.IntegrationTest;
6+
7+
import java.io.File;
8+
import java.io.IOException;
9+
10+
import org.junit.Assert;
11+
import org.junit.Before;
12+
import org.junit.Test;
13+
import org.junit.experimental.categories.Category;
14+
15+
@Category(IntegrationTest.class)
16+
public class PdfStringTest extends ExtendedITextTest {
17+
18+
public static final String sourceFolder = "./src/test/resources/com/itextpdf/kernel/pdf/PdfStringTest/";
19+
public static final String destinationFolder = "./target/test/com/itextpdf/kernel/pdf/PdfStringTest/";
20+
21+
@Before
22+
public void before() {
23+
new File(destinationFolder).mkdirs();
24+
}
25+
26+
@Test
27+
public void testPdfDocumentInfoStringEncoding01() throws IOException, InterruptedException {
28+
String fileName = "testPdfDocumentInfoStringEncoding01.pdf";
29+
30+
PdfDocument pdfDocument = new PdfDocument(new PdfWriter(destinationFolder + fileName, new WriterProperties().setCompressionLevel(CompressionConstants.NO_COMPRESSION)));
31+
pdfDocument.addNewPage();
32+
33+
String author = "Алексей";
34+
String title = "Заголовок";
35+
String subject = "Тема";
36+
String keywords = "Ключевые слова";
37+
String creator = "English text";
38+
39+
pdfDocument.getDocumentInfo().setAuthor(author);
40+
pdfDocument.getDocumentInfo().setTitle(title);
41+
pdfDocument.getDocumentInfo().setSubject(subject);
42+
pdfDocument.getDocumentInfo().setKeywords(keywords);
43+
pdfDocument.getDocumentInfo().setCreator(creator);
44+
45+
pdfDocument.close();
46+
47+
PdfDocument readDoc = new PdfDocument(new PdfReader(destinationFolder + fileName));
48+
Assert.assertEquals(author, readDoc.getDocumentInfo().getAuthor());
49+
Assert.assertEquals(title, readDoc.getDocumentInfo().getTitle());
50+
Assert.assertEquals(subject, readDoc.getDocumentInfo().getSubject());
51+
Assert.assertEquals(keywords, readDoc.getDocumentInfo().getKeywords());
52+
Assert.assertEquals(creator, readDoc.getDocumentInfo().getCreator());
53+
54+
Assert.assertNull(new CompareTool().compareByContent(destinationFolder + fileName, sourceFolder + "cmp_" + fileName, destinationFolder, "diff_"));
55+
}
56+
57+
}

0 commit comments

Comments
 (0)